【发布时间】:2021-11-19 13:47:46
【问题描述】:
当我点击通知时,我试图获取参数。
结构是:
- Firebase 云消息传递发送带有路由名称和其他值的通知。
await _notificationsPlugin.show(
id,
message.notification!.title,
message.notification!.body,
notificationDetails,
payload: json.encode(message.data),
);
- 我在选择通知时添加了 PushNamed。
_notificationsPlugin.initialize(initializationSettings,
// ignore: avoid_types_on_closure_parameters
onSelectNotification: (String? payload) async {
final args = json.decode(payload!);
if (args.route != null) {
Navigator.pushNamed(context, args.route,
arguments: 'data');
}
});
- 并通过 onGenerateRoute a 尝试获取此参数。我得到了路由名称,但没有任何参数......我尝试使用 String、int、Object ......没有任何变化。 参数始终为 Null
class AppRouter {
Route? onGenerateRoute(RouteSettings settings) {
print('${settings.arguments}'); // always Null
switch (settings.name) {
case '/home':
return MaterialPageRoute(
builder: (_) => BlocProvider<HomeBloc>(
create: (context) => getIt<HomeBloc>()
..add(GetInfos(data: settings.arguments)),
child: HomePage(data: settings.arguments),
),
);
default:
return null;
}
}
}
更新
我更新了我的代码,用于在 MaterialPageRoute 中传递设置并使用 ModalRoute 获取参数,但不起作用.. 它始终为 null...
class AppRouter {
Route? onGenerateRoute(RouteSettings settings) {
switch (settings.name) {
case '/home':
return MaterialPageRoute(settings: settings, builder: (_) => Screen());
default:
return null;
}
}
}
class Screen extends StatelessWidget {
const Screen({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
final dynamic args = ModalRoute.of(context)!.settings.arguments;
print(args); // always Null
return BlocProvider<HomeBloc>(
create: (context) => getIt<HomeBloc>()
..add(GetInfos(data: args)),
child: HomePage(data: args),
);
}
}
【问题讨论】:
标签: firebase flutter firebase-cloud-messaging