如何创建一个 StreamProvider 并稍后订阅它,Flutter
How to create a StreamProvider and subscribe to it later, Flutter
我有一个问题,我想创建一个 MultiProvider
与一些不同的提供者,问题是其中两个是 StreamProviders,需要首先有一个 firebase 身份验证登录,然后订阅一个根据用户登录的结果在 firebase 中流式传输。
因此,如果我无法在 MaterialApp
顶部登录之前启动 StreamProvider
。
如果我在登录完成后声明这些提供者,我会收到一个错误,指出提供者不在正确的路线上,因为我需要围绕我的所有应用程序的多条路线中的数据。
这是我的代码:
class Neybor extends StatelessWidget {
@override
Widget build(BuildContext context) {
final textTheme = GoogleFonts.nunito;
return MultiProvider(
providers: [
ChangeNotifierProvider<Data>(create: (context) => new Data()),
/// Settings Stream
StreamProvider<SettingsDataModel>.value(
value: Globals.firebaseCaller.settings(),
),
/// Plans Stream
StreamProvider<PlansDataModel>.value(
value: Globals.firebaseCaller.plans(),
),
],
child: MaterialApp(
...
}
对于Globals.firebaseCaller.settings()
和Globals.firebaseCaller.plans()
我使用注册用户uid
有没有办法在我的代码中声明 StreamProvider
并稍后订阅它?
提前致谢
在 StreamProvider
中使用 create
参数传递您的流并使用 Provider.of<T>(context)
订阅它
class Neybor extends StatelessWidget {
@override
Widget build(BuildContext context) {
final textTheme = GoogleFonts.nunito;
return MultiProvider(
providers: [
/// Settings Stream
/// Globals.firebaseCaller.settings() should returns a Stream<SettingsDataModel>
StreamProvider<SettingsDataModel>(create: (context) =>
Globals.firebaseCaller.settings(),
),
],
child: HomeView()
..
然后在 HomeView()
import 'package:provider/provider.dart';
class HomeView extends StatelessWidget {
@override
Widget build(BuildContext context) {
SettingsDataModel settings = Provider.of<SettingsDataModel>(context);
if (settings == null) {
return Align(child: new CircularProgressIndicator());
} else {
// your code
...
}
...
我有一个问题,我想创建一个 MultiProvider
与一些不同的提供者,问题是其中两个是 StreamProviders,需要首先有一个 firebase 身份验证登录,然后订阅一个根据用户登录的结果在 firebase 中流式传输。
因此,如果我无法在 MaterialApp
顶部登录之前启动 StreamProvider
。
如果我在登录完成后声明这些提供者,我会收到一个错误,指出提供者不在正确的路线上,因为我需要围绕我的所有应用程序的多条路线中的数据。
这是我的代码:
class Neybor extends StatelessWidget {
@override
Widget build(BuildContext context) {
final textTheme = GoogleFonts.nunito;
return MultiProvider(
providers: [
ChangeNotifierProvider<Data>(create: (context) => new Data()),
/// Settings Stream
StreamProvider<SettingsDataModel>.value(
value: Globals.firebaseCaller.settings(),
),
/// Plans Stream
StreamProvider<PlansDataModel>.value(
value: Globals.firebaseCaller.plans(),
),
],
child: MaterialApp(
...
}
对于Globals.firebaseCaller.settings()
和Globals.firebaseCaller.plans()
我使用注册用户uid
有没有办法在我的代码中声明 StreamProvider
并稍后订阅它?
提前致谢
在 StreamProvider
中使用 create
参数传递您的流并使用 Provider.of<T>(context)
class Neybor extends StatelessWidget {
@override
Widget build(BuildContext context) {
final textTheme = GoogleFonts.nunito;
return MultiProvider(
providers: [
/// Settings Stream
/// Globals.firebaseCaller.settings() should returns a Stream<SettingsDataModel>
StreamProvider<SettingsDataModel>(create: (context) =>
Globals.firebaseCaller.settings(),
),
],
child: HomeView()
..
然后在 HomeView()
import 'package:provider/provider.dart';
class HomeView extends StatelessWidget {
@override
Widget build(BuildContext context) {
SettingsDataModel settings = Provider.of<SettingsDataModel>(context);
if (settings == null) {
return Align(child: new CircularProgressIndicator());
} else {
// your code
...
}
...