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

Виджет PopScope

Виджет PopScope оборачивает child и задаёт canPop: можно ли снять текущий Route. Колбэк onPopInvokedWithResult вызывают, когда пользователь нажал назад или жест. Работает вместе с Navigator.

Синтаксис

PopScope( canPop: false, onPopInvokedWithResult: (didPop, result) {}, child: child, )

Параметры

Параметр Описание
canPop Разрешить Navigator.pop и системный назад.
onPopInvokedWithResult Вызывается после попытки pop; didPop показывает успех.
child Дочерний виджет экрана.

Пример

Давайте запретим закрытие экрана:

import 'package:flutter/material.dart'; class BlockPopPage extends StatefulWidget { const BlockPopPage({super.key}); @override State<BlockPopPage> createState() => _BlockPopPageState(); } class _BlockPopPageState extends State<BlockPopPage> { var message = 'abcde'; @override Widget build(BuildContext context) { return PopScope( canPop: false, onPopInvokedWithResult: (didPop, result) { if (!didPop) { setState(() { message = '12345'; }); } }, child: Scaffold( body: Center( child: Text(message), ), ), ); } } void main() { runApp( MaterialApp( home: BlockPopPage(), ), ); }

На экране текст 'abcde'; системный назад не закроет экран, а сменит текст на '12345'.

Пример

Давайте разрешим pop после подтверждения:

import 'package:flutter/material.dart'; class AllowPopPage extends StatelessWidget { const AllowPopPage({super.key}); @override Widget build(BuildContext context) { return PopScope( canPop: true, child: Scaffold( appBar: AppBar( title: const Text('abcde'), ), body: const Center( child: Text('12345'), ), ), ); } } void main() { runApp( MaterialApp( home: AllowPopPage(), ), ); }

На экране AppBar и текст; кнопка назад и жест pop закроют маршрут, если под ним есть стопка.

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

  • метод pop,
    программный возврат назад
  • метод canPop,
    проверка возможности pop
  • виджет Navigator,
    стопка, из которой снимают Route
  • класс ModalRoute,
    текущий маршрут экрана
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить