如何从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