Flutter WebView:loadRequest的body传参无效,如何正确传参?
问题解决:WebView传递参数到服务器为空的处理
方案1:GET方式传递参数(直接拼接URL)
如果服务器支持从URL查询参数获取值,直接把参数拼在URI末尾即可,这是最直接的方式:
Uri uri = Uri.parse('http://localhost:8080?a=1&b=2'); WebViewController controller = WebViewController() ..loadRequest(uri); WebViewWidget(controller: controller);
服务器可直接从URL的查询字符串中读取a和b的参数值。
方案2:POST方式传递参数(需配置请求头与请求方法)
如果必须使用POST请求,你当前的代码存在两个问题:未指定POST请求方法、缺少请求头让服务器识别参数格式。修复代码如下:
Uri uri = Uri.parse('http://localhost:8080'); var body = Uint8List.fromList(utf8.encode('a=1&b=2')); WebViewController controller = WebViewController() ..loadRequest( uri, body: body, method: WebViewRequestMethod.post, // 显式指定POST方法 headers: {'Content-Type': 'application/x-www-form-urlencoded'}, // 告诉服务器参数格式 ); WebViewWidget(controller: controller);
关键说明:
loadRequest默认使用GET方法,即使传了body,GET请求的body通常会被服务器忽略,所以必须显式指定method为POST。- 添加
Content-Type请求头为application/x-www-form-urlencoded,让服务器按照表单编码格式解析请求体中的参数。
内容的提问来源于stack exchange,提问作者eastwater
相关产品推荐
相关产品推荐

