首页 > 解决方案 > 尝试显示来自 Firebase Firestore 的数据

问题描述

我正在尝试显示我为其创建 Crud 文件的 Firebase Firestore 中的数据。

我在 body.dart 文件中尝试了不同的东西,我不断收到循环进度条和一些错误。

Accessing hidden method Lsun/misc/Unsafe;

多次

这是body.dart

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:masterpass/Screens/Passwords/components/password_list.dart';
import 'package:masterpass/Services/crud.dart';

class Body extends StatefulWidget {
  @override
  _BodyState createState() => _BodyState();
}

class _BodyState extends State<Body> {
  CrudMethods crudMethods = new CrudMethods();

  QuerySnapshot passSnapshot;

  @override
  void initState() {
    super.initState();
    crudMethods.getData().then((result) {
      passSnapshot = result;
    });
  }

  @override
  Widget build(BuildContext context) {
    return PasswordList(passSnapshot: passSnapshot);
  }
}

Password_List.dart

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:masterpass/Screens/Passwords/components/password_tile.dart';

class PasswordList extends StatelessWidget {
  const PasswordList({
    Key key,
    @required this.passSnapshot,
  }) : super(key: key);

  final QuerySnapshot<Object> passSnapshot;

  @override
  Widget build(BuildContext context) {
    return Container(
      child: passSnapshot != null
          ? Column(
              children: [
                ListView.builder(
                  itemCount: passSnapshot.docs.length,
                  shrinkWrap: true,
                  itemBuilder: (context, index) {
                    return PasswordTile(
                      username: passSnapshot.docs[index].get('username'),
                      website: passSnapshot.docs[index].get('url'),
                    );
                  },
                )
              ],
            )
          : Container(
              child: CircularProgressIndicator(),
            ),
    );
  }
}

这是 crud.dart

import 'package:cloud_firestore/cloud_firestore.dart';

class CrudMethods {
  Future<void> addData(passwordData) async {
    FirebaseFirestore.instance
        .collection("passwords")
        .add(passwordData)
        .catchError((e) {
      print(e);
    });
  }

  getData() async {
    return await FirebaseFirestore.instance.collection("passwords").get();
  }
}

为了更好地理解代码:GitHub Repo

标签: firebaseflutterfirebase-realtime-databasegoogle-cloud-firestoresnapshot

解决方案


我发现了 2 个与您遇到的错误相关的 Github 问题,一个在Firebase中,一个在Flutter中,我相信原因是后一个,因此您可能需要关注该线程进行更新,因为这实际上是一个安卓问题。

AndroidManifest.xml但是,您可以尝试在 Firebase Github 问题中提出的解决方法,即在您的文件中添加(或更改,如果您已经拥有)此标记:

<application android:allowBackup="false">

然后运行以下命令:

flutter clean
flutter run
flutter create .

推荐阅读