Карта флаттера не передается между экранами при навигации по названному маршруту
Я передаю данные между экранами приложения. Я смог сделать это успешно со строками, но когда дело доходит до отправки карты списка, Navigator.pushNamed ничего не делает и не выдает никакой ошибки.
Мои именованные маршруты настроены, как показано ниже, в onGenerateRoute я беру настройки и передаю аргументы в HomePageResultsScreen и ItemPageProfileScreen:
Main.dart:
void main() => runApp(myApp());
class myApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primaryColor: Colors.white,
),
initialRoute: HomePageScreen.id,
onGenerateRoute: (RouteSettings settings) {
var routes = <String, WidgetBuilder>{
HomePageScreen.id: (context) => HomePageScreen(),
AddItemScreen.id: (context) => AddItemScreen(),
AdvertiseScreen.id: (context) => AdvertiseScreen(),
HomePageFilterScreen.id: (context) => HomePageFilterScreen(),
HomePageResultsScreen.id: (context) => HomePageResultsScreen(settings.arguments),
ItemPageProfileScreen.id: (context) => ItemPageProfileScreen(settings.arguments),
ItemPageProfileSuggestUpdateScreen.id: (context) => ItemPageProfileSuggestUpdateScreen(),
ItemPageWhereToBuyAddStoreToDatabaseScreen.id: (context) => ItemPageWhereToBuyAddStoreToDatabaseScreen(),
ItemPageWhereToBuyMapScreen.id: (context) => ItemPageWhereToBuyMapScreen(),
ItemPageWhereToBuyScreen.id: (context) => ItemPageWhereToBuyScreen(),
MenuScreen.id: (context) => MenuScreen(),
NotAvailableScreen.id: (context) => NotAvailableScreen(),
TermsScreen.id: (context) => TermsScreen(),
};
WidgetBuilder builder = routes[settings.name];
return MaterialPageRoute(builder: (ctx) => builder(ctx));
};
При открытии экрана я просто отправляю строку, которая отлично работает следующим образом:
Нажав на дартс файл:
onTap: () {Navigator.pushNamed(context, ItemPageProfileScreen.id, arguments: 'myStringData');
},
и получить это так:
Получение файла дротика:
class ItemPageProfileScreen extends StatefulWidget {
final String argument;
ItemPageProfileScreen(this.argument);
Это все отлично работает. Но проблема возникает, когда я пытаюсь отправить ListMap через.
Поэтому я изменил свой навигатор, чтобы выдвинуть карту так:
Нажав на дартс файл:
onTap: () {
List<Map<String, String>> categoriesMap;
categoriesMap.add({
"category": '',
"subCategory1": snapshot.data.documents[index].documentID,
"subCategory2": '',
"subCategory3": ''});
Navigator.pushNamed(context, HomePageResultsScreen.id, arguments: categoriesMap);
},
И затем я изменил принимающий файл, чтобы получить список следующим образом:
Получение файла дротика:
class HomePageResultsScreen extends StatefulWidget {
List<Map<String, String>> arguments;
HomePageResultsScreen(this.arguments);
Но когда я пытаюсь отправить список таким образом, новый экран не открывается, и ошибка не отображается. Что действительно странно, если я закомментирую ту часть, где я добавляю категории, и просто оставлю это как пустую карту списка, действие pushNamed работает, и откроется экран. Так что мне интересно, так ли это, как я инициализирую карту списка или есть что-то еще?
Спасибо за вашу помощь