Я хочу вставить параметры запроса в именованный маршрут.
У меня есть этот код на моем MaterialApp
Widget build(BuildContext context) {
return MaterialApp(
title: 'Web',
theme: ThemeData(
primarySwatch: Colors.amber,
),
// Start the app with the "/" named route. In this case, the app starts
// on the FirstScreen widget.
initialRoute: '/login',
routes: {
'/login': (context) => LoginPage(),
'/mainmenu': (context) => MainMenu(),
},
);
}
Теперь я хочу вставить параметры запроса (например, идентификатор) в «/mainmenu», поэтому, когда я хочу перейти на страницу главного меню, URL-адрес становится, например: http://localhost:57430/#/mainmenu/?id=1234
. Есть ли способ сделать это? Спасибо
Вы можете передавать данные через Navigator
во Flutter,
Navigator.pushReplacementNamed(context, '/home', arguments: {
'id': 1234
});
В приведенном выше коде вы будете передавать данные в виде карты на следующий экран, используя аргументы.
Вы можете декодировать карту, выполнив следующие действия:
Map data = {}
data = ModalRoute.of(context).settings.arguments;
print(data);
У Flutter есть кулинарная книга специально для этой ситуации. Ссылка здесь
Рекомендуется создать класс для указания аргументов, которые необходимо передать маршруту, например:
class MainMenuArguments {
final int id;
MainMenuArguments(this.id);
}
Это можно передать Navigator
:
Navigator.pushNamed(context, MainMenuScreen.routeName, arguments: MainMenuArguments(1234)); // id = 1234
Затем к ним можно получить доступ из MainMenu
Widget
:
class MainMenuScreen extends StatelessWidget {
static const routeName = '/mainMenu';
@override
Widget build(BuildContext context) {
final MainMenuArguments args = ModalRoute.of(context).settings.arguments;
return Scaffold(
body: Center(
child: Text(args.id.toString()), // displays 1234
),
);
}
}
Для этого вам нужно зарегистрировать маршрут внутри конструктора MaterialApp
:
MaterialApp(
routes: {
MainMenuArgumentsScreen.routeName: (context) => MainMenuArgumentsScreen(),
},
);
Вы знаете, как включить аргументы в маршрут? я пытаюсь использовать пакет fluro, но запутался
см. flutteragency.com/pass-parameters-to-web-app