You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter无法向Flask服务器发送POST请求问题求助

Flutter向Flask发送表单数据无响应的问题排查与解决

核心问题点

  1. 参数命名不匹配:Flutter发送的参数是location_premium、log_premium,但Flask代码中尝试获取的是LocationPremium、LogPremium,大小写和命名格式完全不一致,导致Flask无法读取到对应参数。
  2. Flask启动逻辑冗余:app.run(debug=True)已启动服务器,后续的app.run(host='0.0.0.0', port=5000)不会执行,服务器仅绑定在127.0.0.1,若Flutter运行在模拟器/真机上,无法通过该地址访问服务。
  3. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 22:24:23