flutter_boost iOS原生通过boost跳转到flutter页面后弹出showCupertinoModalPopup报错

evrscar2  于 5个月前  发布在  Flutter
关注(0)|答案(6)|浏览(50)

[✓] Flutter (Channel stable, 2.5.3, on macOS 11.6.1 20G224 darwin-x64, locale zh-Hans-CN)
[!] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
✗ cmdline-tools component is missing
Run path/to/sdkmanager --install "cmdline-tools;latest"
See https://developer.android.com/studio/command-line for more details.
✗ Android license status unknown.
Run flutter doctor --android-licenses to accept the SDK licenses.
See https://flutter.dev/docs/get-started/install/macos#android-setup for more details.
[✓] Xcode - develop for iOS and macOS
[✓] Chrome - develop for the web
[✓] Android Studio (version 2020.3)
[✓] VS Code (version 1.63.1)
[✓] Connected device (3 available)

! Doctor found issues in 1 category.

这是flutter版本,对应flutter_boost是1.17.1。
复现步骤是用boost open到一个flutter页面A,close后,再次打开页面A,点击出现弹框。我这里可以提供可复现的最小demo,如需可提供

如下是部分弹框代码:

如下是报错信息:

k3bvogb1

k3bvogb11#

flutter framework不允许在initstate期间重新刷新试图,如果希望完成init后马上进行一些试图变更,建议使用future.delay(duration.zero,()=>xxx)把事件加入到异步队列,在initstate之后由虚拟机调度执行。

mrwjdhj3

mrwjdhj32#

flutter framework不允许在initstate期间重新刷新试图,如果希望完成init后马上进行一些试图变更,建议使用future.delay(duration.zero,()=>xxx)把事件加入到异步队列,在initstate之后由虚拟机调度执行。

这并非是马上进行视图变更,而是我点击触发的,与队列无关吧。并且即使我alert弹窗添加到异步队列中仍有此问题。�
当我使用navigator2.0的delegate初始化route后,以route.navigator跳转并不会出现该问题,但是我boost并没有可以初始化的地方,请问我该如何处理这种情况?

mlnl4t2r

mlnl4t2r3#

flutter framework不允许在initstate期间重新刷新试图,如果希望完成init后马上进行一些试图变更,建议使用future.delay(duration.zero,()=>xxx)把事件加入到异步队列,在initstate之后由虚拟机调度执行。

这并非是马上进行视图变更,而是我点击触发的,与队列无关吧。并且即使我alert弹窗添加到异步队列中仍有此问题。� 当我使用navigator2.0的delegate初始化route后,以route.navigator跳转并不会出现该问题,但是我boost并没有可以初始化的地方,请问我该如何处理这种情况?

可以麻烦展示详细的demo吗?

pxy2qtax

pxy2qtax4#

flutter framework不允许在initstate期间重新刷新试图,如果希望完成init后马上进行一些试图变更,建议使用future.delay(duration.zero,()=>xxx)把事件加入到异步队列,在initstate之后由虚拟机调度执行。

这并非是马上进行视图变更,而是我点击触发的,与队列无关吧。并且即使我alert弹窗添加到异步队列中仍有此问题。� 当我使用navigator2.0的delegate初始化route后,以route.navigator跳转并不会出现该问题,但是我boost并没有可以初始化的地方,请问我该如何处理这种情况?

可以麻烦展示详细的demo吗?

麻烦留个邮箱可以吗?我这边demo提示无法上传

fcwjkofz

fcwjkofz5#

flutter framework不允许在initstate期间重新刷新试图,如果希望完成init后马上进行一些试图变更,建议使用future.delay(duration.zero,()=>xxx)把事件加入到异步队列,在initstate之后由虚拟机调度执行。

这并非是马上进行视图变更,而是我点击触发的,与队列无关吧。并且即使我alert弹窗添加到异步队列中仍有此问题。� 当我使用navigator2.0的delegate初始化route后,以route.navigator跳转并不会出现该问题,但是我boost并没有可以初始化的地方,请问我该如何处理这种情况?

可以麻烦展示详细的demo吗?

我这边就是下载了官方的demo,然后通过本地集成的方式pod到demo项目中。对官网demo的更改仅在 FirstRouteWidget 的Column中添加了如下widget

GestureDetector(
              child: Container(
                color: Colors.red,
                height: 100,
                width: 200,
              ),
              onTap: () {
                print('taptap');
                showAlert.showSheet(context);
              },
              onLongPress: () {
                print('longPress');
                showAlert.showSheet(context);
              },
            ),

showAlert 代码如下

class showAlert {
  static showSheet(BuildContext context) {
    return showCupertinoModalPopup(
      context: context,
      builder: (BuildContext context) {
        return CupertinoActionSheet(
          title: Text('提示'),
          message: Text('是否要删除当前项?'),
          actions: <Widget>[
            CupertinoActionSheetAction(
              isDefaultAction: true,
              child: Text('删除'),
              onPressed: () {
                Navigator.of(context, rootNavigator: true).pop();
              },
            ),
            CupertinoActionSheetAction(
              isDestructiveAction: true,
              child: Text('不删除'),
              onPressed: () {
                Navigator.of(context, rootNavigator: true).pop();
              },
            ),
          ],
        );
      },
    );
  }
}

复现步骤:就是原生用�flutterboost跳转到 first 路由后,点击红色方框,关闭红色方框,返回到上个界面,再用flutterboost跳转到 first 路由后就能复现

flutter版本2.x均可,flutter_boost是官方下的1.17.1

enxuqcxy

enxuqcxy6#

sorry之前没看到如何提issues,fork的可复现最小demo在下面链接了,麻烦2位了 @0xZOne@songyanghe666

相关问题