Dart拼接含&的字符串异常:仅保留&前内容,求解决
问题分析与解决方案
核心原因
你看到的截断并非代码拼接失败,而是展示环境(如Web视图、FlutterFlow预览面板)将&解析为HTML实体的起始标记,导致&后的内容被当作未闭合的实体而隐藏。实际上代码拼接出的字符串本身是完整的,你可以通过print()或debugPrint()输出到控制台验证——控制台不会解析HTML实体,能看到完整结果。
解决方案:用Uri类规范构建URL
手动拼接URL容易出现这类解析问题,还可能忽略参数的URL编码(比如参数含特殊字符时出错),推荐用Dart内置的Uri类构建:
示例1:基础拼接场景
var someVariable = 'Hello'; var someOtherVariable = 'World'; var uri = Uri( host: 'somedomain', queryParameters: { 'x': someVariable, 'y': someOtherVariable, }, ); var str = uri.toString(); // 控制台输出完整结果:somedomain?x=Hello&y=World
示例2:FlutterFlow中的实际代码修改
Future<String> getEventUrlFromReference(BuildContext context, DocumentReference? eventReference) async { var userId = currentUser?.uid as String; var uri = Uri( scheme: 'https', host: 'somedomain.com', path: '/event', queryParameters: { 'eventReference': eventReference?.id, 'invitedBy': userId, }, ); return uri.toString(); }
额外说明
Uri类会自动处理URL的编码和格式规范,即使参数包含空格、中文等特殊字符也能正确生成合法URL,同时避免&被HTML解析器误处理的问题。
内容的提问来源于stack exchange,提问作者Abdul
相关产品推荐
相关产品推荐

