// Copyright 2019-2023 Hugo Pointcheval // // Use of this source code is governed by an MIT-style // license that can be found in the LICENSE file or at // https://opensource.org/licenses/MIT. import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:native_crypto_example/core/get_it.dart'; import 'package:native_crypto_example/data/data_sources/native_crypto_data_source_impl.dart'; import 'package:native_crypto_example/data/data_sources/pointy_castle_data_source_impl.dart'; import 'package:native_crypto_example/data/repositories/crypto_repository_switchable_impl.dart'; import 'package:native_crypto_example/data/repositories/logger_repository_impl.dart'; import 'package:native_crypto_example/data/repositories/session_repository_impl.dart'; import 'package:native_crypto_example/domain/entities/mode.dart'; import 'package:native_crypto_example/domain/repositories/crypto_repository.dart'; import 'package:native_crypto_example/domain/repositories/logger_repository.dart'; import 'package:native_crypto_example/domain/repositories/session_repository.dart'; import 'package:native_crypto_example/presentation/home/blocs/mode_switcher/mode_switcher_cubit.dart'; import 'package:native_crypto_example/presentation/home/state_management/home_state_management.dart'; import 'package:native_crypto_example/presentation/output/blocs/output/output_cubit.dart'; import 'package:wyatt_bloc_helper/wyatt_bloc_helper.dart'; class App extends StatelessWidget { App({super.key}); final LoggerRepository _loggerRepository = LoggerRepositoryImpl(loggerDataSource: getIt()); final SessionRepository _sessionRepository = SessionRepositoryImpl(sessionDataSource: getIt()); final CryptoRepository _cryptoRepository = CryptoRepositorySwitchableImpl( nativeCryptoDataSource: getIt(), pointyCastleDataSource: getIt(), currentMode: const NativeCryptoMode(), ); @override Widget build(BuildContext context) => MultiProvider( repositoryProviders: [ RepositoryProvider.value(value: _loggerRepository), RepositoryProvider.value( value: _sessionRepository, ), RepositoryProvider.value(value: _cryptoRepository), ], blocProviders: [ BlocProvider( create: (_) => OutputCubit(_loggerRepository), ), BlocProvider( create: (_) => ModeSwitcherCubit( _sessionRepository, _cryptoRepository, ), ) ], child: MaterialApp( title: 'NativeCrypto', debugShowCheckedModeBanner: false, home: HomeStateManagement(), ), ); }