Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
728 of 1024 menu
◀ ▶

Виджет Navigator

Виджет Navigator держит стопку Route и показывает верхний экран. Новый экран открывают через push или pushNamed, возврат - через pop. Маршруты по имени задают onGenerateRoute и initialRoute, наблюдателей вешают в observers.

Синтаксис

Navigator( onGenerateRoute: (settings) { return MaterialPageRoute<void>( builder: (context) => const Placeholder(), ); }, )

Параметры

Параметр Описание
initialRoute Имя первого маршрута, если не задан home.
onGenerateRoute Строит Route по RouteSettings.
pages Список Page для декларативной навигации.
observers Список NavigatorObserver для push и pop.

Методы

Метод Описание
of Возвращает State Navigator из context.
maybeOf То же, но null без Navigator.
push Кладёт Route на стопку.
pop Снимает верхний Route.
maybePop Pop, если canPop true.
canPop Проверяет, можно ли pop.
pushReplacement Меняет верхний Route.
pushAndRemoveUntil Push и срезает стопку до предиката.
popUntil Pop до Route, где предикат true.
pushNamed Push по имени маршрута.
pushNamedAndRemoveUntil Именованный push со срезом стопки.
popAndPushNamed Pop текущего и pushNamed.

Пример

Давайте откроем второй экран через push:

import 'package:flutter/material.dart'; class HomeScreen extends StatelessWidget { const HomeScreen({super.key}); @override Widget build(BuildContext context) { return Scaffold( body: Center( child: ElevatedButton( onPressed: () { Navigator.push( context, MaterialPageRoute<void>( builder: (ctx) => const SecondScreen(), ), ); }, child: const Text('abcde'), ), ), ); } } class SecondScreen extends StatelessWidget { const SecondScreen({super.key}); @override Widget build(BuildContext context) { return Scaffold( body: Center( child: Text('12345'), ), ); } } void main() { runApp( MaterialApp( home: HomeScreen(), ), ); }

На экране кнопка 'abcde'; по нажатию откроется второй экран с текстом '12345'.

Пример

Давайте вернёмся назад через pop:

import 'package:flutter/material.dart'; class BackScreen extends StatelessWidget { const BackScreen({super.key}); @override Widget build(BuildContext context) { return Scaffold( body: Center( child: ElevatedButton( onPressed: () { Navigator.pop(context); }, child: const Text('12345'), ), ), ); } } void main() { runApp( MaterialApp( home: BackScreen(), ), ); }

На экране кнопка '12345'; нажатие закроет экран, если под ним есть маршрут в стопке.

Смотрите также

  • класс MaterialPageRoute,
    маршрут со сдвигом Material
  • виджет PopScope,
    который перехватывает системный назад
  • класс Route,
    описание одной страницы в стопке
  • виджет Router,
    декларативная навигация по URL
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить