Метод pushNamedAndRemoveUntil
Метод pushNamedAndRemoveUntil виджета Navigator
открывает маршрут по имени и снимает экраны под ним.
Имя ищется так же, как в pushNamed.
Предикат решает, какой экран под новым оставить.
Синтаксис
Navigator.pushNamedAndRemoveUntil(
context,
'/home',
(route) => false,
)
Параметры
| Параметр | Описание |
|---|---|
context | BuildContext под 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.
Смотрите также
- метод
pushNamed,
именованныйpushбез очистки - метод
pushAndRemoveUntil,
то же сRouteобъектом - метод
popAndPushNamed,popиpushNamed - класс
RouteSettings,
name маршрута