Не удается инициализировать JsonResponse в проекте Flutter

#json #api #flutter #asynchronous #dart

#json #API #flutter #асинхронный #dart

Вопрос:

В моем проекте я получаю свою строку json, которой позже я попытался присвоить переменную JsonResponse, но я получил ошибку типа: тип аргумента ‘Response’ не может быть присвоен типу параметра ‘String’.

Вот мой код:

 Future getMahalle() async {
    BaseOptions options = new BaseOptions(
      baseUrl: globals.PROD_URL,
      connectTimeout: 5000,
      receiveTimeout: 3000,
    );
    Dio dio = new Dio(options);
    dio.options.headers["Authorization"] = "Bearer ${globals.USER_TOKEN}";
    try {
      var response =
          await dio.get(globals.SELECT_URL); //'api/hizlirapor/selects'
      
      final jsonResponse = jsonDecode(response); //Here is the error line
      MahalleModel mahalleList =
          MahalleModel.fromJson(jsonDecode(response.data['mahalle']));

      return mahalleList;
    } on DioError catch (e) {
      debugPrint("ERRORR!!!!!!!!!!!!! ${e.error.toString()}");
      return null;
    }
  }
  

Я пытаюсь реализовать, например, эту статью и застрял. Спасибо за помощь!

Ответ №1:

Вам не нужно декодировать возвращаемый json, поскольку вы используете dio, dio делает это за вас.

 // if it's a single value than try this.
MahalleModel mahalleList = response.data.map<MahalleModel>((mahalle) => MahalleModel.fromJson(mahalle));

// if it's a list than try this.
List<MahalleModel> mahalleList = response.data['mahalle'].map<MahalleModel>((mahalle) => MahalleModel.fromJson(mahalle)).toList();
  

Комментарии:

1. Я попробовал ваше второе предложение. И теперь я получил инструкцию консоли отладки: «Необработанное исключение: NoSuchMethodError: класс ‘_InternalLinkedHashMap<String, dynamic>’ не имеет метода экземпляра ‘map’ с соответствующими аргументами». Кстати, спасибо за информацию о dio. Я новичок в dio.

2. какой у вас frommap?

3. пожалуйста, проверьте сейчас .. пропустил «[‘mahalle’]» после ответа.данные … пожалуйста, попробуйте сейчас…

4. это работает? я отредактировал свой ответ … если ваш способ работает, то все в порядке … еще попробуйте отредактировать…. Список<MahalleModel> mahalleList = response.data[‘mahalle’].map<MahalleModel>((mahalle) => MahalleModel.FromJSON(mahalle)). ToList();

5. о, я вижу вашу правку в вашем ответе. это работает отлично. спасибо за предоставленную вами информацию, она была ценной.