簡體   English   中英

如何解決 getit 共享首選項錯誤?

[英]how to solve getit shared preferences error?

我正在為我的項目嘗試 bloctesting 並收到以下錯誤:

 'package:get_it/get_it_impl.dart': Failed assertion: line 372 pos 7: 'instanceFactory:= null'. Object/factory with type SharedPreferences is not registered inside GetIt. (Did you accidentally do GetIt sl=GetIt;instance(). instead of GetIt sl=GetIt;instance? Did you forget to register it )

以下是我的 sharedpreferences 注入文件

shared_preference_injection_configuration.dart

 import 'package:get_it/get_it.dart'; import 'package:injectable/injectable.dart'; import 'package:shared_preferences/shared_preferences.dart'; final GetIt getIt = GetIt.instance; @injectableInit Future<void> configureInjection(String env) async { await $initGetIt(getIt, environment: env); } Future<void> initDependencies() async { await _initSharedPref(); } Future<void> _initSharedPref() async { final SharedPreferences sharedPref = await SharedPreferences.getInstance(); getIt.registerSingleton<SharedPreferences>(sharedPref); }

shared_preference_injection.dart

 import 'package:injectable/injectable.dart'; import 'package:shared_preferences/shared_preferences.dart'; @module abstract class InjectionModule { //injecting third party libraries @preResolve Future<SharedPreferences> get prefs => SharedPreferences.getInstance(); }

下面是主要方法。它已經有 configureinjection 和 initdependencies 方法,但仍然給我同樣的錯誤。

main.dart

 void main() async { // Make sure all bindings are loaded for easy localization WidgetsFlutterBinding.ensureInitialized(); await EasyLocalization.ensureInitialized(); await configureInjection(Environment.prod); await initDependencies(); // ignore: always_specify_types EasyLocalization.logger.enableBuildModes = []; // Load bloc Observer for debugging BlocOverrides.runZoned(() => SimpleBlocObserver()); // Define main breakpoints for responsive_builder ResponsiveSizingConfig.instance.setCustomBreakpoints( const ScreenBreakpoints(desktop: PDesktopSize, tablet: PTabletSize, watch: PWatchSize), ); // Set default locale to german style // Intl.defaultLocale = 'de_DE'; // Load bloc Observer for debugging runZonedGuarded( () async { await BlocOverrides.runZoned( // Main Entry Point for our application // Translations wrapping around the whole app and start the structure for Cecht () async => runApp( EasyLocalization( supportedLocales: const <Locale>[ Locale('en'), Locale('de'), ], path: 'assets/translations_v5', fallbackLocale: const Locale('de'), child: MyApp(), ), ), blocObserver: SimpleBlocObserver(), ); }, (Object error, StackTrace stackTrace) => Logger().logWarning('${error.toString()} $stackTrace'), ); }

好的,所以當您進行 blocTesting 時,您需要在其中的設置 function 中再次注冊您的包,這是在您使用 getit 進行依賴注入的情況下。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM