我正在应用程序的屏幕之间传递数据。我已经可以使用字符串成功完成此操作,但是在发送列表映射时,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操作将起作用,并且屏幕将打开。所以我想知道这是我如何初始化列表列表还是还有其他东西?
感谢您的帮助