Flutter API请求参数转义问题:如何避免点被转义为%3A
在Flutter中发送带点格式时间参数的API请求
你的问题核心是:想要传递02.30这类带点的时间参数,但实际请求里参数值变成了02%3A30(也就是冒号:被URL编码后的结果),本质是你构造的参数值里实际是冒号,而非点。以下是解决方法:
1. 直接构造带点的参数字符串
如果不需要从时间对象转换,直接将参数值设为带点的字符串即可:
// 构造请求参数 Map<String, String> queryParams = { 'workingHoursFrom': '02.30', 'workingHoursTo': '03.00', }; // 拼接成完整URL并发起请求 Uri uri = Uri.http('3.237.223.130', '/careWorker/get-parttime-jobList', queryParams); var response = await http.get(uri);
2. 从时间对象格式化出带点的字符串
如果是从DateTime对象生成时间参数,确保格式化时使用点作为分隔符:
首先在pubspec.yaml中添加intl依赖:
dependencies: intl: ^0.18.1
然后在代码中格式化时间:
import 'package:intl/intl.dart'; import 'package:http/http.dart' as http; void fetchJobs() async { // 示例时间对象 DateTime start = DateTime(2024, 5, 20, 2, 30); DateTime end = DateTime(2024, 5, 20, 3, 0); // 用HH.mm格式生成带点的字符串 String startStr = DateFormat('HH.mm').format(start); // 结果为"02.30" String endStr = DateFormat('HH.mm').format(end); // 结果为"03.00" Map<String, String> queryParams = { 'workingHoursFrom': startStr, 'workingHoursTo': endStr, }; Uri uri = Uri.http('3.237.223.130', '/careWorker/get-parttime-jobList', queryParams); var response = await http.get(uri); }
3. 排查自动替换逻辑
检查代码中是否存在将冒号替换为点(或反向)的工具类、格式化函数,确保没有错误的字符串替换操作导致参数值异常。
内容的提问来源于stack exchange,提问作者Vignesh Jagannadhan
相关产品推荐
相关产品推荐

