【发布时间】:2019-12-12 03:24:58
【问题描述】:
这最初是有效的,但它刚刚停止,我无法弄清楚问题出在哪里。
我正在提供程序包中的颤振项目中使用流。流是从服务文件发出的,并且正在小部件文件上进行侦听。 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),
)),
),
);
}
【问题讨论】:
标签: firebase flutter dart google-cloud-firestore stream