Flutter 使用Dart中的转换在屏幕之间导航
我有两个屏幕,我想通过自定义转换在它们之间导航(使用名为Flutter 使用Dart中的转换在屏幕之间导航,flutter,dart,Flutter,Dart,我有两个屏幕,我想通过自定义转换在它们之间导航(使用名为flatter\u spinkit)的库)。 如何从第1页转到第2页,显示自定义加载屏幕2-3秒? 这是我的密码: import 'package:flutter/material.dart'; import 'package:flutter_spinkit/flutter_spinkit.dart'; main() { runApp(MaterialApp( home: Page1(), )); } class Pag
flatter\u spinkit
)的库)。
如何从第1页转到第2页,显示自定义加载屏幕2-3秒?
这是我的密码:
import 'package:flutter/material.dart';
import 'package:flutter_spinkit/flutter_spinkit.dart';
main() {
runApp(MaterialApp(
home: Page1(),
));
}
class Page1 extends StatelessWidget {
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: Center(
child: RaisedButton(
child: Text('Go!'),
onPressed: () {
Navigator.of(context).push(_createRoute());
},
),
),
);
}
}
Route _createRoute() {
return PageRouteBuilder(
// transitionDuration: Duration(seconds: 1),
transitionsBuilder: (context, animation, animationTime, child) {
child = Scaffold(
backgroundColor: Colors.purple[700],
body: Center(
child: SpinKitFadingCube(
color: Colors.white,
size: 100.0,
),
),
);
return ScaleTransition(
scale: animation,
child: child,
alignment: Alignment.center,
);
},
pageBuilder: (context, animation, animationTime) => Page2(),
);
}
class Page2 extends StatelessWidget {
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: Center(
child: Text('Page 2'),
),
);
}
}
我终于明白你的意思了。也许您只需要更改
transitionsBuilder
来检查动画是否完成。我还更改了SpinKitFadingCube
的名称,因为它不应替换原始的子小部件
transitionsBuilder: (context, animation, animationTime, child) {
final loading= Scaffold(
backgroundColor: Colors.purple[700],
body: Center(
child: SpinKitFadingCube(
color: Colors.white,
size: 100.0,
),
),
);
if(animation.isCompleted){
return child;
}else{
return loading;
}
},
从一个屏幕切换到另一个屏幕时设置动画 您的
onPressed
或onTap
方法:
InkWell(
onTap: () {
Navigator.of(context).push(_createRoute());
},
)
然后在\u createRoute
方法中
Route _createRoute() {
return PageRouteBuilder(
transitionDuration: Duration(seconds: 2), //You can change the time here
pageBuilder: (context, animation, secondaryAnimation) => SecondScreen(),
transitionsBuilder: (context, animation, secondaryAnimation, child) {
var begin = Offset(1.0, 0.0);
var end = Offset.zero;
var curve = Curves.easeInCirc;
var tween = Tween(begin: begin, end: end).chain(CurveTween(curve: curve));
return SlideTransition(
position: animation.drive(tween),
child: child,
);
},
);
}
使用持续时间(秒:2)
可以将时间从微秒
,秒
,分钟
,小时
还有许多其他曲线动画,如Curves.easeincrc
,可以找到
或
如果您想使用flatter\u Spinkit
来显示一种动画加载指示器,那么这就是它的工作方式
添加依赖项:
dependencies:
flutter_spinkit: "^4.1.2"
然后将其导入屏幕:
import 'package:flutter_spinkit/flutter_spinkit.dart';
然后,您可以在需要的地方使用flatter Spinkit Loader
,如:
final spinkit = SpinKitFadingCircle(
itemBuilder: (BuildContext context, int index) {
return DecoratedBox(
decoration: BoxDecoration(
color: index.isEven ? Colors.red : Colors.green,
),
);
},
);
我认为这不是解决我问题的办法。在第1页我有一个按钮,当我点击它时,我想进入第2页,但有一个2秒的过渡。对于这个转换,我想使用
flatter\u spinkit
library中的动画。flatter spinkit是一个加载程序/进度条。你想要过渡还是加载器?我第一次没有注意到PageRouteBuilder。transitionsBuilder
通常用于两页过渡(通常定义第二页的缩放或幻灯片)。如果你不立即挖掘加载的页面,你可以返回你想要的页面。当我从Screen1导航到Screen2时,如何显示这个动画?这是来自Flatter网站的复制粘贴。我不知道该怎么做,当我从屏幕1导航到屏幕2时,显示颤振Spinkit动画2秒钟。如何编辑函数\u createRoute
以使用Spinkit动画而不是SlideTransition?