使用StreamBuilder访问Firestore文档实时数据提示providerinstaller本地模块未找到错误
问题根因与解决方法
1. StreamBuilder不生效的核心问题
你写的StreamBuilder判断逻辑存在错误:
Firestore的snapshots()方法返回的是持续推送实时更新的长连接Stream,只有当流被主动销毁时才会进入ConnectionState.done状态,正常接收数据时流的状态为ConnectionState.active,因此你原来的判断条件永远不会命中,会一直显示「No data available」。
而listen()方法只要Stream有新数据输出就会触发回调,因此可以正常拿到文档变更内容。
修正后的StreamBuilder代码参考:
import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/material.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: MyHomePage(), ); } } class MyHomePage extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( body: StreamBuilder( stream: FirebaseFirestore.instance .collection("users") .doc("dkYhiL8d89I3qpu4mKvu") .snapshots(), builder: (context, AsyncSnapshot<DocumentSnapshot> snapShot) { // 处理错误场景 if (snapShot.hasError) { return Text("加载出错: ${snapShot.error}"); } // 处理加载中场景 if (snapShot.connectionState == ConnectionState.waiting) { return const Text("加载中..."); } // 正常拿到数据的场景 if (snapShot.hasData) { return Text(snapShot.data?.data().toString() ?? "文档无数据"); } return const Text("No data available"); }), ); } }
2. ProviderInstaller相关警告说明
你看到的日志警告属于安卓端Google服务的通用提示,和业务代码无关,不会影响Firestore的功能使用。
该警告一般出现在没有安装Google Play服务、或者Google Play服务版本过低的安卓设备/模拟器上,更新设备的Google Play服务到最新版本即可消除该警告。
内容的提问来源于stack exchange,提问作者balu k
相关产品推荐
相关产品推荐

