【发布时间】:2020-01-15 10:42:43
【问题描述】:
我正在尝试使用 StreamProvider 和 StreamBuilder 通过以下代码将数据从 firestore 提取到我的应用程序中。我收到错误“未定义流用户和“用户列表”以及“测试用户”不是类型。这是我的 Firestore 数据库的图片firestore setup]1
有谁知道我该如何解决这个问题,以便它从 Firestore 中提取数据并在添加新用户时动态更新?
Main.dart:
class _MyHomePageState extends State<MyHomePage> {
final auth = FirebaseAuth.instance;
final db = DatabaseService();
@override
Widget build(BuildContext context) {
var user = Provider.of<FirebaseUser>(context);
bool loggedIn = user != null;
final _width = MediaQuery.of(context).size.width;
final _height = MediaQuery.of(context).size.height;
StreamProvider<List<User>>.value(
value: db.streamUsers(user),
child: UsersList(),
),
StreamBuilder<TestUser>(
stream: db.streamTestUser(user.uid),
builder: (context, snapshot) {
var user = snapshot.data;
if (user != null) {
return Stack(...
我也有我的 db.dart 文件:
class DatabaseService {
final Firestore _db = Firestore.instance;
Future<User> getUser(String id) async {
var snap = await _db.collection('users').document(id).get();
return User.fromMap(snap.data);
}
Stream<User> streamTestUser(String id) {
return _db
.collection('users')
.document(id)
.snapshots()
.map((snap) => User.fromMap(snap.data));
}
}
最后是我的 user_model.dart 文件:
class User {
final String name;
final String photourl;
final int totalquestions;
User({this.name, this.photourl, this.totalquestions});
factory User.fromMap(Map data) {
return User(
name: data['name'] ?? '',
photourl: data['photourl'] ?? '',
totalquestions: data['totalquestions'] ?? '',
);
}
}
【问题讨论】:
-
我在 DatabaseService 中找不到方法流用户(用户)
-
Adn 你没有 testuser 的模型,这就是为什么它说“testuser”不是类型。你的函数应该是 StreamBuilder
( stream: db.streamTestUser(user.uid), builder: (context, snapshot) { var user = snapshot.data; if (user != null) { return Stack(... -
@Mohamedhassankadri 谢谢,但这仍然给我错误:错误:参数类型'Stream
不能分配给参数类型'Stream (argument_type_not_assignable at [ flutter_appprofilescreenv1] lib/main.dart:91)
标签: flutter google-cloud-firestore flutter-provider