这最初是可行的,只是停止了,我无法弄清楚问题出在哪里。
我正在使用提供程序包中的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),
)),
),
);
}
答案 0 :(得分:0)
我不确定-尝试更改
B[k,l]
到
np.complex()
rxdart库https://pub.dev/packages/rxdart中的这个BehaviorSubject,因此,您应该导入它。 BehaviorSubject是保持流的最后状态。您可以在这里https://pub.dev/documentation/rxdart/latest/rx/BehaviorSubject-class.html
了解更多信息final StreamController<AuthStatus> _currentAuthStateController =
StreamController<AuthStatus>.broadcast();