Метод push
Метод push виджета Navigator
кладёт новый маршрут поверх стопки.
Первый аргумент это контекст, второй это Route.
Обычно маршрутом служит MaterialPageRoute.
Синтаксис
Navigator.push(
context,
MaterialPageRoute<void>(
builder: (context) => nextScreen,
),
)
Параметры
| Параметр | Описание |
|---|---|
context |
Контекст, от которого виджет ищут вверх по дереву. |
route |
Новый Route, который станет верхним.
|
Пример
Давайте откроем второй экран по кнопке:
import 'package:flutter/material.dart';
class FirstPage extends StatelessWidget
{
const FirstPage({super.key});
@override
Widget build(BuildContext context)
{
return Scaffold(
body: Center(
child: ElevatedButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute<void>(
builder: (ctx) => const SecondPage(),
),
);
},
child: const Text('abcde'),
),
),
);
}
}
class SecondPage extends StatelessWidget
{
const SecondPage({super.key});
@override
Widget build(BuildContext context)
{
return Scaffold(
body: Center(
child: Text('12345'),
),
);
}
}
void main()
{
runApp(
MaterialApp(
home: FirstPage(),
),
);
}
На экране кнопка 'abcde'; push открывает поверх неё экран с '12345'.
Пример
Давайте вернём результат через pop после push:
import 'package:flutter/material.dart';
class PickPage extends StatelessWidget
{
const PickPage({super.key});
@override
Widget build(BuildContext context)
{
return Scaffold(
body: Center(
child: ElevatedButton(
onPressed: () async {
await Navigator.push<String>(
context,
MaterialPageRoute<String>(
builder: (ctx) => Scaffold(
body: Center(
child: ElevatedButton(
onPressed: () {
Navigator.pop(ctx, '12345');
},
child: const Text('pick'),
),
),
),
),
);
},
child: const Text('abcde'),
),
),
);
}
}
void main()
{
runApp(
MaterialApp(
home: PickPage(),
),
);
}
На экране push открывает экран выбора; pop с результатом закрывает его и возвращает строку в await.
Смотрите также
-
метод
pop,
который снимаетRouteпослеpush -
метод
pushReplacement,
который меняет верхнийRouteбез роста стопки -
класс
MaterialPageRoute,
типичныйRouteдляpush -
метод
of,
доступ к NavigatorState