您好,我是移动应用程序开发人员,对Web开发不太熟悉,我发现在加载波动较大的Web应用程序(例如Gmail加载屏幕)之前,可以找到实现进度指示器的任何方法。 Flutter网站很酷,但是加载应用程序需要花费一些时间。我们可以在此加载期间添加任何指标吗?在flutter中实现的任何代码都将成为flutter应用程序的一部分,并且将无法正常工作,应该有另一种方法来实现这一目标。
答案 0 :(得分:6)
在@Abhilash的帮助下,我得以完成此任务。我从w3schools获得了加载程序代码。
我的project/web/index.html
就是这样。
<html>
<head>
<meta charset="UTF-8">
<title>Title</title>
<script defer src="index.dart.js" type="application/javascript"></script>
<style>
.loading {
display: flex;
justify-content: center;
align-items: center;
margin: 0;
position: absolute;
top: 50%;
left: 50%;
-ms-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
}
.loader {
border: 16px solid #f3f3f3;
border-radius: 50%;
border-top: 16px solid blue;
border-right: 16px solid green;
border-bottom: 16px solid red;
border-left: 16px solid pink;
width: 120px;
height: 120px;
-webkit-animation: spin 2s linear infinite;
animation: spin 2s linear infinite;
}
@-webkit-keyframes spin {
0% {
-webkit-transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(360deg);
}
}
@keyframes spin {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
</style>
</head>
<body>
<div class="loading">
<div class="loader"></div>
</div>
<script src="main.dart.js" type="application/javascript"></script>
</body>
</html>
答案 1 :(得分:4)
您提到的问题
在flutter中实现的任何代码都将成为flutter应用程序的一部分,并且将无法正常工作,...
我假设您尝试为Android或IOS添加启动屏幕方法。由于flutter-web只是一个index.html
和几个js文件(例如main.dart.js
),因此您应该尝试使用CSS
加载动画技巧。由于您没有共享任何代码,因此我没有编写任何代码,但是以下是我的方法,如红色订书机video所述。他/她好意地提供了很多基于CSS
的动画here以及为此的代码笔实现。
因此,下面是我在flutter_web_project\web\index.html
文件中的步骤。
span
的正文中添加index.html
元素以显示css
动画本身。div
包装器,将跨度动画放置在index.html
中。onLoad
事件,并从页面中删除div
元素或按照视频中的说明淡出它。答案 2 :(得分:2)
除了回答@Shahzad Akram之外,您还应该删除loading
div
,因为在Safari浏览器中,这可能会导致闪烁。因此,在第一个屏幕中,您需要实现以下代码(例如,在initState
方法中):
import 'package:universal_html/html.dart'
...
@override
void initState() {
super.initState()
// Remove `loading` div
final loader = document.getElementsByClassName('loading');
if(loader.isNotEmpty) {
loader.first.remove();
}
}
P.S。要获得出色的加载程序,您可以访问loading.io。
答案 3 :(得分:2)
如果你只想用JS删除加载div,请使用此代码
fig, ax = plt.subplots()
plt.scatter(y,x)
ax,fit = plot_odr(y, x, ax)
注意它假定 loader 是一个 Error: Package: libzip5-1.8.0-2.el7.remi.x86_64 (remi-safe)
Required: libzstd(x86-64) >= 1.3.6
Available: libzstd-1.3.4-1.el7.x86_64 (mariadb-main)
libzstd(x86-64) = 1.3.4-1.el7
Error: Package: libzip5-1.8.0-2.el7.remi.x86_64 (remi-safe)
Required: libzstd(x86-64) >= 1.3.6
Install: libzstd-1.3.4-1.el7.x86_64 (mariadb-main)
libzstd(x86-64) = 1.3.4-1.el7
标签
答案 4 :(得分:0)
除了@Shahzad 和@BambinoUA 的回答,我还需要为 main.dart.js 脚本标签添加 defer 关键字。
<script defer src="main.dart.js" type="application/javascript"></script>
以下是我需要这样做的场景:
在这种情况下,在下载整个脚本之前,只能看到空白屏幕。然后动画仅可见 0.5 秒,之后立即加载颤动小部件。因此未能达到加载动画的目的。这不会发生在本地测试中。
我也尝试将动画 div 放在所有脚本之前,但没有帮助。