Проблема с использованием PopScope в виджете PageView
У меня возникла такая проблема по использованию PopScope, у меня используется PageView в котором есть несколько страниц в которых есть PopScope и определенная обработка в нем, но на одной из них обработка в PopScope привязана к виджету, поэтому я не могу сделать обработку в главном виджете, и сама проблема заключается в том что при пролистывании PageView у меня активные две страницы, и при выходе (у меня это случается на устройстве у которого есть выход по жесту), вызывается PopScope на двух страницах и у меня несколько раз вызывается Navigator.pop, есть ли какая-нибудь возможность обработать этот момент, чтобы PopScope вызывался на одной страницы, потому что до этого я использовал WillPopScope и с ним работало все без проблем.
import 'dart:developer';
import 'package:flutter/material.dart';
class TestView extends StatefulWidget {
const TestView({super.key});
@override
State<TestView> createState() => _TestViewState();
}
class _TestViewState extends State<TestView> {
final PageController pageController = PageController();
Future<bool> onWillPop() async {
return true;
}
@override
Widget build(BuildContext context) {
final List<Widget> pages = [
///
TestHeaderView(
onWillPop: onWillPop,
),
///
TestProductsView(
onWillPop: onWillPop,
),
///
TestCardView(
onWillPop: onWillPop,
),
];
return PageView(
controller: pageController,
children: pages,
);
}
}
class TestHeaderView extends StatelessWidget {
final Future<bool> Function() onWillPop;
const TestHeaderView({super.key, required this.onWillPop});
@override
Widget build(BuildContext context) {
return PopScope(
canPop: false,
onPopInvoked: (bool didPop) async {
log('Header: didPop: $didPop');
if (didPop) {
return;
}
final bool res = await onWillPop();
if (context.mounted && res == true) {
Navigator.pop(context);
}
},
child: Scaffold(
appBar: AppBar(
title: const Text('Header'),
centerTitle: true,
),
),
);
}
}
class TestProductsView extends StatelessWidget {
final Future<bool> Function() onWillPop;
const TestProductsView({super.key, required this.onWillPop});
@override
Widget build(BuildContext context) {
return PopScope(
canPop: false,
onPopInvoked: (bool didPop) async {
log('Products: didPop: $didPop');
if (didPop) {
return;
}
final bool res = await onWillPop();
if (context.mounted && res == true) {
Navigator.pop(context);
}
},
child: Scaffold(
appBar: AppBar(
title: const Text('Products'),
centerTitle: true,
),
),
);
}
}
class TestCardView extends StatelessWidget {
final Future<bool> Function() onWillPop;
const TestCardView({super.key, required this.onWillPop});
@override
Widget build(BuildContext context) {
return PopScope(
canPop: false,
onPopInvoked: (bool didPop) async {
log('Cart: didPop: $didPop');
if (didPop) {
return;
}
final bool res = await onWillPop();
if (context.mounted && res == true) {
Navigator.pop(context);
}
},
child: Scaffold(
appBar: AppBar(
title: const Text('Cart'),
centerTitle: true,
),
),
);
}
}