在此RoleDirector小部件上方找不到正确的Provider <User>

时间:2019-09-10 16:39:21

标签: flutter dart

我在Flutter应用程序中为Auth使用BloC模型,也在基于角色的实现中使用,因此我必须检查Firestore以显示基于Role的其他主页,但是该类可以管理主页显示提供者错误,我不知道为什么。

class LandingPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final AuthService auth = Provider.of<AuthService>(context);
    return StreamBuilder<User>(
      stream: auth.onAuthStateChanged,
      builder: (_, AsyncSnapshot<User> snapshot) {
        if (snapshot.connectionState == ConnectionState.active) {
          final User user = snapshot.data;
          if (user == null) {
            return SignInPage.create(context, onSignedIn: () => Navigator.popAndPushNamed(context,"/roleDirector"));
          }           
          return Provider<User>.value(
            value: user,
            child: RoleDirector(),
          );        
        } else {
          return SignInPage.create(context, onSignedIn: () => Navigator.popAndPushNamed(context,"/roleDirector"));
        }
      },
    );
  }
}


class RoleDirector extends StatelessWidget {

  Future<String> _getRole(String useruid, BuildContext context) async {
    String role;
    try {
      await Firestore.instance.collection('users').document(useruid).get().then((userInfor) {
          role=userInfor['role'];
      });
    } on PlatformException catch (e) {
      await PlatformExceptionAlertDialog(
        title: "Error al recuperar el rol del usuario.",
        exception: e,
      ).show(context);
      print(e.message);
      Navigator.popAndPushNamed(context, "/landingPage");
    }
    return role;
  }

  @override
  Widget build(BuildContext context) {
    final user = Provider.of<User>(context);
    String uid = user.uid;
    final AuthService auth = Provider.of<AuthService>(context);
    return Scaffold(
      body:FutureBuilder(
        future: _getRole(uid, context),
        builder: (context, snapshot){
          if (snapshot.connectionState == ConnectionState.done) {
            String role = snapshot.data;        
            switch(role){
              case "buyer":{
                return BuyerPage();
              }
              break;
              case "seller":{
                return SellerPage();
              }
              break;
              case "foundation":{
                return FundationPage();
              }
              break;       
            }          
          } else {
            return CircularProgressIndicator();   
          }
          if(snapshot.hasError){
            print("error");
          } 
          return BuyerPage();
        },
      ),
    );
  }
}
  

在此RoleDirector小部件上方找不到正确的提供程序。要修复,请:

     

*确保提供者是此RoleDirector小部件的祖先     *为提供者提供类型*为消费者提供类型
  *将类型提供给Provider.of()    *始终使用包导入。
  *确保使用正确的上下文。

我试图直接返回或推送SellerPage,但是它起作用了,但是当我尝试基于角色时,它失败了。

0 个答案:

没有答案