防止flutter web截断url路径#
Posted
技术标签:
【中文标题】防止flutter web截断url路径#【英文标题】:Prevent flutter web cuts off the url path # 【发布时间】:2020-05-21 09:06:07 【问题描述】:我的 Flutter 网站从另一个网站重定向,格式如下:
http://example.com/#id_token=abc
我想像这样在initState
中阅读#id_token=abc
中的信息
@override
void initState()
super.initState();
var url = html.window.location.href;
if (url.contains('id_token='))
// read data
但是flutter站点在转到initState
之前会自动重新加载并切断#id_token
部分(调试时本地主机相同),新的url是
http://example.com/#/
这使我的代码无法正确读取id_token
信息
看起来很奇怪,我该如何防止这种情况发生?
P/s:它适用于像 http://example.com?id_token=abc 这样的 url 参数格式,但 我无法控制其他网站 支持这种格式
【问题讨论】:
这是因为 Flutter 使用了基于哈希的导航。如果该页面不存在,则将其替换为 root uri/#/
。看看:github.com/flutter/flutter/issues/33245
@MisirJafarov 所以基本上没有办法处理我的案子?
我没有在 web 上使用过 Flutter。您可以尝试实现 url 导航(如果还没有),然后检查哈希是否有效。 reddit.com/r/FlutterDev/comments/ed5mq9/…
我在使用带有 gotrue 的 supabase 时遇到了同样的问题,它返回一个 baseUrl/#accessToken url。 Flutter 只是削减了 # 之后的所有内容,在移动设备和 Web 上也是如此。我正在使用导航器 2.0/路由器。将网络上的 url 策略更改为不使用 baseUrl/#/ 无济于事。 @R4j 你找到解决办法了吗?
@nstrelow 抱歉迟到了,请在下面查看我的答案
【参考方案1】:
我在颤振方面找不到任何解决方案。 所以我通过使用空白页并使用 javascript 从 #id_token=abc
读取数据来解决我的问题,然后使用类似 index.html?id_token=abc
的参数导航到颤动主页
以下是页面内容:
<body>
<script>
document.addEventListener('DOMContentLoaded', function()
console.log('document is ready');
var url = window.location.href;
console.log(url);
if(url.indexOf('#id_token=') != -1)
var idToken = url.split('#id_token=')[1];
console.log('idToken ' + idToken);
window.location.replace("index.html?id_token=" + idToken);
else
console.log('there is no id token');
);
</script>
</body>
<div class="center-screen">Waiting...</div>
【讨论】:
谢谢。这很奇怪。让它在 Web 上工作没有问题。它切断的地方是 android 和 ios,我已经提出了这个问题:github.com/flutter/flutter/issues/80666以上是关于防止flutter web截断url路径#的主要内容,如果未能解决你的问题,请参考以下文章