Flutter: ограничьте жесты долгого нажатия webview_flutter или предварительный просмотр ссылок
Я работаю с приложением в Apache Cordova, но не могу получить файлы cookie и сохранить их с веб-сайта, который я загружаю с помощью Inappbrowser. Поэтому я переключился на флаттер, где могу выполнять указанные выше функции.
Однако я бы хотел, чтобы приложение вело себя как приложение, а не как браузер.
Теперь я застрял с этой проблемой, когда webview_flutter открывает либо всплывающее окно предварительного просмотра, либо лист действий, когда пользователь делает долгое нажатие на ссылки.
Пожалуйста, дайте мне знать, есть ли способ отключить всплывающее окно предварительного просмотра или открывающую страницу действий, когда пользователь долго нажимает на ссылки.
Я реализовал свой веб-просмотр, как показано ниже.
'''
class _WebViewExampleState extends State<WebViewExample> {
final Completer<WebViewController> _controller =
Completer<WebViewController>();
final cookieManager = WebviewCookieManager();
SharedPreferences prefs;
@override
Widget build(BuildContext context) {
return Scaffold(
body: Builder(builder: (BuildContext context) {
return WebView(
gestureRecognizers: null,
initialUrl: url,
javascriptMode: JavascriptMode.unrestricted,
onWebViewCreated: (WebViewController webViewController) async {
print('WebView Created');
_controller.complete(webViewController);
prefs = await SharedPreferences.getInstance();
String cookie = prefs.getString('cookieList');
List<Cookie> cookies = [];
for (Map item in jsonDecode(cookie)) {
print(item);
String name = item['name'];
String value = item['value'];
String domain = item['domain'];
DateTime expires = item['expires'];
bool httpOnly = item['httpOnly'];
int maxAge = item['maxAge'];
String path = item['path'];
bool secure = item['secure'];
cookies.add(Cookie(name, value)
..domain = domain
..expires = expires
..httpOnly = httpOnly
..maxAge = maxAge
..path = path
..secure = secure);
}
await cookieManager.setCookies(cookies);
},
onPageStarted: (String url) async {
print('Page started loading: $url');
},
onPageFinished: (String url) async {
print('Page finished loading: $url');
final cookies = await cookieManager.getCookies(url);
print(cookies);
List cookieList = [];
for (var item in cookies) {
Map<String, dynamic> cookie = {};
cookie['domain'] = item.domain;
cookie['name'] = item.name;
cookie['value'] = item.value;
cookie['expires'] = item.expires;
cookie['httpOnly'] = item.httpOnly;
cookie['maxAge'] = item.maxAge;
cookie['path'] = item.path;
cookie['secure'] = item.secure;
cookieList.add(cookie);
}
prefs.setString('cookieList', json.encode(cookieList));
},
gestureNavigationEnabled: false);
}),
);
}
}
'''
1 ответ
AFAIK, из этой открытой проблемы GitHub есть поток , запрашивающий функцию предоставления параметра для управления или перехвата событий длительного нажатия. Хотя есть временное решение , которое могло бы справиться с этой проблемой,
Я решил это временно с помощью
gestureRecognizers: Platform.isAndroid ? {Factory(() => EagerGestureRecognizer())} : null
Это также может повлиять на некоторые жесты, как упомянуто здесь:
Я попробовал и обнаружил, что он отключает пролистывание и прокрутку.