我在应用程序的屏幕之间传递数据。我已经能够使用字符串成功地做到这一点,但是在发送列表映射时,Navigator.pushNamed 什么都不做,也不会抛出任何错误。
我的命名路由设置如下,在 onGenerateRoute 中,我进行设置并将参数传递给 HomePageResultsScreen 和 ItemPageProfileScreen:
主要飞镖:
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 操作将起作用并且屏幕打开。所以我想知道这是我初始化列表映射的方式还是还有其他什么?
谢谢你的帮助