У меня есть два потока:
Stream<FirebaseUser> FirebaseAuth.instance.onAuthStateChanged
Stream<User> userService.streamUser(String uid)
Мой userService требует uid аутентифицированного FirebaseUser в качестве параметра.
Поскольку мне, вероятно, потребуется доступ к потоку 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? Потому что, когда я пытаюсь, мне также нужно создать другой поток onAuthStateChanged для FirebaseUser, и я не знаю, как объединить их в один провайдер.