Почему приходит пустой массив в print(test) dart?
import 'dart:convert';
import 'package:dio/dio.dart';
void main() async {
var test = [];
test = await start();
print(test);
}
start() {
List<int> ids = [1, 2, 3];
List answer = [];
ids.forEach((id) {
var url = 'https://jsonplaceholder.typicode.com/todos/$id';
var answer = query(url);
});
return answer;
}
query(url) async {
List ans = [];
var dio = Dio();
final response = await dio.get(url);
print(response.statusCode);
Map data = response.data;
data.entries.forEach((element) {
ans.add(element.key);
ans.add(element.value);
});
return ans;
}
Ответы (1 шт):
Автор решения: Михаил Ребров
→ Ссылка
Все просто
start() {
List<int> ids = [1, 2, 3];
// Вы объявляете пустой список
List answer = [];
// ...
// Вы возвращаете пустой список
return answer;
}
а здесь вы с этим списком не взаимодействуете
ids.forEach((id) {
var url = 'https://jsonplaceholder.typicode.com/todos/$id';
// здесь вы создаёте ЛОКАЛЬНУЮ ПЕРЕМЕННУЮ
// которая никак не связана со списком уровнем выше
var answer = query(url);
});
Чтобы все работало вам нужно
- убрать объявление новой локальной переменной
var answerв цикле - и не перезаписывать значение переменной
answer
как это происходило бы при
answer = query(url)
а добавлять в нее новые элементы с помощью методаadd()
Как-то так:
start() {
List<int> ids = [1, 2, 3];
List answer = [];
ids.forEach((id) {
var url = 'https://jsonplaceholder.typicode.com/todos/$id';
answer.add(query(url));
});
return answer;
}