返回

Android 14 的 Flutter 后退按钮故障:应用程序关闭而非弹出

Android

Android 14 中的 Flutter 后退按钮问题:关闭应用程序而不是弹出

问题概述

随着 Android 14 的发布,用户在使用 Flutter 应用程序时遇到了一个问题,即按下后退按钮时应用程序会被最小化或关闭,而不是返回上一页。

原因探究

这个问题似乎与 Android 14 的系统行为有关,具体影响到了 GoRouter 和 PopScope 等用于应用程序导航的库。

解决方案

虽然目前还没有明确的解决方案,但用户可以尝试以下方法:

  • 更新库版本: 确保使用最新版本的 GoRouter 和 PopScope。
  • 调整 backButtonDispatcher: 在 GoRouter 中,可以设置 backButtonDispatcher 属性以使用 PopScope 或自定义后退按钮分派器。
  • 禁用预测性返回: 按照 Flutter 官方文档中的说明,禁用 Android 14 的预测性返回功能。
  • 使用 MaterialPage:PopScope 替换为 MaterialPage,并在 MaterialApp.router 中使用它。
  • 检查应用程序导航: 审查应用程序导航的实现,确保其符合 Android 14 的后退按钮行为。

代码示例

以下代码片段演示了如何使用 MaterialPage 替换 PopScope

router = GoRouter(
  initialLocation: LoginScreen.routeName,
  debugLogDiagnostics: true,
  routes: <RouteBase>[
    GoRoute(
      path: LoginScreen.routeName,
      name: LoginScreen.title,
      pageBuilder: (context, state) => MaterialPage<void>(
        key: state.pageKey,
        child: const LoginScreen(),
      ),
    ),
    GoRoute(
      path: PinScreen.routeName,
      name: PinScreen.title,
      pageBuilder: (context, state) => MaterialPage<void>(
        key: state.pageKey,
        child: const PinScreen(),
      ),
    ),
  ],
);

常见问题解答

1. 这些解决方案是否适用于所有 Flutter 应用程序?

不,这些解决方案可能无法完全解决所有应用程序中的问题,因为问题可能因应用程序的具体导航实现而异。

2. Flutter 团队正在解决此问题吗?

是的,Flutter 团队已确认该问题并正在调查中。

3. 我可以联系 Flutter 团队报告此问题吗?

当然可以,鼓励用户通过 Flutter Issue Tracker 报告此问题并提供尽可能多的详细信息。

4. 有替代方案可以暂时解决此问题吗?

虽然没有明确的替代方案,但尝试以下方法可能会提供帮助:

  • 使用自定义后退按钮处理。
  • 重新设计应用程序导航以避免依赖后退按钮。

5. 此问题是否仅限于 Android 14 设备?

截至目前,此问题主要在 Android 14 设备上观察到,但它也可能影响具有类似后退按钮行为的其他 Android 版本。

结论

虽然这个问题给 Android 14 上的 Flutter 应用程序带来了不便,但通过探索提供的解决方案,用户可以减轻其影响并继续使用他们的应用程序。随着 Flutter 团队继续调查和解决此问题,预期的后续更新将提供最终解决方案。