Can*_*000 6 asynchronous webview dart flutter
我无法在 flutter Webview 中加载新 URL...我在 flutter Controller中使用then时遇到问题...FutureWebview
在颤动中Webview,我想加载initialUrl,然后以编程方式从该网页检索一些信息...到目前为止一切正常...但后来我希望Webview 自动加载另一个网页...但我不知道如何使用 thecontroller 和 theCompleter 来做到这一点
片段:
WebView(
initialUrl: 'https://flutter.dev',
onWebViewCreated: (WebViewController webViewController) {
_controller.complete(webViewController);
},
onPageFinished: (String url) async{
if (url == 'https://flutter.dev') {
// *** I retrieve some data, then I want to navigate ***
_controller!.loadUrl('https://google.com'); // *** ERROR HERE ***
}
},
)
Run Code Online (Sandbox Code Playgroud)
我尝试直接使用controller ,
_controller!.loadUrl('https://google.com');
Run Code Online (Sandbox Code Playgroud)
如果我不使用 aCompleter 而只是分配 a ,它就可以工作controller
_controller = webViewController;
Run Code Online (Sandbox Code Playgroud)
但似乎不是推荐的选择:
我找到了其他使用 a 的示例FutureBuilder,但我并不想构建任何东西
这是完整的代码,以防万一有用:
import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';
import 'dart:async';
void main() {
runApp(
const MaterialApp(
home: WebViewApp(),
),
);
}
class WebViewApp extends StatefulWidget {
const WebViewApp({super.key});
@override
State<WebViewApp> createState() => _WebViewAppState();
}
class _WebViewAppState extends State<WebViewApp> {
final Completer<WebViewController> _controller = Completer<WebViewController>();
@override Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Flutter WebView'),),
body: WebView(
initialUrl: 'https://flutter.dev',
onWebViewCreated: (WebViewController webViewController) {
_controller.complete(webViewController);
},
onPageFinished: (String url) async{
if (url == 'https://flutter.dev') {
// *** I retrieve some data, then I want to navigate ***
_controller!.loadUrl('https://google.com'); // *** ERROR HERE ***
}
},
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
关于在这种情况下如何使用完成器的主题!
将回调 onPageFinished 替换为以下代码片段并仔细阅读注释
onPageFinished: (String url) async{
// add the missing '/' at the end of the url since the url string is 'https://flutter.dev/'
// NOT 'https://flutter.dev'
if (url == 'https://flutter.dev/') {
// *** I retrieve some data, then I want to navigate ***
final wvController = await _controller.future;
await wvController.loadUrl('https://google.com');
// ***
// No More ERROR
// HERE ***)
}
},
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1216 次 |
| 最近记录: |