Ошибка Не удалось вывести параметр типа ‘T’. при использовании Map.fromIterable

#flutter #dart

#flutter #dart

Вопрос:

Я пытаюсь преобразовать a List в a Map<int, Widget> для дочерних элементов a CupertinoSlidingSegmentedControl . Я пытался использовать Map.fromIterable , но получаю сообщение об ошибке…

Вот мой код:

 final List<String> tabValues = ['first', 'second', 'third'];

CupertinoSlidingSegmentedControl(
          groupValue: selectedTab,
          onValueChanged: _onTabChange,
          children: Map.fromIterable(
            tabValues,
            value: (element) => _tabContent(element),
          ),
        )

Widget _tabContent(String text) {
  return Text(text);
}
  

Получение ошибки:

Не удалось определить параметр типа ‘T’.

Комментарии:

1. Вам не хватает key сопоставления

2. @smac89 Не могли бы вы показать мне образец, пожалуйста?

3. По-вашему Map<int, Widget> , int предполагается, что это индекс виджета?

4. @smac89 да. таким образом, результат должен быть {0: Text('first), 1: Text('second'), 2: Text('third)}

Ответ №1:

Map.fromIterable Функция ожидает как key , так и value функции отображения.

Вам нужно либо указать оба из них, либо нет, что, если вы выберете более поздний вариант, означает, что вы получите a Map<T, T> , где функции ключа и значения заменяются функцией идентификации.


В вашем случае я бы сделал что-то вроде этого:

 children: tabValues.asMap().map((index, tabValue) => MapEntry(index, _tabContent(tabValue)))
  

key Который должен быть индексом виджета, создается, когда мы это сделали tabValues.asMap() , поэтому теперь все, что нам нужно, это вызвать .map , чтобы преобразовать tabValue его в виджет.