【发布时间】:2020-09-15 00:14:54
【问题描述】:
我正在尝试开发具有多个页面的 Flutter 应用程序。我有一个 SignInService,我正在尝试使用 get_it 服务定位器将其注入不同的页面。
ServiceLocator.dart
final locator = GetIt.instance;
void setupLocator() {
locator.registerSingleton<SignInService>(SignInService());
locator.registerSingleton<LocationService>(LocationService());
}
SignInService.dart
class SignInService {
GoogleSignInAccount googleAccount;
FirebaseUser firebaseUser;
FirebaseAuth _auth = FirebaseAuth.instance;
.
.
}
当我登录时,firebaseUser 变量在这个类中被设置并且值不为空。
当我像这样在另一个页面中使用它时,我得到一个空值。
E/颤振(20069): [错误:flutter/lib/ui/ui_dart_state.cc(157)] 未处理的异常:NoSuchMethodError:在 null 上调用了 getter 'uid'。 E/颤振(20069):接收者:空 E/flutter (20069):尝试调用:uid
另一个页面.dart
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(
//...
);
}
【问题讨论】: