【问题标题】:How to do stream builder to get data from bloc in flutter如何做流构建器以在颤动中从 bloc 获取数据
【发布时间】:2020-08-17 12:37:23
【问题描述】:

我是 BLOC 的新手,我正在尝试从 api 读取响应。但每当我调用流生成器时...我的小部件总是停在wait...这是我的代码 这是 api 提供程序文件

class Provider {
  final _url = '...';

  Future<List<LoginRespon>> login(a, b) async {
    List<LoginRespon> datalogin = [];
    try {
        bool trustSelfSigned = true;
        HttpClient httpClient = new HttpClient()
          ..badCertificateCallback =
              ((X509Certificate cert, String host, int port) =>
                  trustSelfSigned);
        IOClient http = new IOClient(httpClient);
        final response = await http.post(_url,
            headers: {
              HttpHeaders.contentTypeHeader: 'application/json',
            },
            body: json.encode({
              "aa": a,
              "bb": b,
            }));
        Map<String, dynamic> responseJson = json.decode(response.body);

        if (responseJson["status"] == "200") {

          datalogin.add(LoginRespon(
              status: responseJson['status'],
              data: Data(
                  name: responseJson['data']['name'],
                  position: responseJson['data']['pos'])));
          return datalogin;
        } else {
          print("ppp");
        }

    } on Exception {
      rethrow;
    }
    return datalogin;
  }
}

这是用于流构建器的

                                      isClick
                                        ? StreamBuilder(
                                            stream: bloc.login(),
                                            builder: (context, snapshot) {
                                              if (snapshot.hasData) {
                                                print(snapshot.data);
                                                return Text("success");
                                              } else if (snapshot.hasError) {
                                                return Text(
                                                    snapshot.error.toString());
                                              }
                                              return Text("wait..");
                                            },
                                          )
                                        : FlatButton(
                                            child: Text("Login"),
                                            onPressed: () {
                                              setState(() {
                                                isClick = true;
                                              });
                                            },
                                          ),

有没有办法让我可以在if (snapshot.hasData) 中调用print(snapshot.data)

【问题讨论】:

  • 您没有在登录方法中传递 a 和 b 的值。可能是因为它总是抛出错误而你没有得到响应。
  • 你是对的,我忘了这样做......非常感谢你的纠正:D

标签: flutter stream bloc


【解决方案1】:

您需要传递方法中需要的参数,否则它将无法成功响应(200)并且会抛出错误。

【讨论】:

    猜你喜欢
    • 2021-09-07
    • 2020-02-07
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-12
    • 1970-01-01
    相关资源
    最近更新 更多