Flutter_downloader下载持续失败 报MalformedURLException异常
问题根因
核心报错java.net.MalformedURLException: no protocol的触发原因非常明确:传入flutter_downloader原生层的URL字符串首尾额外带了单引号。
从异常栈打印的错误入参看,实际传给Java URL构造方法的参数是'https://tooxclusive.com/wp-content/uploads/2022/03/Asake-Sungba.mp3',字符串第一个字符是单引号而非协议头起始字符,Java底层解析时无法识别出https协议段,直接抛出异常。
你代码注释里标注的URL本身是合法的,问题出在_url变量的实际赋值:大概率是接口返回值自带单引号、JSON解析时错误拼接了引号、或者字符串处理时误加了引号包裹,和插件本身逻辑无关。
排查方法
- 在调用
FlutterDownloader.enqueue前打印_url的实际内容,用边界标记符包裹就能快速看出有没有多余字符:
// 用>>> <<<包裹url,首尾多余字符一眼可见 debugPrint('待传入下载url: >>>$_url<<<');
如果打印结果是>>>'https://xxx.mp3'<<<,即可确认是多余单引号导致的问题。
- 额外检查url首尾是否存在不可见空格、换行符,这类字符也可能导致URL解析失败。
修复方案
传入下载方法前先清洗URL字符串,移除首尾多余的引号、空白字符即可:
// 去除首尾空白,再移除首尾的单引号 final validUrl = _url.trim().replaceFirst(RegExp(r"^'"), '').replaceFirst(RegExp(r"'$"), ''); await FlutterDownloader.enqueue( url: validUrl, savedDir: '/storage/emulated/0/Download', showNotification: true, saveInPublicStorage: true, );
如果业务场景中URL可能被双引号包裹,调整正则同时匹配首尾的单/双引号即可。
修复后重新触发下载,查看日志中DownloadWorker打印的url参数不再带多余引号,下载流程会正常执行。
内容的提问来源于stack exchange,提问作者mbakabilal
相关产品推荐
相关产品推荐

