我在扑扑中使用库Injectable进行依赖注入,但是在无法使用SharedPreferences时出现错误。
错误:
发生异常。
在初始化绑定之前,先访问FlutterError(ServicesBinding.defaultBinaryMessenger。
如果您正在运行应用程序并且需要在调用runApp()
之前(例如,在插件初始化期间)访问二进制Messenger,则需要首先显式调用WidgetsFlutterBinding.ensureInitialized()
。
如果您正在运行测试,则可以将TestWidgetsFlutterBinding.ensureInitialized()
作为测试的main()
方法的第一行来初始化绑定。)
我尝试创建一个类,并将@lazySingleton
Future<SharedPreferences> get prefs => SharedPreferences.getInstance();
然后我尝试将WidgetsFlutterBinding.ensureInitialized()
void main() {
WidgetsFlutterBinding.ensureInitialized();
configureInjection(Environment.prod);
runApp(MyApp());
}
答案 0 :(得分:0)
下面是我使其工作的方式,不能保证这是最好的方法。
等待main方法中的configureInjection方法。
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await configureInjection(Env.prod);
runApp(App());
}
然后将您的应用包装到使用getIt.allReady()的FutureBuilder中。
Widget build(context) {
return FutureBuilder(
future: getIt.allReady(),
builder: (context, snapshot) {
if (snapshot.hasData) {
// ... your app widgets
} else {
// ... some progress indicator widget
}
}
);
}
帮助链接:
答案 1 :(得分:0)
您可以通过SharedPreference
进行注释来{@ {1}}中预先等待未来
@preResolve
和@module
abstract class InjectionModule {
//injecting third party libraries
@preResolve
Future<SharedPreferences> get prefs => SharedPreferences.getInstance();
}
类
configureInjection
以及主要班级
final GetIt getIt = GetIt.instance;
@injectableInit
Future<void> configureInjection(String env) async {
await $initGetIt(getIt, environment: env);
}