Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
firebase中基于角色的身份验证_Firebase_Flutter_Dart_Google Cloud Firestore_Role Base Authorization - Fatal编程技术网

firebase中基于角色的身份验证

firebase中基于角色的身份验证,firebase,flutter,dart,google-cloud-firestore,role-base-authorization,Firebase,Flutter,Dart,Google Cloud Firestore,Role Base Authorization,我尝试使用以下代码将管理员用户导航到一个特殊页面,但它给出了NoSuchMethodError 这是密码 class Home extends StatelessWidget { @override Widget build(BuildContext context) { final user = Provider.of<User>(context); return StreamBuilder<DocumentSnapshot>( stream: Firest

我尝试使用以下代码将管理员用户导航到一个特殊页面,但它给出了
NoSuchMethodError
这是密码

 class Home extends StatelessWidget {

  @override
Widget build(BuildContext context) {
final user = Provider.of<User>(context);
return StreamBuilder<DocumentSnapshot>(
  stream: Firestore.instance.collection('users').document(user.uid).snapshots(),
  builder: (BuildContext context, AsyncSnapshot<DocumentSnapshot> snapshot){
    if(snapshot.hasError){
      return Text('Error: ${snapshot.error}');
    }
    switch(snapshot.connectionState){
      case ConnectionState.waiting: return Loading();
      default:
        return checkRole(snapshot.data);
    }
  
  },
);
 }
Widget checkRole(DocumentSnapshot snapshot){
if(snapshot.data['category']=='admin'){
  return AproveNotice();
}else{
  return HomePage();
}
}
}
class Home扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
最终用户=提供者(上下文);
返回流生成器(
流:Firestore.instance.collection('users').document(user.uid).snapshots(),
生成器:(BuildContext上下文,异步快照){
if(snapshot.hasError){
返回文本('Error:${snapshot.Error}');
}
交换机(快照.连接状态){
case ConnectionState.waiting:返回加载();
违约:
返回checkRole(snapshot.data);
}
},
);
}
小部件检查角色(文档快照快照){
if(snapshot.data['category']=='admin'){
返回一个路径();
}否则{
返回主页();
}
}
}
这就是我犯的错误

对null调用了方法“[]”。接收方:null尝试呼叫:[](“类别”)
更改此项:

case ConnectionState.waiting: return Loading();
      default:
        return checkRole(snapshot.data);
    }
为此:

case ConnectionState.waiting: return Loading();
case ConnectionState.done: return checkRole(snapshot.data);
    }
更改此项:

case ConnectionState.waiting: return Loading();
      default:
        return checkRole(snapshot.data);
    }
为此:

case ConnectionState.waiting: return Loading();
case ConnectionState.done: return checkRole(snapshot.data);
    }

您的
snapshot.data
对象在此处为
null

if(snapshot.data['category']=='admin'){

这是因为如果对象不存在,快照数据将为空。谷歌建议首先检查它是否存在

如果DocumentSnapshot指向不存在的文档,则getData()及其相应的方法将返回null。您始终可以通过调用exists()显式检查文档是否存在


您的
snapshot.data
对象在此处为
null

if(snapshot.data['category']=='admin'){

这是因为如果对象不存在,快照数据将为空。谷歌建议首先检查它是否存在

如果DocumentSnapshot指向不存在的文档,则getData()及其相应的方法将返回null。您始终可以通过调用exists()显式检查文档是否存在