flutter 的 WillPopScope 禁用了 IOS 返回手势,如何启用它们?

Jun*_*riq 8 ios flutter flutter-layout

我正在创建一个应用程序,我可以完全手动控制每次后退按钮的按下。

我基本上在我的应用程序中更改了小部件/视图,而不是导航器推送和弹出新屏幕。

我创建了一个功能,可以显示视图 1,2 和 3。并使用 Android 上的后退按钮返回。然而,在 iOS 上,后退手势不起作用,我无法更改视图。

有什么解决方法吗?如有帮助,将不胜感激

  Future<bool> goBackward(){
    if(_isButtonPressed) {
      if(currentView == 0)
        {
          return Future<bool>.value(true);
        }
      else if(currentView == 1)
        {
          currentView = 0;
          notifyListeners();
          return Future<bool>.value(false);
        }
      else
        {
          currentView = 2;
          notifyListeners();
          return Future<bool>.value(false);
        }
    }
  }
Run Code Online (Sandbox Code Playgroud)

以上是代码的最小版本。当我返回 true 时,这意味着我已准备好在后按时弹出屏幕

Jun*_*riq 16

在网上搜索并尝试了许多软件包(例如cupertino_will_pop_scopeback_button_interceptor)后,我发现它们都不适合我的用例。

cupertino_will_pop_scope是一个错过和命中的事情,所以有时它有效,有时则无效。

对于尚未找到答案的人来说,这是一个解决方案。

正如我之前提到的,WillPopScope 在 Android 上完美运行,因此无需更改那里的功能。

然而,对于 IOS,我使用手势检测器来检测左侧手势的滑动,并相应地执行我的操作。

    if(!Platform.isIOS)
      {
        //When OS is Android return the view as is 
        return MyView;
      }
      else{
       //When OS is iOS return the view as is wrapped with GestreDetector

        return GestureDetector(
          onHorizontalDragUpdate: (details) {
            //set the sensitivity for your ios gesture anywhere between 10-50 is good

            int sensitivity = Integers().iosSwipeSensitivity;

            if (details.delta.dx > sensitivity) {
              //SWIPE FROM RIGHT DETECTION
              goBackward();
            }
          },
          child: MyView;
        );
      }
Run Code Online (Sandbox Code Playgroud)