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

Метод pushNamedAndRemoveUntil

Метод pushNamedAndRemoveUntil виджета Navigator открывает маршрут по имени и снимает экраны под ним. Имя ищется так же, как в pushNamed. Предикат решает, какой экран под новым оставить.

Синтаксис

Navigator.pushNamedAndRemoveUntil( context, '/home', (route) => false, )

Параметры

ПараметрОписание
contextBuildContext под Navigator.
newRouteNameИмя нового маршрута.
predicateКакие Route оставить.

Пример

Давайте сбросить стек и открыть home по имени:

import 'package:flutter/material.dart'; Route<dynamic>? onGenerateRoute(RouteSettings settings) { if (settings.name == '/home') { return MaterialPageRoute<void>( settings: settings, builder: (ctx) => Scaffold( body: Center( child: Text('abcde'), ), ), ); } return MaterialPageRoute<void>( settings: settings, builder: (ctx) => Scaffold( body: Center( child: ElevatedButton( onPressed: () { Navigator.pushNamedAndRemoveUntil( ctx, '/home', (route) => false, ); }, child: const Text('12345'), ), ), ), ); } void main() { runApp( MaterialApp( initialRoute: '/start', onGenerateRoute: onGenerateRoute, ), ); }

На экране кнопка '12345'; вызов оставит один маршрут '/home' с 'abcde'.

Пример

Давайте оставить первый Route предикатом isFirst:

import 'package:flutter/material.dart'; void main() { runApp( MaterialApp( initialRoute: '/root', onGenerateRoute: (settings) { return MaterialPageRoute<void>( settings: settings, builder: (ctx) => Scaffold( body: Center( child: ElevatedButton( onPressed: () { Navigator.pushNamedAndRemoveUntil( ctx, '/home', (route) => route.isFirst, ); }, child: Text(settings.name ?? 'abcde'), ), ), ), ); }, ), ); }

На экране после pushNamedAndRemoveUntil останется корень и новый home.

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

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить