Flutter InAppWebView无法加载:仅显示URL字符串问题求助
问题解决:InAppWebView仅显示URL字符串无法加载网页及URL监听实现
问题根源
你代码中初始化URL的方式错误:使用UriData.fromString处理普通HTTP URL是完全错误的,UriData.fromString是用于解析data URI格式(如data:text/html,<html>...</html>)的工具,用它处理普通网页地址会导致WebUri解析出错误的URL,最终只显示字符串而非加载网页。
修正方案
1. 修复初始URL加载
将initialUrlRequest的URL构造方式改为直接使用WebUri或正确的Uri.parse转换:
initialUrlRequest: URLRequest( url: WebUri("https://stackoverflow.com/questions/77757847/uri-cant-be-assigned-to-weburi") ),
或者等价写法:
initialUrlRequest: URLRequest( url: WebUri.uri(Uri.parse("https://stackoverflow.com/questions/77757847/uri-cant-be-assigned-to-weburi")) ),
2. 添加URL变化监听
在InAppWebView参数中添加回调监听URL变化,根据需求选择以下方式:
- 监听页面开始/结束加载的URL:适用于普通页面跳转
- 监听实时URL变化:适用于SPA单页应用的路由切换
示例代码:
// 定义变量存储当前URL String? currentUrl; // 在InAppWebView中添加回调 InAppWebView( initialUrlRequest: URLRequest( url: WebUri("https://stackoverflow.com/questions/77757847/uri-cant-be-assigned-to-weburi") ), onWebViewCreated: (controller) { inAppWebViewController = controller; }, onProgressChanged: (controller, progress) { setState(() { _progress = progress / 100; }); }, // 监听页面开始加载的URL onLoadStart: (controller, url) { setState(() { currentUrl = url?.toString(); }); }, // 监听页面加载完成的URL onLoadStop: (controller, url) { setState(() { currentUrl = url?.toString(); }); }, // 监听实时URL变化(含SPA路由切换) onUrlChanged: (controller, url) { setState(() { currentUrl = url?.toString(); }); }, )
完整修正后的代码片段
body: SingleChildScrollView( child: Center( child: Column(children: [ // 可添加显示当前URL的文本组件 if (currentUrl != null) Text("当前URL: $currentUrl"), SizedBox( height: 200, child: InAppWebView( initialUrlRequest: URLRequest( url: WebUri("https://stackoverflow.com/questions/77757847/uri-cant-be-assigned-to-weburi") ), onWebViewCreated: (controller) { inAppWebViewController = controller; }, onProgressChanged: (controller, progress) { setState(() { _progress = progress / 100; }); }, onLoadStart: (controller, url) { setState(() { currentUrl = url?.toString(); }); }, onLoadStop: (controller, url) { setState(() { currentUrl = url?.toString(); }); }, ), ), ]), ), ),
内容的提问来源于stack exchange,提问作者Akira Yoshimura
相关产品推荐
相关产品推荐

