【发布时间】:2022-07-04 15:00:23
【问题描述】:
我正在尝试对我的项目进行 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:mynovatium/app/helper/injections/shared_preference/shared_preference_injection_configuration.config.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();
}
下面是 main 方法。它已经有 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'),
);
}
【问题讨论】:
-
我不确定。 di.init() 在哪里?
-
@Mahi 我添加了一些代码,但错误是一样的。你能再检查一下吗?
-
你在 main 方法中调用了 initDependencies() 吗?
-
@Mahi 是的,我有
-
请显示主要方法。
标签: flutter sharedpreferences service-locator