#flutter #web #routes #query-parameters
#flutter #веб #маршруты #запрос-параметры
Вопрос:
Я хочу вставить параметры запроса в именованный маршрут.
У меня есть этот код на моем 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(),
},
);
}
Теперь я хочу вставить параметры запроса (например, id) в ‘/ mainmenu’, поэтому, когда я хочу перейти на страницу главного меню, URL становится, например: http://localhost:57430/#/mainmenu/?id=1234
. Есть ли какой-нибудь способ сделать это? Спасибо
Комментарии:
Ответ №1:
Вы можете передавать данные Navigator
в Flutter с помощью,
Navigator.pushReplacementNamed(context, '/home', arguments: {
'id': 1234
});
В приведенном выше коде вы будете передавать данные в виде карты на следующий экран, используя аргументы.
Вы можете расшифровать карту с помощью следующих шагов:
- объявление переменной Map на следующем экране
Map data = {}
- и декодирование его с помощью
data = ModalRoute.of(context).settings.arguments;
print(data);
С уважением,
Рошан
Ответ №2:
Рекомендуется создать класс для указания аргументов, которые необходимо передать маршруту, например:
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(),
},
);
Комментарии:
1. знаете ли вы, как включить аргументы в маршрут? я пытаюсь использовать пакет fluro, но запутался
Ответ №3:
У Flutter есть кулинарная книга специально для этой ситуации. Ссылка здесь