如何在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
);
如果你想要我也可以附上我的路由器文件
在我看来,架构似乎不正确。但如果这是唯一的方法,那么您可以使用以下解决方案之一来实现:
如果你关心数据比谁调用 class A
那么在 class A
中有两个不同的参数,一个用于 Object
和一个 List
。如果对象不为空则处理对象,如果列表不为空则处理列表。
如果您关心谁调用了 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 访问数据后进行处理
我正在设计一个应用程序,其中从两个不同的页面 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
);
如果你想要我也可以附上我的路由器文件
在我看来,架构似乎不正确。但如果这是唯一的方法,那么您可以使用以下解决方案之一来实现:
如果你关心数据比谁调用 class
A
那么在 classA
中有两个不同的参数,一个用于Object
和一个List
。如果对象不为空则处理对象,如果列表不为空则处理列表。如果您关心谁调用了 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 访问数据后进行处理