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

问题描述 投票:1回答:1

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

flutter dart
1个回答
0
投票

您是否尝试以此方式获取上下文?

Future.delayed(Duration.zero, () {
      var myState = Provider.of<MyState>(context);
.......
    });
© www.soinside.com 2019 - 2024. All rights reserved.