#flutter #dart #urlencode
#трепетание #dart #urlencode
Вопрос:
Мне нужно отправить тело с типом содержимого: application / x-form-urlencoded
Основной запрос в json выглядит следующим образом
{"skip":0,"take":50,"pageSize":50,"page":0,"filter":{"logic":"and","filters":[{"operator":"startsWith","field":"nazione","value":"it"}]}}
Мне нужно преобразовать его в:
skip=0amp;take=50amp;page=1amp;pageSize=50amp;filter%5Blogic%5D=andamp;filter%5Bfilters%5D%5B0%5D%5Boperator%5D=startsWithamp;filter%5Bfilters%5D%5B0%5D%5Bfield%5D=nazioneamp;filter%5Bfilters%5D%5B0%5D%5Bvalue%5D=it
В jQuery я могу получить этот результат, просто передав json в $.param, существует ли что-нибудь подобное в dart?
Я использую http (из ‘package: http / http.dart’), и я не знаю, как преобразовать тело для использования в http.post:
http.post(url, headers: Map<String, String>.from({'application/x-www-form-urlencoded; charset=UTF-8'}), body: ???)
тело построено таким образом:
var filters = [
Map<String, String>.from({
'operator': 'startsWith',
'field': 'nazione',
'value': 'it'
})
];
var filter = Map<String, dynamic>.from({
'logic': 'and',
'filters': filters
});
var body = Map<String, dynamic>.from({
'skip': 0,
'take': 50,
'pageSize': 50,
'page': 1,
'filter': filter
});
Попытка
Uri(
scheme: 'https',
host: 'myhost',
port: 8443,
queryParameters: body,
pathSegments: ["api", "coutries", "grid"]);
Я получаю сообщение об ошибке
type 'int' is not a subtype of type 'Iterable<dynamic>'
Потому что я должен преобразовать тело как:
Map<String, String>.from({
'take': 50.toString(),
'skip': 0.toString(),
'pageSize': 50.toString(),
'page': 1.toString(),
'filter[logic]': 'and',
'filter[filters][0][operator]': 'startsWith',
'filter[filters][0][field]': 'nazione',
'filter[filters][0][value]': 'it'
})
В этом случае параметр запроса в Uri работает. Я новичок в Dart, поэтому, прежде чем пытаться решить эту проблему с нуля, я хотел бы знать, существует ли какой-нибудь простой и правильный способ сделать это.
Ответ №1:
Используйте параметры запроса класса Uri:
Uri(scheme: 'http', host: 'example.com', queryParameters: {...})
Комментарии:
1. пожалуйста, взгляните на обновленный вопрос. «Проблема» заключается в преобразовании тела