Flutter无法向Flask服务器发送POST请求问题求助
Flutter向Flask发送表单数据无响应的问题排查与解决
核心问题点
- 参数命名不匹配:Flutter发送的参数是
location_premium、log_premium,但Flask代码中尝试获取的是LocationPremium、LogPremium,大小写和命名格式完全不一致,导致Flask无法读取到对应参数。 - Flask启动逻辑冗余:
app.run(debug=True)已启动服务器,后续的app.run(host='0.0.0.0', port=5000)不会执行,服务器仅绑定在127.0.0.1,若Flutter运行在模拟器/真机上,无法通过该地址访问服务。 - Flutter端空值风险:
locationPremium是可选参数,但代码直接强制解包log(locationPremium!),若传入null会导致Flutter端报错,无法发送请求。
修复步骤
1. 统一参数命名(Flask端)
修改Flask的参数获取逻辑,与Flutter发送的参数名保持一致:
@app.route('/predict',methods=['POST']) def predictor(): area=int(request.form['area']) bedrooms=int(request.form['bedrooms']) psf=float(request.form['psf']) feature_score=int(request.form['feature_score']) LocationPremium=float(request.form['location_premium']) # 修正参数名 LogPremium=float(request.form['log_premium']) # 修正参数名 query=np.array([[area,bedrooms,psf,feature_score,LocationPremium,LogPremium]]) result= model.predict(query)[0] return jsonify({'prediction':str(result)})
2. 修正Flask启动代码
合并启动配置,确保服务器绑定到允许外部访问的地址:
if __name__ == '__main__': app.run(debug=True, host='0.0.0.0', port=5000) # 合并启动参数
3. 处理Flutter端空值安全
在计算log_premium前先判断参数是否为空,避免运行时错误:
map['location_premium'] = locationPremium; if (locationPremium != null) { map['log_premium'] = log(locationPremium); } else { throw Exception('locationPremium 不能为空'); }
4. 确保Flutter访问地址正确
- Android模拟器:将
uri改为http://10.0.2.2:5000/predict(模拟器将该地址映射到本地主机) - iOS模拟器:可直接使用
http://localhost:5000/predict - 真机:确保手机与电脑在同一局域网,使用电脑的局域网IP(如
http://192.168.x.x:5000/predict)
内容的提问来源于stack exchange,提问作者R3hankhan
相关产品推荐
相关产品推荐

