Есть ли какой-нибудь способ вставить параметры запроса в именованный маршрут в flutter web?

#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. см flutteragency.com/pass-parameters-to-web-app

Ответ №1:

Вы можете передавать данные Navigator в Flutter с помощью,

 Navigator.pushReplacementNamed(context, '/home', arguments: {
        'id': 1234 
      });
 

В приведенном выше коде вы будете передавать данные в виде карты на следующий экран, используя аргументы.

Вы можете расшифровать карту с помощью следующих шагов:

  1. объявление переменной Map на следующем экране

Map data = {}

  1. и декодирование его с помощью
 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 есть кулинарная книга специально для этой ситуации. Ссылка здесь