【问题标题】:Unable to fetch data from firebase firestore using flutter无法使用颤振从 Firebase Firestore 获取数据
【发布时间】:2021-12-22 08:49:41
【问题描述】:

我一直在尝试显示来自 firestore 的图像,代码显示没有错误并编译但无法显示图像,我使用的 web soo 仅配置为 Flutter web 并重新检查。 我正在使用 cloud_firestore: ^3.1.0,并考虑使用新的 withConverter 功能。 我想用它来检索我的模型并将其传递给 Firestore,但我不太确定为什么不显示。 我想我可能会错误地解析数据

我的 Firestore 后端设置 imgUrl:

//Here's my model
class ArtWork {
ArtWork({required this.name, required this.imgUrl});

final String name;
final String imgUrl;

factory ArtWork.fromJson(Map<String, dynamic> json) => ArtWork(
    name: json['name'],
    imgUrl: json['imgUrl'],
  );

Map<String, Object?> toJson() {
return {
  'name': name,
  'imgUrl': imgUrl,
  };
 }
}

我使用了 streamBuilder 和 FutureBuilder 都返回相同的输出。

class ProfilePage extends StatefulWidget {
  final artRef = FirebaseFirestore.instance
      .collection('artWorks')
      .withConverter<ArtWork>(
    fromFirestore: (snapshots, _) => ArtWork.fromJson(snapshots.data()!),
    toFirestore: (artwork, _) => artwork.toJson(),
  );

   ProfilePage({Key? key}) : super(key: key);

  @override
  State<ProfilePage> createState() => _ProfilePageState();
}

class _ProfilePageState extends State<ProfilePage> {


  @override
  Widget build(BuildContext context) {
    return SafeArea(
      child: Padding(
        padding: const EdgeInsets.all(24.0),
        child: Card(child: _buildContent(context)),
      ),
    );
  }

  Widget _buildContent(BuildContext context) {
    // final database = Provider.of<Database>(context, listen: false);
    return FutureBuilder<QuerySnapshot<ArtWork>>(
      future: widget.artRef.get(),
      builder: (BuildContext context, AsyncSnapshot<QuerySnapshot<ArtWork>> snapshot) {
        if (snapshot.hasError) {
          return Text("Something went wrong");
        }

        if (snapshot.hasData && snapshot.data!.docs.isNotEmpty) {
          return Text("Document does not exist");
        }

        if (snapshot.connectionState == ConnectionState.done) {
          return ListView(
            shrinkWrap: true,
            children: snapshot.data!.docs.map((DocumentSnapshot document) {
              Map<String, dynamic> data = document.data() as Map<String, dynamic>;
              return ListTile(
                title: Text(data['name'].toString(), style: TextStyle(color: Colors.black,fontSize: 60),),
                subtitle: Text(data['imgUrl']),
              );
            }).toList(),
          );
        }


        return  Text("loading");
      },
    );
  }

输出:

   Performing hot restart...                                          12.6s
   Restarted application in 12,582ms.
   [.2021-11-09T15:47:17.224Z]  @firebase/firestore:

【问题讨论】:

    标签: firebase flutter dart stream-builder dart-null-safety


    【解决方案1】:

    您必须提供到该节点的确切路径

    FirebaseFirestore.instance.collection('artWorks').doc('nice').withConverter<ArtWork>(...............)
    

    如果这不能解决,请先尝试使用 .get() 打印数据

    【讨论】:

    • 我尝试显示单个文档。我将流的类型更改为 documentSnapshot。又抛出一个异常:Expected a value of type 'Map&lt;String, dynamic&gt;', but got one of type '_WithConverterDocumentSnapshot&lt;ArtWork&gt;'
    • 你试过了吗?FirebaseFirestore.instance.collection('artWorks').doc('nice').withConverter&lt;ArtWork&gt;(...............)
    • 是的,我做到了,它说:期望一个类型为“Map”的值,但得到一个类型为“WithConverterDocumentSnapshot”的值。 _我猜它甚至可能是某种空错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-04
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多