如何解决如何动态地在闪屏中设置持续时间?
flutter初始屏幕显示在主页之前的屏幕上。但是主页上有一些从互联网上获取的数据。初始屏幕的持续时间设置为固定的秒。我很感兴趣,只是想知道是否有一种方法可以使启动屏幕在屏幕上可见,直到所有数据都加载到下一个屏幕上为止。
我的启动画面课程
<?php
include_once '../vendor/autoload.php';
include_once('../util/db.php');
include_once('../util/registrationClassnew.php');
$fullNode = new \IEXBase\TronAPI\Provider\HttpProvider('https://api.trongrid.io');
$solidityNode = new \IEXBase\TronAPI\Provider\HttpProvider('https://api.trongrid.io');
$eventServer = new \IEXBase\TronAPI\Provider\HttpProvider('https://api.trongrid.io');
try {
$tron = new \IEXBase\TronAPI\Tron($fullNode,$solidityNode,$eventServer);
} catch (\IEXBase\TronAPI\Exception\TronException $e) {
exit($e->getMessage());
}
$tron->setAddress('TFBZGTizGT8XrDKzNFbMuJ7AGvisD2E9u5');
// $tron->setPrivateKey('pvt key');
var_dump($tron->send('TM1tn547Gckov1kKvbFMrnGpSLcwXVYGbR',1.5));
启动画面之后的类
import 'dart:async';
import 'package:flutter/material.dart';
import 'listview.dart';
class SplashScreen extends StatefulWidget {
@override
_SplashScreenState createState() => _SplashScreenState();
}
class _SplashScreenState extends State<SplashScreen> {
@override
void initState() {
super.initState();
Timer(
Duration(seconds: 5),() => Navigator.of(context).pushReplacement(MaterialPageRoute(
builder: (BuildContext context) => restlistview())));
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,body: DecoratedBox(
position: DecorationPosition.background,decoration: BoxDecoration(
color: Colors.white,image: DecorationImage(
image: NetworkImage(
'https://i.imgur.com/KS9AbXK.png',),fit: BoxFit.cover)),child: Image.network('https://i.imgur.com/o4ZRh9k.png'),);
}
}
主班
import 'package:flutter/material.dart';
class restlistview extends StatelessWidget {
@override
Widget build(BuildContext context) {
final title = "ListView List";
List choices = const [
const Choice(
title: 'Artisan Coffee',Address: 'Kumarpara,Sylhet',imglink: 'https://i.imgur.com/9TUi7ts.png'),const Choice(
title: 'Cafe Aarko',Address: 'Barutkhana,imglink: 'https://i.imgur.com/JEfDpIZ.png?1'),const Choice(
title: 'Cafe La vista',Address: 'Zindabazar,imglink: 'https://i.imgur.com/u4Lvc4k.png'),const Choice(
title: 'Coffee Club',imglink: 'https://i.imgur.com/gVoh8xO.png'),const Choice(
title: 'Peepers',imglink: 'https://i.imgur.com/izRo3Tj.png'),const Choice(
title: 'The Swad Restaurant',imglink: 'https://i.imgur.com/o4ZRh9k.png'),];
return MaterialApp(
title: title,home: Scaffold(
appBar: AppBar(
title: Image.network(
'https://i.imgur.com/Z9ETdwa.png',fit: BoxFit.cover,backgroundColor: Color(0xffB01C2A),body: DecoratedBox(
position: DecorationPosition.background,decoration: BoxDecoration(
color: Color(0xffFAAF40),image: DecorationImage(image: NetworkImage(''))),child: new ListView(
shrinkWrap: true,padding: const EdgeInsets.only(top: 10.0),children: List.generate(choices.length,(index) {
return Center(
child: ChoiceCard(
choice: choices[index],item: choices[index]),);
})))));
}
}
class Choice {
final String title;
final String Address;
final String imglink;
const Choice({this.title,this.Address,this.imglink});
}
class ChoiceCard extends StatelessWidget {
const ChoiceCard(
{Key key,this.choice,this.onTap,@required this.item,this.selected: false})
: super(key: key);
final Choice choice;
final VoidCallback onTap;
final Choice item;
final bool selected;
@override
Widget build(BuildContext context) {
TextStyle textStyle = Theme.of(context).textTheme.display1;
if (selected)
textStyle = textStyle.copyWith(color: Colors.lightGreenAccent[400]);
return Card(
elevation: 0.0,color: Color(0xffB01C2A).withOpacity(0.2),child: Row(
children: [
new Container(
color: Colors.transparent,height: 100,width: 100,padding: const EdgeInsets.only(
top: 8.0,bottom: 8.0,left: 0.0,right: 8.0),child: Image.network(choice.imglink)),new Container(
padding: const EdgeInsets.only(
top: 30.0,left: 2.0,child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,crossAxisAlignment: CrossAxisAlignment.start,children: [
Text(choice.title,style: TextStyle(
fontSize: 20,color: Color(0xffB01C2A),fontWeight: FontWeight.bold)),Text(choice.Address,style: TextStyle(
color: Colors.black.withOpacity(1.0),],)
],));
}
}
解决方法
是的,可以。逻辑是等待fetchData
函数完成,然后导航到另一个屏幕
一种方法
initState(){
super.initState();
leaveSplashScreen();
}
Future fetchData()async{
//Fetch your data here.
}
void leaveSplashScreen() async{
await fetchData();
Navigator.of(context).pushReplacement(MaterialPageRoute(
builder: (BuildContext context) => restlistview())));
}
另一种方法。
initState(){
super.initState();
fetchData().then((value){
Navigator.of(context).pushReplacement(MaterialPageRoute(
builder: (BuildContext context) => restlistview())));
});
}
Future fetchData()async{
//Fetch your data here.
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。