Flutter GetIt能否注册空实现?适配生产与测试场景
解决GetIt注册可空类型单例的问题
你遇到的编译问题是因为用错了GetIt的注册方法:registerSingleton直接接收实例对象,而不是工厂函数——工厂函数是registerLazySingleton的参数。
生产环境配置
要注册可空类型的单例并返回null,直接将null作为实例传入registerSingleton即可:
getIt.registerSingleton<OurOwnInterface?>(null);
如果需要懒加载(首次获取时才初始化),则用registerLazySingleton:
getIt.registerLazySingleton<OurOwnInterface?>(() => null);
测试环境配置
测试时直接注册你的自定义实现即可,非可空类型的实例可以赋值给可空类型的声明:
getIt.registerSingleton<OurOwnInterface>(CustomOurOwnImplementation());
获取实例
获取时指定可空类型,就能在生产环境拿到null,测试环境拿到自定义实现:
final OurOwnInterface? instance = getIt(); // 或者明确指定类型 final instance = getIt<OurOwnInterface?>();
这样就能满足生产环境传null、测试环境用自定义实现的需求。
内容的提问来源于stack exchange,提问作者Roc Boronat
相关产品推荐
相关产品推荐

