Тип аргумента «Список<Набор>» не может быть присвоен типу параметра » Список>»

#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(),
 

Это предпочтительный способ.