【问题标题】:PERMISSION DENIED Firebase in FlutterFlutter 中的权限被拒绝 Firebase
【发布时间】:2019-07-13 11:11:21
【问题描述】:

我正在尝试使用来自 firebase 应用程序的文本,每个文本的每个页面视图,但它给了我这个权限被拒绝的日志,我也尝试使用 FutureBuilder,但它给出了同样的错误。

我的错误日志:

W/Firestore(28023): (0.6.6-dev) [Firestore]: 监听查询(teste) 失败:状态{code=PERMISSION_DENIED,描述=缺失或 权限不足。,原因=null} I/System.out(28023): com.google.firebase.firestore.FirebaseFirestoreException: PERMISSION_DENIED:权限缺失或不足。 W / Firestore(28023):(0.6.6-dev)[Firestore]:侦听查询(课程)失败:状态{code = PERMISSION_DENIED, 描述=缺少权限或权限不足。,原因=null} I/System.out(28023): com.google.firebase.firestore.FirebaseFirestoreException: PERMISSION_DENIED:权限缺失或不足。

代码:

    class LessonPage extends StatelessWidget {
  final LessonData lessonData;

  LessonPage(this.lessonData);

  @override
  Widget build(BuildContext context) {

    return StreamBuilder<QuerySnapshot>(
      stream: Firestore.instance.collection("lessons").snapshots(),
      builder: (context, snapshot) {
        if (snapshot.hasError) {
          return Center(
            child: Text(
              "An Has Error Occurred",
              style: TextStyle(color: Colors.red, fontSize: 24.0),
            ),
          );
        }
        switch (snapshot.connectionState) {
          case ConnectionState.waiting:
            return Center(
              child: CircularProgressIndicator(),
            );
          case ConnectionState.none:
            {
              return Center(
                child: Text(
                  "Without Connection!",
                  style: TextStyle(color: Colors.red, fontSize: 24.0),
                ),
              );
            }
          case ConnectionState.done:
          case ConnectionState.active:

          default:
          return PageView.builder(
            itemBuilder: (context, index) {
              return LessonWidget(
                  LessonData.fromDocument(snapshot.data.documents[index]));
            },
            itemCount: snapshot.data.documents.length,
          );
        }
      },
    );
  }
}

LessonWidget 类(我从 firebase 获取课程文本文档快照,并放入我的文本):

    class LessonWidget extends StatelessWidget {
  final LessonData lessonData;

  LessonWidget(this.lessonData);

  @override
  Widget build(BuildContext context) {

    return ListView(
      children: <Widget>[
        Text("${lessonData.text == null ? lessonData.text : "" }", style:
        TextStyle(color: Colors.black54, fontSize: 30.0),),
        SizedBox(height: 18.0,),
        TextField(
          decoration: InputDecoration(
              hintText: "Escreva a sua resposta aqui"
          ),
          autofocus: true,
        ),
        SizedBox(height: 10.0,),
        RaisedButton(onPressed: () {

        },
          color: Theme
              .of(context)
              .primaryColor,
          child: Text("Continuar"),)
      ],
    );

  }
}

【问题讨论】:

  • 这可能是您的数据库规则。您是否检查了 Firebase 控制台中的规则?也看看here
  • 我已经解决了,但现在我遇到了另一个问题:“getter text was called on null”。我使用代码 Text("${lessonData.text == null ? courseData.text : "" }"),
  • “getter text was called on null”是因为您的课程数据实例为空。避免 null 的一个好方法是使用 dart null-aware 运算符。你可以试试 Text( ${lessonData?.text ?? "Null courseData text" }" ); 看看 here 的 dart null 感知运算符。我希望它有所帮助。
  • 我已经更改了文本条件并将其放在 PageView.builder 中的 FutureBuilder 中
  • @LíviaCastilholiSantiago 你能解决这个问题吗?如果是,那么如何?

标签: firebase flutter google-cloud-firestore


【解决方案1】:

PERMISSION_DENIED 错误是由于在 Firestore 上设置了 security rules。默认情况下,Firestore 上设置的规则要求用户经过身份验证才能访问。我建议重新访问节点上设置的规则来解决此问题。

【讨论】:

    猜你喜欢
    • 2021-10-31
    • 2020-02-15
    • 2017-12-26
    • 2019-03-20
    • 2020-07-31
    相关资源
    最近更新 更多