Как работать со списком моделей в флаттере blo c - PullRequest
0 голосов
/ 03 мая 2020

Я пытаюсь использовать BLO C на своей странице входа в систему ... но я всегда останавливаюсь на исключение, которое говорит Exception has occurred. _TypeError (type 'List<LoginRespon>' is not a subtype of type 'String'), здесь код

isClick == true
                                        ? StreamBuilder(
                                            initialData: bloc.inData(_name.text,_password.text),
                                            stream: bloc.loginData,
                                            builder: (context,
                                                AsyncSnapshot snapshot) {
                                              if (snapshot.hasData) {
                                                  print(snapshot.data);
                                                  print('ppp ');

                                                  return Text('ok');
                                                } else
                                                  return Text(snapshot.error
                                                      .toString());
                                            })
                                        : RaisedButton(
                                            child: Text('Login'),
                                            onPressed: () {
                                              setState(() {
                                                isClick = true;
                                              });
                                            },
                                          ),

, а здесь blo c файл

class MyBLoc{

  final _repository = Repository();
  final _loginController = StreamController<String>();
  Stream<String> get loginData => _loginController.stream;

final _name = BehaviorSubject<String>();
  final _password = BehaviorSubject<String>();
  saving(){
    _repository.saving(_name.value,_password.value);
  }


  inData(String name, String password) async {
// I get paused on exception inside this method...
    String result = await _repository.saving(name, password);
    _loginController.sink.add(result);
  }


  dispose(){
    _input.close();
    _loginController.close();
    _password.close();
  }
}
final bloc = MyBLoc();

вот мой файл репозитория

class Repository{
  static final userAPIProvider = UserProvider();
  Future saving(String name, String password) => userAPIProvider.saving(name, password);
}

, а вот мой провайдер

class UserProvider {
  final _url = '...';
  Future<List<LoginRespon>> saving(String name, String password) async {
    List<LoginRespon> datalogin = [];
    try {
      bool trustSelfSigned = true;
      HttpClient httpClient = new HttpClient()
        ..badCertificateCallback =
            ((X509Certificate cert, String host, int port) => trustSelfSigned);
      IOClient client = new IOClient(httpClient);
      print("cek");
      final response = await client.post(_url,
          headers: {
            HttpHeaders.contentTypeHeader: 'application/json',
          },
          body: json.encode({
            "name": name,
            "pas": password,
          }));
      Map<String, dynamic> responseJson = json.decode(response.body);

      if (responseJson["status"] == "200") {
        datalogin.add(LoginRespon(
            status: responseJson['status'],
            data: Data(
                name: responseJson['data']['name'],
                status: responseJson['data']['status'])));
        return datalogin;
      } else {
        print("ppp");
      }
    } on Exception {
      rethrow;
    }
    return datalogin;
  }}

, а для моей модели LoginRespon доступна здесь как создать список из json строки во флаттере Приостановка на исключение происходит внутри файла blo c в inData метод есть способ решить эту проблему Exception has occurred. _TypeError (type 'List<LoginRespon>' is not a subtype of type 'String')

1 Ответ

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

В MyBlo c возвращаемое значение должно быть String

 String result = await _repository.saving(name, password); 

Но это не относится к следующей строке в хранилище

Future saving(String name, String password) => userAPIProvider.saving(name, password);

Возвращается List<LoginRespon>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...