我有两个流:
Stream<FirebaseUser> FirebaseAuth.instance.onAuthStateChanged
Stream<User> userService.streamUser(String uid)
我的 userService 需要经过身份验证的 FirebaseUser 的 uid 作为参数。
由于我可能需要在我的应用程序的多个部分访问 streamUser() 流,我希望它成为我项目根目录的提供者。
这就是我的 main.dart 的样子:
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
Widget build(BuildContext context) {
var auth = FirebaseAuth.instance;
var userService = new UserService();
return MultiProvider(
providers: [
Provider<UserService>.value(
value: userService,
),
],
child: MaterialApp(
home: StreamBuilder<FirebaseUser>(
stream: auth.onAuthStateChanged,
builder: (context, snapshot) {
if (!snapshot.hasData) return LoginPage();
return StreamProvider<User>.value(
value: userService.streamUser(snapshot.data.uid),
child: HomePage(),
);
}),
),
);
}
}
问题是当我导航到不同的页面时,MaterialApp 下面的所有内容都被更改了,并且我失去了 StreamProvider 的上下文。
有没有办法将 StreamProvider 添加到 MultiProvider 提供者列表中?因为当我尝试时,我还必须为 FirebaseUser 创建另一个 onAuthStateChanged 流,而且我不知道如何将它们组合成一个 Provider。