如何向webview_flutter的loadRequest()方法传递参数?
解决webview_flutter中loadRequest传递参数时的"The instance member '_posUrl' can't be accessed in an initializer"错误
这个错误的核心原因是:你在类成员变量的初始化阶段直接访问了实例成员_posUrl,但此时Dart类的实例还未完全初始化,因此不允许这种操作。
以下是两种可行的解决方法:
方法一:在initState中初始化WebViewController
将WebViewController的初始化逻辑移到initState方法中,该方法会在Widget实例创建完成后调用,此时可以安全访问实例成员_posUrl:
var _posUrl; late WebViewController controller; // 使用late关键字声明延迟初始化 _POSwebviewtState(this._posUrl); @override void initState() { super.initState(); controller = WebViewController() ..setJavaScriptMode(JavaScriptMode.unrestricted) ..setBackgroundColor(const Color(0x00000000)) ..setNavigationDelegate( NavigationDelegate( onProgress: (int progress) { // Update loading bar. }, onPageStarted: (String url) { log("New $url"); }, onPageFinished: (String url) {}, onWebResourceError: (WebResourceError error) {}, onNavigationRequest: (NavigationRequest request) { if (request.url.startsWith('https://www.twitter.com/')) { return NavigationDecision.prevent; } return NavigationDecision.navigate; }, ), ) ..loadRequest(Uri.parse(_posUrl)); }
方法二:使用Getter延迟创建WebViewController
通过Getter方法延迟初始化WebViewController,只有在第一次访问controller时才会创建实例,此时类实例已经完全初始化:
var _posUrl; WebViewController? _controller; _POSwebviewtState(this._posUrl); WebViewController get controller { if (_controller == null) { _controller = WebViewController() ..setJavaScriptMode(JavaScriptMode.unrestricted) ..setBackgroundColor(const Color(0x00000000)) ..setNavigationDelegate( NavigationDelegate( onProgress: (int progress) { // Update loading bar. }, onPageStarted: (String url) { log("New $url"); }, onPageFinished: (String url) {}, onWebResourceError: (WebResourceError error) {}, onNavigationRequest: (NavigationRequest request) { if (request.url.startsWith('https://www.twitter.com/')) { return NavigationDecision.prevent; } return NavigationDecision.navigate; }, ), ) ..loadRequest(Uri.parse(_posUrl)); } return _controller!; }
两种方法都能有效避开初始化阶段访问实例成员的限制,确保_posUrl能正确传递给loadRequest方法。
内容的提问来源于stack exchange,提问作者Amr
相关产品推荐
相关产品推荐

