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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 14:05:39