管理员角色 - 用户名为 null

时间:2021-01-03 09:24:26

标签: firebase flutter firebase-authentication admin

每个用户都有一个分配给他们的管理员角色。需要此管理员角色才能显示或隐藏小部件。

我收到一条错误消息,提示 admin 在 null 上被调用。

尽管获取了其他小部件的用户数据,但我没有从 firebase 正确接收到 Admin 角色的调用者。

  FirebaseUser currentUser;
  bool isAdmin= false;

    Widget adminFeature() {
    if(isAdmin == true) {
      return Text("You are an admin");
    } else {
      return Container();
    }
  }
  _getProfileData(User user,AuthNotifier authNotifier) async {
    final uid = await Provider.of(context).auth.getCurrentUID();
    await Provider.of(context)
        .db
        .collection('userData')
        .document(uid)
        .get().then((result) {
          user.isAdmin = result.data['isAdmin'];
    });
  }
              floatingActionButtonLocation: 
                FloatingActionButtonLocation.centerDocked,
                  floatingActionButton:
                  FutureBuilder(
          future: _getProfileData(user, authNotifier),
          builder: (context, snapshot) {
            if (snapshot.connectionState == ConnectionState.done) {
              isAdmin = user.isAdmin ?? false;
            }
            return Container(
              child: Column(
                children: <Widget>[
                  FloatingActionButton(
                    backgroundColor:CompanyColors.blue[500],
                          child: const Icon(Icons.add),onPressed: () {
                              var foodNotifier = Provider.of<FoodNotifier>(context, listen: false);
                    foodNotifier.currentFood = null;
          Navigator.of(context).push(
            MaterialPageRoute(builder: (BuildContext context) {
              return FoodForm(
                isUpdating: false,
              );
            }),
          );
        },
      ),
      adminFeature(),]

1 个答案:

答案 0 :(得分:0)

试试:

  _getProfileData(User user,AuthNotifier authNotifier) async {
    final uid = await Provider.of(context).auth.getCurrentUID();
    return await Provider.of(context)
        .db
        .collection('userData')
        .document(uid)
        .get();
  }

然后在 FutureBuilder 中:

  future: _getProfileData(user, authNotifier),
          builder: (context, snapshot) {
            if (snapshot.connectionState == ConnectionState.done) {
              isAdmin = snapshot.data['isAdmin'] ?? false;
            }

返回方法的结果并将 result.data['isAdmin'] 赋值给 isAdmin 变量。