Как сделать потоковый компоновщик для получения данных из blo c во флаттере - PullRequest
0 голосов
/ 03 мая 2020

Я новичок в BLO C, и я пытаюсь прочитать ответ от 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;
                                              });
                                            },
                                          ),

есть ли способ, чтобы я мог вызвать print(snapshot.data) внутри if (snapshot.hasData)

1 Ответ

1 голос
/ 03 мая 2020

Вам нужно передать аргумент, который требуется в методе, иначе он не будет успешно отвечать (200) и выдаст ошибку.

...