从init方法将上下文传递给Provider时,Flutter引发错误

时间:2019-11-18 16:31:10

标签: flutter dart

我有一个使用以下方法的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'函数自动执行,而不是单击任何按钮,因此这是我知道的唯一放置此代码的地方。有没有办法实现这一目标?谢谢

1 个答案:

答案 0 :(得分:0)

您是否尝试过这种方式获取上下文?

Future.delayed(Duration.zero, () {
      var myState = Provider.of<MyState>(context);
.......
    });