如何在Flutter中查看调用路由名称?

How to check the calling route name in Flutter?

我正在设计一个应用程序,其中从两个不同的页面 B 和 C 调用同一个页面 A。页面 B 传递一个对象,页面 C 传递一个列表给 A。我想检查是否调用了 A来自 B 或 C,还管理从屏幕 B 和 C 传递的不同类型的参数?太混乱了我卡住了

class A extends StatefulWidget {
  final List<Exercises> data;

  A({
    Key key,
    @required this.data,
  }) : super(key: key);

  @override
  _A createState() => _B();
}

来自页面 B

onTap: () {
           Navigator.pushNamed(context,'/ExerciseScreen',
                              arguments: {text:'abcd',
                                          description:'I am description'});
 },

来自页面 C

List<Class> data;  //its already filled

Navigator.pushNamed(
              context, '/ExerciseScreen',arguments: data
          );

如果你想要我也可以附上我的路由器文件

在我看来,架构似乎不正确。但如果这是唯一的方法,那么您可以使用以下解决方案之一来实现:

  1. 如果你关心数据比谁调用 class A 那么在 class A 中有两个不同的参数,一个用于 Object 和一个 List。如果对象不为空则处理对象,如果列表不为空则处理列表。

  2. 如果您关心谁调用了 class A,那么只需在 A 中添加另一个参数即可作为来源。当 B 调用 A 时,将 source 作为 b 传递,如果 C 调用 A,则将 source 作为 [=23] 传递=]

注意:您也可以同时使用这两种解决方案。

PS:如果你能详细解释什么是A、B和C,那么我可以建议一个更好的架构。

始终将数据作为动态值 Map 传递

arguments = {'dataFromB':{text:'abcd',description:'I am description'}}

arguments = {'dataFromC': dataList}

在A中就这样查数据

arguments.contains('dataFromB') //you know its called from B

arguments.contains('dataFromC') //you know its called from C

从 Map 访问数据后进行处理