Flutter/Dart中get_it注册Singleton失败但Factory正常运行问题求助
错误根因
你混淆了get_it不同注册方法的入参要求:
registerFactory的入参要求是返回实例的构造函数(类型为T Function()),你传入的() => UiUtils()符合入参类型,因此运行正常registerSingleton的入参要求是已经完成实例化的T类型对象,你仍然传入了构造函数,相当于把函数本身当成单例注册,类型不匹配因此抛出类型转换异常。
解决方案
根据你的需求可以二选一:
- 立即初始化单例:注册时直接传入实例化完成的
UiUtils对象
dependencyLocator.registerSingleton(UiUtils());
该方式会在执行注册代码时立刻创建UiUtils实例,适合初始化逻辑简单的类。
- 懒加载单例:首次调用获取实例时才执行初始化
如果不需要启动时就初始化,使用专门接收构造函数的懒加载单例注册方法即可:
dependencyLocator.registerLazySingleton(() => UiUtils());
该方式不会占用启动阶段的性能,是单例注册的常用方案。
内容的提问来源于stack exchange,提问作者greysqrl
相关产品推荐
相关产品推荐

