#flutter #dart
Вопрос:
Флаттер показывает мне следующее сообщение об ошибке, хотя я преобразовал map
в List
The argument type 'List<Set<Card>>' can't be assigned to the parameter type 'List<Widget>'.dartargument_type_not_assignable
Не могли бы вы, пожалуйста, сказать мне, что случилось?
class MyHomePage extends StatelessWidget {
MyHomePage({Key? key, required String title}) : super(key: key);
final List<Transaction> transactions = [
Transaction(
id: 'sh1',
date: DateTime.now(),
title: 'School',
value: 1554.5
),
Transaction(
id: 'sc5',
date: DateTime.now(),
title: 'Sucar',
value: 16.5
),
];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("title"),
),
body: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
const Card(
color: Color.fromRGBO(200, 165, 245, 1.0),
child: Text('[CHART]'),
),
Column(
children:
/////// ERROR
transactions.map( (e) => { return Card(child: Text(e.title),); } ).toList(),
),
],
),
);
}
}
Ответ №1:
Этот:
transactions.map( (e) => { return Card(child: Text(e.title),); } ).toList(),
вероятно, должно быть
transactions.map((e) => Card(child: Text(e.title))).toList(),
или, если вы предпочитаете длинную форму:
transactions.map((e) { return Card(child: Text(e.title),); } ).toList(),
Но вы не можете смешивать их, иначе компилятор интерпретирует лишнее {} как намерение вернуть один Set<>
из ваших элементов вместо одного.
Комментарии:
1. Большое спасибо @nvoigt . Я потратил несколько часов, пытаясь это исправить
Ответ №2:
Не используйте =>
и return
не соединяйте. =>
является сокращением для возврата, и для определения границы метода не нужны фигурные скобки {}.
transactions.map((e) => Card(child: Text(e.title))).toList(),
Это предпочтительный способ.