Flutter 基于服务定位器的颤振依赖注入
我正在尝试开发一个具有多个页面的颤振应用程序。我有一个SignInService,我正在尝试使用get_it service locator将它注入不同的页面 服务定位器Flutter 基于服务定位器的颤振依赖注入,flutter,dart,Flutter,Dart,我正在尝试开发一个具有多个页面的颤振应用程序。我有一个SignInService,我正在尝试使用get_it service locator将它注入不同的页面 服务定位器 final locator = GetIt.instance; void setupLocator() { locator.registerSingleton<SignInService>(SignInService()); locator.registerSingleton<LocationServ
final locator = GetIt.instance;
void setupLocator() {
locator.registerSingleton<SignInService>(SignInService());
locator.registerSingleton<LocationService>(LocationService());
}
当我登录时,firebaseUser变量正在该类中设置,并且该值不为null
当我在像这样的另一个页面中使用它时,我得到一个空值
E/颤振(20069):
[错误:flatter/lib/ui/ui\u dart\u state.cc(157)]未处理的异常:NoSuchMethodError:对null调用了getter“uid”。
E/颤振(20069):接收器:空
E/flatter(20069):尝试呼叫:uid
另一页,省道
class _AnotherPageState extends State<AnotherPage> {
final _signInService = locator<SignInService>();
Firestore _firestore = Firestore.instance;
_getUserCity() async {
DocumentSnapshot snapshot = await _firestore
.collection('users')
.document(_signInService.firebaseUser.uid) //throws uid called on null error
.get();
_city = snapshot.data["city"];
}
_getPackage() async {
_getUserCity();
.
.
}
@override
initState(){
super.initState();
_getPackage();
}
@override
Widget build(BuildContext context) {
return Scaffold(
//...
);
}
class\u另一个页面状态扩展状态{
最终标志服务=定位器();
Firestore _Firestore=Firestore.instance;
_getUserCity()异步{
DocumentSnapshot快照=等待\u firestore
.collection('用户')
.document(\u signInService.firebaseUser.uid)//在出现null错误时抛出调用的uid
.get();
_城市=快照。数据[“城市”];
}
_getPackage()异步{
_getUserCity();
.
.
}
@凌驾
initState(){
super.initState();
_getPackage();
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
//...
);
}
如果您执行GetIt.find(YourName);
作为第一行,则不为空如果执行GetIt.find(YourName);
作为第一行,则不为空
class _AnotherPageState extends State<AnotherPage> {
final _signInService = locator<SignInService>();
Firestore _firestore = Firestore.instance;
_getUserCity() async {
DocumentSnapshot snapshot = await _firestore
.collection('users')
.document(_signInService.firebaseUser.uid) //throws uid called on null error
.get();
_city = snapshot.data["city"];
}
_getPackage() async {
_getUserCity();
.
.
}
@override
initState(){
super.initState();
_getPackage();
}
@override
Widget build(BuildContext context) {
return Scaffold(
//...
);
}