Apache Cordova でアプリを操作していますが、Inappbrowser を使用して読み込んでいる Web サイトから Cookie を取得して保持することができません。そこで、上記の機能を実行できるフラッターに切り替えました。
ただし、アプリがブラウザーのようではなく、アプリのように動作することを望みます。
現在、ユーザーがリンクを長押しすると、 webview_flutterがプレビュー ポップアップまたはアクション シートを開くというこの問題に悩まされています。
ユーザーがリンクを長押ししたときに、プレビュー ポップアップまたは開くアクション シートを無効にする方法があれば教えてください。
以下のように Webview を実装しました。
'''
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);
}),
);
}
}
'''