Flutter Web部署后url_launcher与go_router异常问题求助
Flutter Web部署后url_launcher与go_router失效问题修复
一、url_launcher外部链接拼接服务器域名问题
问题原因
你构造Uri的方式存在错误:将完整的域名+路径赋值给path参数,导致生成的Uri格式异常(如https:///www.instagram.com/myinstaid),Web环境下浏览器会将其解析为当前域名的子路径,最终出现域名拼接的错误。
修复方案
直接使用Uri.parse()解析完整外部链接,或正确拆分域名与路径:
修改后的代码
try { final Uri weburl = Uri.parse(url); // 直接解析完整链接 if (await canLaunchUrl(weburl)) { await launchUrl( weburl, mode: LaunchMode.inAppWebView ); } } on PlatformException catch (e) { debugPrint("PlatformException launchInBrowser : $e"); } on Exception catch (e) { debugPrint("Exception launchInBrowser : $e"); }
若你的url不含scheme(如www.instagram.com/myinstaid),也可手动拆分构造:
final Uri weburl = Uri( scheme: 'https', host: 'www.instagram.com', path: '/myinstaid', );
二、go_router直接访问路由显示“未找到”问题
问题原因
Flutter Web属于单页应用(SPA),所有路由由客户端的go_router管理。直接访问www.example.com/dsc时,服务器会尝试寻找对应物理文件,找不到则返回404。
修复方案
需在服务器端配置重定向规则,将所有非静态资源的请求转发到index.html,交由Flutter客户端处理路由。
常见服务器配置示例
- Nginx:在配置文件中添加规则
location / { try_files $uri $uri/ /index.html; }
- Apache:创建
.htaccess文件
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.html$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.html [L] </IfModule>
- Firebase Hosting:在
firebase.json中配置
{ "hosting": { "public": "build/web", "rewrites": [ { "source": "**", "destination": "/index.html" } ] } }
同时确认go_router中URL_DSC等常量值正确(应为dsc而非/dsc,子路由path无需开头斜杠)。
内容的提问来源于stack exchange,提问作者Qutbuddin Bohra
相关产品推荐
相关产品推荐

