Мой inAppWebView отлично распознает жесты «Назад» и «Вперед» (пролистывание от левого/правого края) на iOS и автоматически выполняет переход «назад»/«вперед» соответственно (код для этого не добавляется).
Но на Android он просто ничего не делает — вообще не реагирует на свайп от левого/правого края.
Нужно ли что-то сделать/настроить, чтобы это работало и на Android?
Моя структура: SafeArea -> Scaffold -> Container -> Expanded -> Container -> InAppWebView
Никаких явных или настраиваемых распознавателей жестов нигде.
Я пытался использовать свойство inAppWebView "gestureRecognizers" - но безрезультатно. Какие бы распознаватели жестов я туда не добавлял, inAppWebView ведет себя точно так же. Так что мне кажется, что это свойство вообще ничего не делает.
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 Пожалуйста, проверьте, я обновлю свой ответ Надеюсь, так что это работает нормально для вас
Эй, большое спасибо, что нашли время! К сожалению, это тоже не решает проблему 😥 Как сказано, кнопка "назад" работает нормально, проблема именно в свайпе. И "windowSwipeToDismiss", к сожалению, ничего не меняет. Во-первых, «истинные» швы в любом случае используются по умолчанию (я нахожу только множество примеров, в которых для этого параметра установлено значение «ложь», чтобы избежать такого поведения, особенно в приложениях Wear OS), но более того, согласно Android Studio, этот флаг в настоящее время устарел и ничего не делает («@deprecated Swipe-to-dismiss больше не работает».). Я все равно попробовал, и ничего не изменилось.
Мне очень жаль: я не знал, что эта функция (жест назад) доступна только в Android API >=33. Как только я запустил приложение в симуляторе с этим уровнем API, ваше решение заработало нормально! Спасибо! PS: Контроллер inAppWebView на самом деле имеет метод canGoBack()...
Предоставьте достаточно кода, чтобы другие могли лучше понять или воспроизвести проблему.