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

Flutter项目中POST请求多参数设置及revision_type字符串与整数同步问题问询

解决Flutter中Dropdown字符串转后端所需整数的问题

嘿,这个问题其实很常见——前端要给用户展示友好的字符串选项,但后端需要对应的编码值,我们只需要加一层映射转换就能搞定!

步骤1:创建字符串到整数的映射表

首先定义一个Map来存储你提到的对应关系,这样就能快速把用户选择的字符串转成后端需要的整数:

// 可以把这个映射表放在你的页面类里作为成员变量,方便调用
final Map<String, int> revisionTypeMapping = {
  'videnge': 0,
  'visite technique': 1,
  'assurance véhicule': 2,
  'autre': 3,
};

步骤2:修改API请求的请求体

你原来的body是Map<String, String>类型,但现在要传入整数,所以需要改成Map<String, dynamic>,然后通过映射表把字符串转成整数:

// 修改setRevision函数里的body部分
Map<String, dynamic> body = {
  'revision_type': revisionTypeMapping[revision_type], // 这里完成字符串到整数的转换
  'revision_title': revision_title,
  'revision_date': revision_date,
  'revision_location': revision_location,
  'kilometrage_pour_vidange': kilometrage_pour_vidange,
};

步骤3:确保Dropdown选中值正确传递

你的Dropdown部分已经能正确获取用户选择的字符串(存在status变量里),调用setRevision时直接传这个字符串就行,转换工作交给上面的映射表处理,不用修改Dropdown的现有逻辑。

完整修改后的setRevision函数示例

Future<String> setRevision(String revision_type, String revision_title, String revision_date, String revision_location, String kilometrage_pour_vidange) async { 
  SharedPreferences localStorage = await SharedPreferences.getInstance(); 
  String token = localStorage.getString('access_token'); 
  await checkInternet(); 

  // 定义映射表
  final Map<String, int> revisionTypeMapping = {
    'videnge': 0,
    'visite technique': 1,
    'assurance véhicule': 2,
    'autre': 3,
  };

  Map<String, String> headers = { 
    'Content-type': 'application/json', 
    'Accept': 'application/json', 
    'Authorization': 'Bearer $token' 
  }; 

  // 注意这里改成Map<String, dynamic>以支持整数类型
  Map<String, dynamic> body = { 
    'revision_type': revisionTypeMapping[revision_type], 
    'revision_title': revision_title, 
    'revision_date': revision_date, 
    'revision_location': revision_location, 
    'kilometrage_pour_vidange': kilometrage_pour_vidange, 
  }; 

  try { 
    final response = await http.post(Uri.parse(ApiUtil.SET_REVISION), headers: headers, body: jsonEncode(body)); 
    final responseBody = jsonDecode(response.body); 
    print(responseBody); 
    var data = responseBody['message']; // 这里修正为从响应体取message,不是请求体
    switch (response.statusCode) { 
      case 200: 
        return data;
      default:
        throw Exception('请求失败,状态码:${response.statusCode}');
    }
  } catch(e) {
    rethrow;
  }
}

额外小提醒

你原来的API函数setRevision里混入了Dropdown的UI代码(Row那部分),这是不合理的——API请求函数应该只负责网络逻辑,UI代码要放在Widget的build方法里,记得把这部分代码移到正确的位置哦!

内容的提问来源于stack exchange,提问作者lucky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 20:02:41