我具有使用以下方法的MainScreen(有状态):
@override
void initState() {
super.initState();
WidgetsBinding.instance
.addPostFrameCallback((_) async {
loadFirebaseUser(context);
});
}
我的“ loadFirebaseUser”方法位于另一个名为Constants.dart的文件中,可以在任何屏幕上使用。功能如下:
Future<bool> loadFirebaseUser(BuildContext context) async {
Auth _auth = Auth();
FirebaseUser cUser = await _auth.currentUser();
if (cUser.isEmailVerified) {
DocumentSnapshot snapshot = await Firestore.instance
.collection('Profile')
.document(cUser.uid)
.get();
if (snapshot.data != null) {
User user = Provider.of<UserData>(context).getUser();
user = User.fromMap(snapshot);
Provider.of<UserData>(context).setUser(user);
return true;
} else {
return false;
}
}
return false;
}
执行此代码时出现以下错误:
Unhandled Exception: Looking up a deactivated widget's ancestor is unsafe.
不用说,因此没有给用户加载。错误指向以下行:
User user = Provider.of<UserData>(context).getUser();
我希望'loadFirebaseUSer'函数自动执行,而不是单击任何按钮,因此这是我知道的唯一放置此代码的地方。有没有办法实现这一目标?谢谢
您是否尝试以此方式获取上下文?
Future.delayed(Duration.zero, () {
var myState = Provider.of<MyState>(context);
.......
});