Flutter 有没有办法从一个屏幕过渡到另一个屏幕,不使用任何事件,只使用时间?
假设我有两页:- 测试员1.省道Flutter 有没有办法从一个屏幕过渡到另一个屏幕,不使用任何事件,只使用时间?,flutter,flutter-animation,Flutter,Flutter Animation,假设我有两页:- 测试员1.省道 import 'package:flutter/material.dart'; import 'package:gelijk_spel/Testers2.dart'; class Testers1 extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( bo
import 'package:flutter/material.dart';
import 'package:gelijk_spel/Testers2.dart';
class Testers1 extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Center(
child: IconButton(
icon: Hero(
tag: 'elderimg',
child: Image.asset(
'assets/Images/elder.png', width: 100, height: 100,),
),
onPressed: () {
Navigator.push(context,
MaterialPageRoute(
builder: (context) => Testers2()
)
);
}
),
),
),
);
}
}
还有测试员2.飞镖
import 'package:flutter/material.dart';
class Testers2 extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Screen2'),
),
body: Column(
children: <Widget>[
Text('Placeholder0'),
Hero(
tag: 'elderimg',
child: Image.asset('assets/Images/elder.png',width: 100, height: 100,)
),
Text('Placeholder1'),
],
),
),
);
}
}
导入“包装:颤振/材料.省道”;
类Testers2扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
家:脚手架(
appBar:appBar(
标题:文本(“屏幕2”),
),
正文:专栏(
儿童:[
文本(“占位符0”),
英雄(
标签:“elderimg”,
子对象:Image.asset('assets/Images/elder.png',宽度:100,高度:100,)
),
文本(“占位符1”),
],
),
),
);
}
}
我希望能够从Tester1过渡到Tester2,但不必在一段时间后按顺序单击屏幕或任何事件。如何实现这一点?是的,您必须在第一页的init()函数中使用Future.delayed() 如下所示(将此添加到第一页):
Future initState(){
super.initState();
//用所需时间替换1000
延迟(持续时间(毫秒:1000),(){
Navigator.push(当前上下文,
MaterialPackageRoute(builder:(context)=>Testers2());
},
});
}
是的,您必须在第一页的init()函数中使用Future.delayed()
如下所示(将此添加到第一页):
Future initState(){
super.initState();
//用所需时间替换1000
延迟(持续时间(毫秒:1000),(){
Navigator.push(当前上下文,
MaterialPackageRoute(builder:(context)=>Testers2());
},
});
}
一种可能的方法是使用计时器和状态窗口小部件
,这样您就可以设置一个带有触发器的计时器,该触发器将在计时器用完并触发时立即运行导航代码
以下是代码示例:
class Testers1扩展了StatefulWidget{
@凌驾
_Testers1State createState()=>\u Testers1State();
}
类_Testers1State扩展状态{
小部件构建(构建上下文){
返回脚手架(
正文:Container()
);
}
@凌驾
void initState(){
super.initState();
计时器(持续时间(秒:10),(){
导航器。推(
context,materialpage(builder:(context)=>Testers2());
});
}
}
class Testers2扩展了无状态小部件{
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“屏幕2”),
),
正文:专栏(
儿童:[
文本(“占位符0”),
文本(“占位符1”),
],
),
);
}
}
注意:Timer
来自'dart:async'
一种可能的方法是使用Timer
和StatefulWidget
,这样您就可以设置一个带有触发器的计时器,该触发器将在计时器用完并触发时立即运行导航代码
以下是代码示例:
class Testers1扩展了StatefulWidget{
@凌驾
_Testers1State createState()=>\u Testers1State();
}
类_Testers1State扩展状态{
小部件构建(构建上下文){
返回脚手架(
正文:Container()
);
}
@凌驾
void initState(){
super.initState();
计时器(持续时间(秒:10),(){
导航器。推(
context,materialpage(builder:(context)=>Testers2());
});
}
}
class Testers2扩展了无状态小部件{
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“屏幕2”),
),
正文:专栏(
儿童:[
文本(“占位符0”),
文本(“占位符1”),
],
),
);
}
}
注意:Timer
来自'dart:async'
我的第一页中没有init()
函数,因此它也找不到super.initState()
。也找不到currentContext
。很抱歉,我还是新手,我的第一页中没有init()
函数,因此它也找不到super.initState()
。也找不到currentContext
。抱歉,我还是个新手
Future<void> initState() {
super.initState();
//replace 1000 with your time required
Future.delayed(Duration(milliseconds: 1000), () {
Navigator.push(currentContext,
MaterialPageRoute(builder: (context) => Testers2()));
},
});
}