0

我在应用程序的屏幕之间传递数据。我已经能够使用字符串成功地做到这一点,但是在发送列表映射时,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 操作将起作用并且屏幕打开。所以我想知道这是我初始化列表映射的方式还是还有其他什么?

谢谢你的帮助

4

0 回答 0