如何在提供程序中使用flart dart中的流

问题描述 投票:0回答:1

最初它在工作,但是只是停止了,所以我不能弄清楚问题出在哪里。

我正在使用提供程序包中的flutter项目处理流。从服务文件中发出流,并且在小部件文件上进行监听。 Firebase onAuthStateChanged流正在运行,但我的却无法运行。

我的文件中有很多代码,所以不打算在这里发布所有内容。

我对AuthStatus流有问题我尝试在小部件类上订阅流,但似乎没有流被发出]

  MyApp(){
    auth.authStateStream.listen((d){print("$d is data");});
  }

这是如何从服务文件中使用Firebase流的方法

  Stream<UserModel> get onAuthStateChanged{
      return _firebaseAuth.onAuthStateChanged.map(_userFromFirebase);
  }

我对AuthStatus流有问题。最初是在工作这就是从服务文件中发射AuthStatus流的方式

  //Services file
  final StreamController<AuthStatus> _currentAuthStateController =
      StreamController<AuthStatus>.broadcast();

  Stream<AuthStatus> get authStateStream{
    return _currentAuthStateController.stream;
  }


  void testStremas() {
    //Stoast.setMessage("Test Message");
    _currentAuthStateController.add(AuthStatus.ACTIVE);
  }

这是提供者如何作为MaterialAPP小部件的父项来简化流的方法>>

class MyApp extends StatelessWidget {
  //I was trying if i my widget could subscribe to the stream
  MyApp (){
    auth.authStateStream.listen((d){print("$d is data");});
  }
  final ToastHelper toast = ToastHelper();

  final ThemeHelper theme = ThemeHelper();

  final AuthService auth = AuthService();

  @override
  Widget build(BuildContext context) {
    return MultiProvider(
      providers: [
        StreamProvider<UserModel>.value(value: auth.onAuthStateChanged),
        StreamProvider<ToastMessage>.value(value: toast.onNewMessage),
        StreamProvider<AuthStatus>.value(
            value: auth.authStateStream, initialData: AuthStatus.NONE),
      ],
      child: MaterialApp(
        title: Strings.appName,
        theme: theme.darkThemeData(),
        home: Loader(),
        routes: {
          'home': (context) => Home(),
        },
        debugShowCheckedModeBanner: false,
      ),
    );
  }
}

这是通过单击按钮在小部件上调用上述方法的方式

 //Widgets file 
  onTap: () => auth.testStremas(),

预期结果应该是AuthStatus从服务文件更改时,应通过提供程序包通知窗口小部件。在此先感谢

Widget _body(BuildContext context) {
    final AuthStatus _authStatus = Provider.of<AuthStatus>(context);
    return Center(
      child: Container(
        constraints: BoxConstraints(maxWidth: 300),
        child: SingleChildScrollView(
            child: Center(
              child: _authStatus == AuthStatus.ACTIVE
                  ? Padding(
                    padding: const EdgeInsets.all(8.0),
                    child:CircularProgressIndicator(strokeWidth: 2,)
                  )
                  : _buildScreen(context),
            )),
      ),
    );
  }

这最初是在工作,但只是停止了,我无法弄清楚问题出在哪里。我正在提供程序包中的flutter项目上使用流。流从...

firebase flutter dart google-cloud-firestore stream
1个回答
0
投票

我不确定-尝试更改

© www.soinside.com 2019 - 2024. All rights reserved.