Flutter对接Firestore出现QuerySnapshot类名冲突报错如何解决?
问题根源
你同时导入了package:cloud_firestore/cloud_firestore.dart和package:firebase/firestore.dart两个库,二者都定义了QuerySnapshot类,导致命名冲突。其中cloud_firestore是Flutter官方维护的移动端/多端通用Firestore操作库,firebase库下的fireStore模块仅用于Flutter Web场景。
可行解决方案
方案1:删除冗余导入(优先推荐)
如果你的项目不需要适配Flutter Web,直接删除文件顶部的import 'package:firebase/firestore.dart';语句即可,原有代码无需做任何修改就能正常运行。
方案2:为导入加命名前缀(适用于需要同时用两个库的场景)
如果你需要同时适配多端、两个库都不能删除,就给其中一个库的导入添加as前缀避免冲突,修改步骤如下:
- 修改导入语句,给
cloud_firestore加前缀:
import 'package:cloud_firestore/cloud_firestore.dart' as firestore; import 'package:firebase/firestore.dart';
- 把原有代码中所有来自
cloud_firestore的类都加上前缀,修改后的完整代码如下:
class GetInfo extends StatelessWidget { const GetInfo({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Material( child: StreamBuilder<firestore.QuerySnapshot>( stream: firestore.FirebaseFirestore.instance.collection('stories').snapshots(), builder: (context, snapshot) { if (snapshot.hasError) { return const Text('Something went wrong'); } if (snapshot.connectionState == ConnectionState.waiting) { return const Text('Loading'); } return ListView( children: snapshot.data!.docs.map((document) { return ListTile( title: Text(document.get('display_name')), subtitle: Text(document.get('profession')), ); }).toList(), ); }), ); } }
内容的提问来源于stack exchange,提问作者ThorstenMagic
相关产品推荐
相关产品推荐

