gpt4 book ai didi

flutter - Flutter如何创建StreamProvider并稍后订阅

转载 作者:行者123 更新时间:2023-12-03 03:31:56 24 4
gpt4 key购买 nike

我有一个问题,我想创建一个 MultiProvider对于一些不同的提供者,问题在于其中两个是 StreamProviders,它们首先需要 Firebase 身份验证登录,然后根据用户登录的结果订阅 firebase 中的 Stream。
所以如果我不能启动 StreamProvider登录前在我的顶部MaterialApp .
如果我在登录完成后声明这些提供者,我会收到一个错误,指出提供者不在正确的路线上,因为我需要所有应用程序周围的多个 route 的数据。
这是我的代码:

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然后在我的代码上订阅它?
提前致谢

最佳答案

使用 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()
..
然后在 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
...
}
...

关于flutter - Flutter如何创建StreamProvider并稍后订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63404845/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com