【发布时间】:2021-02-26 19:29:33
【问题描述】:
我正在使用 StreamProvider 方法用某些数据包装我的小部件,例如来自 Firebase Auth 的 Auth(在我的应用程序中的任何地方都可以使用)。我想对 Firestore 值做同样的事情,但它似乎只工作一层。
我有一个数据库调用,一旦完成身份验证检查,就会找到员工档案。当我尝试使用 Provider.of(context) 从我的 Home() 小部件中获取员工时,效果很好:
这是我的包装小部件(这是我的主文件的主页:小部件)
class Wrapper extends StatelessWidget {
@override
Widget build(BuildContext context) {
final user = Provider.of<User>(context);
print(user.uid);
// Return either home or authenticate widget
if (user == null) {
return Authenticate();
}
else {
return StreamProvider<Employee>.value(
value: DatabaseService().linkedEmployee(user.uid),
child: Home(),
);
}
}
}
DatabaseService() 中的数据库服务函数:
// Get Linked Employee
Stream<Employee> linkedEmployee(String uid) {
return employeesCollection.where("linkedUser", isEqualTo: uid).snapshots().map(_linkedEmployeeFromSnapShot);
}
Employee _linkedEmployeeFromSnapShot(QuerySnapshot snapshot) {
final doc = snapshot.documents[0];
return Employee(
eId: doc.data["eId"],
employeeCode: doc.data["employeeCode"],
fName: doc.data["fName"],
lName: doc.data["lName"],
docId: doc.documentID
);
}
我可以从树中任何位置的任何小部件访问Provider.of<User>(context)。那么为什么我不能为Provider.of<Employee>(context) 做同样的事情呢?
当我在 Home() 以外的任何小部件中尝试时,我得到了错误:
错误:在此车辆小部件上方找不到正确的提供程序
例如,在我的小部件车辆中:
class Vehicles extends StatelessWidget {
@override
Widget build(BuildContext context) {
final user = Provider.of<User>(context);
final employee = Provider.of<Employee>(context);
...
用户提供者工作正常,我可以打印出来,但员工提供者不工作。
这与上下文有关吗?谢谢,任何建议将不胜感激。
我如何使用带有此事件的凸起按钮从 Home() 导航到 Vehicles() 小部件:
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => Vehicles())
);
},
【问题讨论】:
标签: flutter google-cloud-firestore flutter-provider