Mig*_*vez 4 dart flutter flutter-provider
我有一个问题,我想MultiProvider
用一些不同的提供程序创建一个,问题是其中两个是 StreamProvider,首先需要进行 Firebase 身份验证登录,然后根据用户的结果订阅 Firebase 中的 Stream登录。
因此,如果我无法StreamProvider
在我的MaterialApp
.
如果我在登录完成后声明这些提供程序,我会收到一条错误消息,指出提供程序不在正确的路线上,因为我需要所有应用程序周围多个路线中的数据。
这是我的代码:
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(
...
}
Run Code Online (Sandbox Code Playgroud)
对于Globals.firebaseCaller.settings()
并且Globals.firebaseCaller.plans()
我使用注册用户uid
有没有办法声明 aStreamProvider
并稍后在我的代码中订阅它?
提前致谢
小智 10
create
使用 中的参数来StreamProvider
传递您的流并使用以下方式订阅它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()
..
Run Code Online (Sandbox Code Playgroud)
然后在 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
...
}
...
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11285 次 |
最近记录: |