Próbuję przekonwertować List do Map<int, Widget> dla dzieci CupertinoSlidingSegmentedControl. Próbowałem użyć Map.fromIterable, ale otrzymuję błąd ...

Oto mój kod:

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);
}

Pojawia się błąd:

Nie mógł wnioskować o parametrze "T".

0
Jessica 19 październik 2020, 00:57

1 odpowiedź

Najlepsza odpowiedź

Map.fromIterable Funkcja oczekuje, że funkcje mapowania key i {X2}}.

Musisz podać oba te lub żadne, co jeśli wybierzesz później, oznacza, że otrzymasz Map<T, T>, gdzie funkcje kluczy i wartości zostaną zastąpione funkcją tożsamości.


W twoim przypadku zrobiłbym coś takiego:

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

key, który powinien być indeks widżetu, który jest tworzony, gdy zrobiliśmy tabValues.asMap(), więc teraz wszystko, czego potrzebujemy, to zadzwonić .map, aby przekonwertować tabValue do widżetu.

0
smac89 18 październik 2020, 22:49