#flutter #dart
Вопрос:
В более старой версии flutter sdk приведенный ниже пример работает, но теперь у меня ошибка, тип аргумента ‘Object?’ не может быть присвоен типу параметра ‘List’
FutureBuilder(
future: fetchEmp(),
builder: (context, snapshot) {
return snapshot.hasData
? RecommandEmp(emps: snapshot.data) ---Here is problem!!!
: Center(child: Image.asset('assets/images/no.png'));
},
),
class RecommandEmp extends StatefulWidget {
const RecommandEmp({Key? key, required this.emps}) : super(key: key);
final List<Emp> emps;
@override
_RecommandEmpState createState() => _RecommandEmpState();
}
fetchEmp
Future<List<Emp>> fetchEmp() async {
final response = await http.get(Uri.https(myUrl, 'select/emp'));
if (response.statusCode == 200) {
List<Emp> emp = (json.decode(utf8.decode(response.bodyBytes))["items"] as List)
.map((data) => Emp.fromJson(data))
.toList();
return emp;
} else {
throw Exception('Error!');
}
}
модель —> https://ibb.co/zr7H8v2
Комментарии:
1. Можете ли вы отладить
emp
значение вfetchEmp()
? Возможно, при получении данных возникает проблема. Потому что, еслиemp
это список, эта ошибка не должна отображаться2. @MiguelEscobarCalderon При использовании print(emp[2].ename); в fetchEmp получить значение ename .
Ответ №1:
snapshot.data
по умолчанию всегда будет тип Object
, если вы не укажете тип, что можно сделать двумя различными способами
Сначала, как показано ниже
FutureBuilder<List<Emp>>(
future: fetchEmp(),
builder: (context, snapshot) {
return snapshot.hasData
? RecommandEmp(emps: snapshot!.data)
: Center(child: Image.asset('assets/images/no.png'));
},
),
или второй (для маловероятного случая, когда вы не уверены в своем типе, т.Е. возвращает dynamic) :
FutureBuilder(
future: fetchEmp(),
builder: (context, snapshot) {
return snapshot.hasData amp;amp; snapshot is List<Emp>
? RecommandEmp(emps: snapshot.data as List<Emp>)
: Center(child: Image.asset('assets/images/no.png'));
},
),
Ответ №2:
Метод groupedTransactionValues
возвращает карту объекта. Вместо этого возвращайте сопоставление dynamic
, тип которого определяется во время выполнения. Измените строку:
List<Map<String, Object>> get groupedTransactionValues {
Для:
List<Map<String, dynamic>> get groupedTransactionValues {