#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
его в виджет.