Проблема с использованием 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,
       ),
     ),
   );
 }
}


Ответы (0 шт):