周末也不断更,是本头条的亮点,坚持365天都学习到头条,「技术刚刚好」能做到就是每天更新至少一篇Flutter文章,如果不想错误更新,你应该怎么做?你懂的。
本头条核心宗旨
欢迎来到「技术刚刚好」头条,本头条是个人维护,每天至少更新一篇Flutter技术文章,实时为大家播报Flutter最新消息。如果你刚好也在关注Flutter这门技术,那就跟我一起学习进步吧,你的赞,收藏,转发是对我个人最大的支持,维护不易,欢迎关注。
技术刚刚好经历
近几年,移动端跨平台开发技术层出不穷,从Facebook家的ReactNative,到阿里家WEEX,前端技术在移动端跨平台开发中大展身手,技术刚刚好作为一名Android开发,经历了从Reactjs到Vuejs的不断学习。而在2018年,我们的主角变成了Flutter,这是Goolge开源的一个移动端跨平台解决方案,可以快速开发精美的移动App。希望跟大家一起学习,一起进步!
本文核心要点
今天「技术刚刚好」给大家带来一篇值得学习到文章,flutter动画实现,项目跳转到一些逻辑,有动画、有跳转、有ListView的学习,我相信大家应该能喜欢,如果喜欢我就动动手指关注我吧,谢谢大家到支持。
main.dart类的具体实现
//导入包 import 'package:flutter/material.dart'; import 'screens/homescreen.dart'; //启动类,每个类都有的 void main() => runApp(MyApp()); //一个StatelessWidget组件 class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( //项目的标题 title: 'Flutter Demo', //当为true时,在debug模式下显示右上角的debug字样的横幅,false即为不显示 debugShowCheckedModeBanner: false, //主题样式 theme: ThemeData( primarySwatch: Colors.blue, ), //首页页面 home: new HomePage(), ); } }
homescreen.dart页面代码
//导入包 import 'package:flutter/material.dart'; import 'material_animation.dart'; import 'hero_animations.dart'; import 'package:flutter_screen_an/slide_animations/slide_animation.dart'; class HomePage extends StatefulWidget { @override _HomePageState createState() => _HomePageState(); } class _HomePageState extends State<HomePage> { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text("屏幕动画学习"), ), body: ListView( children: <Widget>[ ListTile( leading: Icon(Icons.ac_unit), title: Text("Hero动画学习"), onTap: () { Navigator.push(context, MaterialPageRoute(builder: (context) => HeroAnimation())); }, ), ListTile( leading: Icon(Icons.ac_unit), title: Text("右到左动画"), onTap: () { Route r = SlideLeftAnimation( builder: (context) => MaterialAnimation(), ); Navigator.push(context, r); }, ), ListTile( leading: Icon(Icons.ac_unit), title: Text("左到右动画"), onTap: () { Route r = SlideRightAnimation( builder: (context) => MaterialAnimation(), ); Navigator.push(context, r); }, ), ListTile( leading: Icon(Icons.ac_unit), title: Text("从上到下动画"), onTap: () { Route r = SlideDownAnimation( builder: (context) => MaterialAnimation(), ); Navigator.push(context, r); }, ), ListTile( leading: Icon(Icons.ac_unit), title: Text("从下到上动画"), onTap: () { Route r = SlideUpAnimation( builder: (context) => MaterialAnimation(), ); Navigator.push(context, r); }, ), ListTile( leading: Icon(Icons.ac_unit), title: Text("持续时间(5秒)的动画"), onTap: () { Route r = SlideTimeAnimation(widget: MaterialAnimation()); Navigator.push(context, r); }, ), ListTile( leading: Icon(Icons.ac_unit), title: Text("弹跳动画"), onTap: () { Route r = BounceAnimation(widget: MaterialAnimation()); Navigator.push(context, r); }, ) ], ), ); } }
slide_animation.dart具体到动画实现类
import 'package:flutter/material.dart'; //具体到动画实现页面 class SlideUpAnimation extends MaterialPageRoute { SlideUpAnimation({WidgetBuilder builder, RouteSettings routeSettings}) : super(builder: builder, settings: routeSettings); @override Widget buildTransitions(BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation, Widget child) { Animation<Offset> costum = Tween<Offset>(begin: Offset(0.0, 1.0), end: Offset(0.0, 0.0)) .animate(animation); return SlideTransition(position: costum, child: child); } } //从上到下动画 class SlideDownAnimation extends MaterialPageRoute { SlideDownAnimation({WidgetBuilder builder, RouteSettings routeSettings}) : super(builder: builder, settings: routeSettings); @override Widget buildTransitions(BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation, Widget child) { Animation<Offset> costum = Tween<Offset>(begin: Offset(0.0, -1.0), end: Offset(0.0, 0.0)) .animate(animation); return SlideTransition(position: costum, child: child); } } //右到左动画 class SlideLeftAnimation extends MaterialPageRoute { SlideLeftAnimation({WidgetBuilder builder, RouteSettings routeSettings}) : super(builder: builder, settings: routeSettings); @override Widget buildTransitions(BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation, Widget child) { Animation<Offset> costum = Tween<Offset>(begin: Offset(1.1, 0.0), end: Offset(0.0, 0.0)) .animate(animation); return SlideTransition(position: costum, child: child); } } class SlideRightAnimation extends MaterialPageRoute { SlideRightAnimation({WidgetBuilder builder, RouteSettings routeSettings}) : super(builder: builder, settings: routeSettings); @override Widget buildTransitions(BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation, Widget child) { Animation<Offset> costum = Tween<Offset>(begin: Offset(-1.1, 0.0), end: Offset(0.0, 0.0)) .animate(animation); return SlideTransition(position: costum, child: child); } } class SlideTimeAnimation extends PageRouteBuilder { Widget widget; SlideTimeAnimation({this.widget}) : super( pageBuilder: (BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation) { return widget; }, transitionDuration: Duration(milliseconds:1000 ), transitionsBuilder: (BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation, Widget widget) { Animation<Offset> costom = Tween<Offset>(begin: Offset(1.0, 0.0), end: Offset(0.0, 0.0)) .animate(animation); return SlideTransition(position: costom, child: widget); }); } class BounceAnimation extends PageRouteBuilder { Widget widget; BounceAnimation({this.widget}) : super( pageBuilder: (BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation) { return widget; }, transitionDuration: Duration(milliseconds:2000 ), transitionsBuilder: (BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation, Widget widget) { Animation<Offset> costom = Tween<Offset>(begin: Offset(1.0, 1.0), end: Offset(0.0, 0.0)) .animate(CurvedAnimation(parent: animation, curve: Curves.bounceIn)); return SlideTransition(position: costom, child: widget); }); }
hero_animations.dart动画类
import 'package:flutter/material.dart'; import 'hero_detail.dart'; class HeroAnimation extends StatelessWidget { Widget build(BuildContext context) { var timeDilation = 5.0; // 1.0 means normal animation speed. return Scaffold( appBar: AppBar( title: const Text('基本Hero动画'), ), body: Column( children: <Widget>[ Padding( padding: const EdgeInsets.all(8.0), child: ListTile( title: Text("点击跳转进入详情页面"), onTap: () { Navigator.push(context, MaterialPageRoute(builder: (context) => HeroDetail())); }, leading: Hero( tag: "asap", child: Image.network( "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcT63fUqRPxwETd5YTf-l4_l828QPBOXvIBHR7m2Z7uczZGcVT6Q", width: 50, ), ), ), ), ], ), ); } }
hero_detail.dart 详情页面
import 'package:flutter/material.dart'; class HeroDetail extends StatefulWidget { @override HeroDetailState createState() { return new HeroDetailState(); } } class HeroDetailState extends State<HeroDetail> { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('Asap HipHop'), ), body: Center( child: Column( crossAxisAlignment: CrossAxisAlignment.center, children: <Widget>[ Padding( padding: const EdgeInsets.all(8.0), child: Hero( tag: "asap", child: Image.network( "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcT63fUqRPxwETd5YTf-l4_l828QPBOXvIBHR7m2Z7uczZGcVT6Q"), ), ), Text( "技术刚刚好", style: TextStyle( fontSize: 25.0, fontWeight: FontWeight.bold, color: Colors.orangeAccent), ), Card( child: Padding( padding: const EdgeInsets.all(8.0), child: Text( "欢迎来到「技术刚刚好」头条,本头条是个人维护,每天至少更新一篇Flutter技术文章,实时为大家播报Flutter最新消息。如果你刚好也在关注Flutter这门技术,那就跟我一起学习进步吧,你的赞,收藏,转发是对我个人最大的支持,维护不易,欢迎关注。", style: TextStyle(fontSize: 18, color: Colors.grey), ), ), ), Padding( padding: EdgeInsets.all(8.0), ), Row( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Icon(Icons.favorite), Padding( padding: EdgeInsets.all(8.0), ), Icon(Icons.tablet_mac) ], ) ], ), ), ); } }
总结
这篇文章还是很基础到知识,简单实用。学习了Flutter到ListView组件,看了以后就知道一个列表应该怎么写了,还有路由功能,就是页面跟页面之间到跳转方法。再就是一些简单到动画运用学习,好了周末了,也算是给大家到一篇周末福利。
谢谢观看技术刚刚好头条文章,本头条是个人维护,每天至少更新一篇Flutter技术文章,实时为大家播报Flutter最新消息。如果你刚好也在关注Flutter这门技术,那就跟我一起学习进步吧,你的赞,收藏,转发是对我个人最大的支持,维护不易,欢迎关注。