Жест назад во Flutter inAppWebView не работает на Android

Мой inAppWebView отлично распознает жесты «Назад» и «Вперед» (пролистывание от левого/правого края) на iOS и автоматически выполняет переход «назад»/«вперед» соответственно (код для этого не добавляется).

Но на Android он просто ничего не делает — вообще не реагирует на свайп от левого/правого края.

Нужно ли что-то сделать/настроить, чтобы это работало и на Android?

Моя структура: SafeArea -> Scaffold -> Container -> Expanded -> Container -> InAppWebView

Никаких явных или настраиваемых распознавателей жестов нигде.

Я пытался использовать свойство inAppWebView "gestureRecognizers" - но безрезультатно. Какие бы распознаватели жестов я туда не добавлял, inAppWebView ведет себя точно так же. Так что мне кажется, что это свойство вообще ничего не делает.

Предоставьте достаточно кода, чтобы другие могли лучше понять или воспроизвести проблему.

Esmaeil Ahmadipour 17.04.2023 09:28
0
1
67
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Android: окноSwipeToDismiss="true"

В AndroidManifest.xml добавьте в тег вашего приложения следующий атрибут:

Код:

class MyInAppWebView extends StatefulWidget {
  @override
  _MyInAppWebViewState createState() => _MyInAppWebViewState();
}

class _MyInAppWebViewState extends State<MyInAppWebView> {
  late InAppWebViewController _webViewController;
  bool _canGoBack = false;

  @override
  Widget build(BuildContext context) {
    return WillPopScope(
      onWillPop: () async {
        if (_canGoBack) {
          _webViewController.goBack();
          return false;
        }
        return true;
      },
      child: Scaffold(
        appBar: AppBar(title: Text('InAppWebView')),
        body: InAppWebView(
          initialUrlRequest: URLRequest(url: Uri.parse('https://www.youtube.com')),
          onWebViewCreated: (controller) {
            _webViewController = controller;
          },
          onLoadStop: (controller, url) {
            setState(() {
              _canGoBack = true;
            });
          },
        ),
      ),
    );
  }
}

Спасибо за ваш ответ! Я видел это предложение при поиске ответов, но оно касается кнопки «Назад» Android, а не жеста «назад» (пролистывание от левого края экрана). С вашим методом (кроме необходимости поменять местами два возврата) он отлично работает, когда я нажимаю фактическую кнопку «Назад» на Android. Но задний жест по-прежнему ничего не делает.

Johannes Tiefenbrunner 15.04.2023 19:05

@Johannes Tiefenbrunner Пожалуйста, проверьте, я обновлю свой ответ Надеюсь, так что это работает нормально для вас

Mobin Ansar 16.04.2023 06:48

Эй, большое спасибо, что нашли время! К сожалению, это тоже не решает проблему 😥 Как сказано, кнопка "назад" работает нормально, проблема именно в свайпе. И "windowSwipeToDismiss", к сожалению, ничего не меняет. Во-первых, «истинные» швы в любом случае используются по умолчанию (я нахожу только множество примеров, в которых для этого параметра установлено значение «ложь», чтобы избежать такого поведения, особенно в приложениях Wear OS), но более того, согласно Android Studio, этот флаг в настоящее время устарел и ничего не делает («@deprecated Swipe-to-dismiss больше не работает».). Я все равно попробовал, и ничего не изменилось.

Johannes Tiefenbrunner 17.04.2023 10:01

Мне очень жаль: я не знал, что эта функция (жест назад) доступна только в Android API >=33. Как только я запустил приложение в симуляторе с этим уровнем API, ваше решение заработало нормально! Спасибо! PS: Контроллер inAppWebView на самом деле имеет метод canGoBack()...

Johannes Tiefenbrunner 17.04.2023 17:14

Другие вопросы по теме