Вы можете сделать это, но вам нужно изменить некоторые части вашего кода.
Первое изменение href="navigate:Page_two"
, таким образом, вы можете получить навигацию по страницам приложения.
Затем создайте переменную bool
для обработки видимости WebView
, так как навигация с помощью WebViewScaffold
не скроет само веб-представление.
Затем вам нужно настроить прослушиватель для перестановки изменений URL-адреса и выяснить,переадресация или навигация.
Следуйте приведенному ниже коду
bool _showWebView = true;
var flutterWebviewPlugin;
String myHtml =
'<p style="margin-left: 30px;">Read <a style= "text-decoration: none;" href="navigate:Page_two">Prohibited ads1</a></p>';
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Load WebView"),
),
body: _showWebView ? _getWebView() : Container(),
);
}
@override
void dispose() {
flutterWebviewPlugin.dispose();
super.dispose();
}
_getWebView() {
setupListener();
return WebviewScaffold(
withJavascript: true,
appCacheEnabled: true,
url: new Uri.dataFromString(myHtml, mimeType: 'text/html', encoding: utf8)
.toString(),
);
}
setupListener() {
flutterWebviewPlugin = new FlutterWebviewPlugin();
flutterWebviewPlugin.onUrlChanged.listen((String url) {
if (url.startsWith("navigate:")) {
final page = url.substring(url.indexOf(":") + 1, url.length);
Widget widget = null;
setState(() {
_showWebView = false;
});
switch (page) {
case 'Page_two':
widget = PageTwo();
break;
}
Navigator.of(context)
.push(MaterialPageRoute(builder: (context) => widget))
.then((value) {
setState(() {
_showWebView = true;
});
});
flutterWebviewPlugin.close();
}
});
}
Этот код переместится на другую страницу флаттера, когда найдет ключевое слово navigate:
в URL в соответствии с вашим кодом.При перенаправлении мы скрываем веб-просмотр и закрываем слушателя.Когда пользователь возвращается к этому экрану, мы воссоздаем веб-представление, воссоздающее слушателя, и этот процесс продолжается.
Надеюсь, это поможет.