gpt4 book ai didi

flutter - 如何使用Flutter访问多页API?

转载 作者:行者123 更新时间:2023-12-03 03:38:55 25 4
gpt4 key购买 nike

我正在做一个项目,我需要从API获取信息。问题在于该API分别具有25个页面,而且我不知道如何一次访问所有页面。

我有一个包含Map _queryParameters的类,但是当我运行该应用程序时,它仅获取映射中的最后一页,在这种情况下为第四页。

如何获得所有页面?

class Api {

final String _baseUrl = 'rickandmortyapi.com';
final String _charactersPath = '/api/character/';
final Map<String, String> _queryParameters = <String, String>{
'page': '2',
'page': '3',
'page': '4'
};

final String _charactersJsonKey = 'results';

final HttpClient _httpClient = HttpClient();

Future<List<Character>> getCharacters() async {
final uri = Uri.https(_baseUrl, _charactersPath, _queryParameters);
final response = await _getJson(uri);

if (response == null || response[_charactersJsonKey] == null) {
print('Api.getCharacters(): Error while retrieving characters');
return null;
}

return _convert(response[_charactersJsonKey]);
}

Future<Map<String, dynamic>> _getJson(Uri uri) async {
try {
final request = await _httpClient.getUrl(uri);
final response = await request.close();

if (response.statusCode != HttpStatus.OK) {
print('Api._getJson($uri) status code is ${response.statusCode}');
return null;
}

final responseBody = await response.transform(utf8.decoder).join();
return json.decode(responseBody);
} on Exception catch (e) {
print('Api._getJson($uri) exception thrown: $e');
return null;
}
}

List<Character> _convert(List charactersJson) {
List<Character> characters = <Character>[];

charactersJson.forEach((character) {
characters.add(Character.fromJson(character));
});

return characters;
}
}

非常感谢你!

最佳答案

您不能为映射中的单个键指定多个值(也不能为单个查询参数指定多个值)。

您应该通过添加getCharacters值的参数来使自己的page自适应:

Future<List<Character>> getCharacters(int page) async {
final uri = Uri.https(_baseUrl, _charactersPath, <String, String>{
'page': '$page',
});
...

现在,您可以像这样简单地多次调用 getCharacters方法:

Future<List<Character>> getAllCharacters() async {
final List<Character> result = [];
for (int i = 0; i < 25; i++) {
result.addAll(await getCharacters(i));
}
return result;
}

关于flutter - 如何使用Flutter访问多页API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58681355/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com