Sha*_*ram 14 flutter flutter-web
嗨,我是一名移动应用程序开发人员,对 Web 开发不太熟悉,在加载 Flutter Web 应用程序(如 Gmail 加载屏幕)之前,我正在寻找任何实现进度指示器的方法。Flutter web 很酷,但加载应用程序需要一些时间。我们可以为此加载持续时间添加任何指标吗?在 flutter 中实现的任何代码都将是 flutter app 的一部分,它不会工作,应该有另一种方法来实现这一点。
Sha*_*ram 21
在@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>Run Code Online (Sandbox Code Playgroud)
在你的问题中你提到
在 flutter 中实现的任何代码都将是 flutter app 的一部分,它不会工作,...
我假设您尝试为 android 或 IOS 添加启动画面方法。由于 flutter-web 只是一个index.html和几个 js 文件(例如,main.dart.js),您或许应该尝试CSS加载动画技巧。由于您没有共享任何代码,因此我没有编写任何代码,但以下是我的方法,正如这个红色订书机视频所解释的那样。他/她在这里提供了许多CSS基于动画的动画以及为此的 codepen 实现。
因此,以下将是我在flutter_web_project\web\index.html文件中的步骤。
span在 的主体中添加一个元素index.html以显示css动画本身。div包装器以在您的index.html.onLoad窗口的事件并div从页面中删除元素或按照视频中的描述将其淡出。Adam 的答案将在实际加载 flutter 之前删除 loader。
我发现这个脚本是最完整的答案:
<html>
<head>
<style>
.loading {
display: flex;
flex-flow: column;
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: 8px solid #f3f3f3;
border-radius: 50%;
border-top: 8px solid #00AD87;
border-right: 8px solid #C30E48;
border-bottom: 8px solid #00AD87;
border-left: 8px solid #C30E48;
width: 60px !important;
height: 60px !important;
-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>
<!-- First time loading -->
<div class="loading">
<div class="loader"></div>
</div>
<!-- Ensure first time loading progress is gone after app loads -->
<script>
window.addEventListener("flutter-first-frame", function() {
var element = document.getElementsByClassName("loading");
element[0].parentNode.removeChild(element[0]);
});
</script>
<script defer src="main.dart.js" type="application/javascript"</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
除了@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();
}
}
Run Code Online (Sandbox Code Playgroud)
PS 对于漂亮的加载器,您可以访问loading.io。
| 归档时间: |
|
| 查看次数: |
4447 次 |
| 最近记录: |