如何从flutter中的其他页面的bloc流中获取数据
How to get data from bloc stream from other page in flutter
我有这样的问题:
在 Splash Page 中,我检查 sharedpreference 以在成功登录时获取保存的令牌。如果我有令牌,我请求 Api 获取帐户信息并移至下一页,如下所示:
Future check() async {
String _getToken = await splashBloc.getTokenFormSharedPref();
if (_getToken=='0') {
Navigator.of(context).pushReplacement(
MaterialPageRoute(builder: (context) => LoginMain()));
} else {
splashBloc.getAccountInfo();
Navigator.of(context).pushReplacement(
MaterialPageRoute(builder: (context) => HomeScreenMain()));
}
}
这是 BLoC class:
class SplashBloc extends BlocBase{
String _getToken = '';
Future<String> getTokenFormSharedPref() async{
SharedPreferences prefs = await SharedPreferences.getInstance();
_getToken = (prefs.getString('token') ?? '0');
return _getToken;
}
final accountInfoController = new StreamController<Account>();
Sink<Account> get accountInfoSink => accountInfoController.sink;
Stream<Account> get accountInfoStream => accountInfoController.stream;
Future getAccountInfo() async{
Account account = await NetworkService().getAccountInfo2(_getToken);
accountInfoSink.add(account);
print('from splash: '+account.fullName);
}
@override
void dispose() {
accountInfoController.close();
}
}
当我检查日志时,它完全请求成功,问题是我如何在 HomeScreenMain() 的下一页中访问 streambuilder 中的数据?
感谢帮助!!
您可以在 HomeScreenMain() 中声明一个变量,并将您之前收到的数据发送到 class 构造函数,如下所示:
HomeScreenMain() {
final data;
HomeScreenMain(this.data)
//....
}
当你想调用这个小部件时,你可以将该数据从块传递到这个小部件
您似乎对 BLoC 使用了一种非常基本的方法。不确定我的回答是否有帮助。
但是如果你使用库flutter_bloc,那么你可以在下一页使用
ˋfinal bloc = context.read;
这会在 Widget 树的上游查找此 bloc 类型的提供者并将其分配给 ˋbloc
我有这样的问题: 在 Splash Page 中,我检查 sharedpreference 以在成功登录时获取保存的令牌。如果我有令牌,我请求 Api 获取帐户信息并移至下一页,如下所示:
Future check() async {
String _getToken = await splashBloc.getTokenFormSharedPref();
if (_getToken=='0') {
Navigator.of(context).pushReplacement(
MaterialPageRoute(builder: (context) => LoginMain()));
} else {
splashBloc.getAccountInfo();
Navigator.of(context).pushReplacement(
MaterialPageRoute(builder: (context) => HomeScreenMain()));
}
}
这是 BLoC class:
class SplashBloc extends BlocBase{
String _getToken = '';
Future<String> getTokenFormSharedPref() async{
SharedPreferences prefs = await SharedPreferences.getInstance();
_getToken = (prefs.getString('token') ?? '0');
return _getToken;
}
final accountInfoController = new StreamController<Account>();
Sink<Account> get accountInfoSink => accountInfoController.sink;
Stream<Account> get accountInfoStream => accountInfoController.stream;
Future getAccountInfo() async{
Account account = await NetworkService().getAccountInfo2(_getToken);
accountInfoSink.add(account);
print('from splash: '+account.fullName);
}
@override
void dispose() {
accountInfoController.close();
}
}
当我检查日志时,它完全请求成功,问题是我如何在 HomeScreenMain() 的下一页中访问 streambuilder 中的数据? 感谢帮助!!
您可以在 HomeScreenMain() 中声明一个变量,并将您之前收到的数据发送到 class 构造函数,如下所示:
HomeScreenMain() {
final data;
HomeScreenMain(this.data)
//....
}
当你想调用这个小部件时,你可以将该数据从块传递到这个小部件
您似乎对 BLoC 使用了一种非常基本的方法。不确定我的回答是否有帮助。
但是如果你使用库flutter_bloc,那么你可以在下一页使用 ˋfinal bloc = context.read;
这会在 Widget 树的上游查找此 bloc 类型的提供者并将其分配给 ˋbloc