Метод pushAndRemoveUntil
Метод pushAndRemoveUntil виджета Navigator
кладёт новый маршрут сверху и снимает маршруты под ним.
Предикат вызывают для каждого экрана снизу вверх.
Истина оставляет экран, ложь снимает его.
Синтаксис
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute<void>(
builder: (context) => homeScreen,
),
(route) => false,
)
Параметры
| Параметр | Описание |
|---|---|
context | BuildContext под Navigator. |
newRoute | Route, который станет верхним. |
predicate | Функция: true оставляет Route в стопке. |
Пример
Давайте очистить стопку и открыть home:
import 'package:flutter/material.dart';
class DeepPage extends StatelessWidget
{
const DeepPage({super.key});
@override
Widget build(BuildContext context)
{
return Scaffold(
body: Center(
child: ElevatedButton(
onPressed: () {
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute<void>(
builder: (ctx) => const Scaffold(
body: Center(
child: Text('abcde'),
),
),
),
(route) => false,
);
},
child: const Text('12345'),
),
),
);
}
}
void main()
{
runApp(
MaterialApp(
home: DeepPage(),
),
);
}
На экране кнопка '12345'; pushAndRemoveUntil оставит один экран с 'abcde'.
Пример
Давайте оставить только первый Route:
import 'package:flutter/material.dart';
void main()
{
runApp(
MaterialApp(
home: Builder(
builder: (context) {
return Scaffold(
body: Center(
child: ElevatedButton(
onPressed: () {
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute<void>(
builder: (ctx) => const Scaffold(
body: Center(
child: Text('12345'),
),
),
),
(route) => route.isFirst,
);
},
child: const Text('abcde'),
),
),
);
},
),
),
);
}
На экране после вызова останется корневой маршрут и новый верхний с '12345'.
Смотрите также
- метод
pushNamedAndRemoveUntil,
то же по имени маршрута - метод
popUntil,
снимаетRouteбезpush - метод
push,
добавляетRouteбез очистки - метод
pushReplacement,
меняет только верхнийRoute