Метод pushNamed
Метод pushNamed виджета Navigator имя должно совпадать с RouteSettings.name в onGenerateRoute. Аргументы передают параметром arguments.
Синтаксис
Navigator.pushNamed(
context,
'/second',
arguments: 'abcde',
)
Параметры
| Параметр | Описание |
|---|---|
context |
Контекст, от которого виджет ищут вверх по дереву. |
routeName |
Строка маршрута для onGenerateRoute. |
arguments |
Необязательный объект для следующего экрана. |
Пример
Давайте откроем именованный маршрут:
import 'package:flutter/material.dart';
class NamedHome extends StatelessWidget
{
const NamedHome({super.key});
@override
Widget build(BuildContext context)
{
return Scaffold(
body: Center(
child: ElevatedButton(
onPressed: () {
Navigator.pushNamed(context, '/second');
},
child: const Text('abcde'),
),
),
);
}
}
Route<dynamic>? onGenerateRoute(RouteSettings settings)
{
if (settings.name == '/second') {
return MaterialPageRoute<void>(
settings: settings,
builder: (ctx) => Scaffold(
body: Center(
child: Text('12345'),
),
),
);
}
return null;
}
void main()
{
runApp(
MaterialApp(
onGenerateRoute: onGenerateRoute,
home: NamedHome(),
),
);
}
На экране кнопка 'abcde'; pushNamed откроет маршрут '/second' с текстом '12345'.
Пример
Давайте передадим arguments в pushNamed:
import 'package:flutter/material.dart';
class ArgsHome extends StatelessWidget
{
const ArgsHome({super.key});
@override
Widget build(BuildContext context)
{
return Scaffold(
body: Center(
child: ElevatedButton(
onPressed: () {
Navigator.pushNamed(
context,
'/show',
arguments: 'abcde',
);
},
child: const Text('12345'),
),
),
);
}
}
class ArgsShow extends StatelessWidget
{
const ArgsShow({super.key});
@override
Widget build(BuildContext context)
{
var args = ModalRoute.of(context)?.settings.arguments;
return Scaffold(
body: Center(
child: Text('$args'),
),
);
}
}
Route<dynamic>? onGenerateRoute(RouteSettings settings)
{
if (settings.name == '/show') {
return MaterialPageRoute<void>(
settings: settings,
builder: (ctx) => const ArgsShow(),
);
}
return null;
}
void main()
{
runApp(
MaterialApp(
onGenerateRoute: onGenerateRoute,
home: ArgsHome(),
),
);
}
На втором экране по центру появится 'abcde' из arguments pushNamed.
Смотрите также
-
метод
popAndPushNamed,
popтекущего иpushNamed -
метод
pushNamedAndRemoveUntil,
именованныйpushсо срезом стопки -
метод
push,
открываетRouteнапрямую -
класс
RouteSettings,
имя маршрута дляpushNamed