动手编写你的第一个 Flutter 应用
Flutter 应用运行起来比 RN 流畅、编译快、热加载快,所以开发和调试的效率非常高。本文将着重给大家讲解下 Flutter 官方默认创建的应用,然后编写一个简单的 Flutter 尝鲜小应用。
本文将主要介绍:
用 Flutter 创建一个默认应用 Flutter 默认应用的分析讲解 Flutter 编写一个小 Demo
用 Flutter 创建一个默认应用
本文的开发工具 IDE 用的是 Visual Studio Code,当然也可以使用 Android Studio 进行开发。关于用 Visual Studio Code 创建新的 Flutter 项目前面讲过,这里就不再重复讲解了。
默认新建的 Flutter 项目都是这个简单的实例,运行效果如下图所示:
点击 + 号 FloatingActionButton,中间的 Text Widget 进行累加更新数字统计计数。整体功能还是很简单的,主要涉及内容为控件点击事件、Text Widget 的显示、 setState(() {...}) 更新内容等。
那么接下来通过代码结合注释讲解方式来看下这个官方实例 main.dart 的实现流程:
import 'package:flutter/material.dart';//main.dart为应用入口dart类,里面void main()方法为入口函数// 这里是lambda缩略写法,完整写法为下面这种:// void main(){// return runApp(MyApp());// }void main() => runApp(MyApp());class MyApp extends StatelessWidget {// 这个Widget是应用的根布局,类似于页面容器//构建搭建页面@overrideWidget build(BuildContext context) {//入口页使用MaterialApp这个页面脚手架//可以快速构建页面//MaterialApp这个脚手架默认自带顶部ToolBar、路由、主题、国际化等等配置return MaterialApp(title: 'Flutter Demo',theme: ThemeData(// 在这里我们可以配置应用全局主题,后面主题课程部分会详细讲解//// 我们可以通过flutter run命令来运行程序,会看到蓝色状态栏和标题栏// 通过 primarySwatch属性来配置状态栏和标题栏颜色primarySwatch: Colors.green,),// 设置启动页面Widgethome: MyHomePage(title: 'Flutter Demo Home Page'),);}}// 继承StatefulWidget,有状态管理class MyHomePage extends StatefulWidget {// 这个是有参构造方法,用来传值的,这里我们不管MyHomePage({Key key, this.title}) : super(key: key);final String title;//重写创建状态@override_MyHomePageState createState() => _MyHomePageState();}// 自定义创建状态管理,继承自State<T>class _MyHomePageState extends State<MyHomePage> {//声明变量临时存储次数int _counter = 0;// 定义方法来累加次数void _incrementCounter() {setState(() {//setState里用于刷新UI和绑定数据_counter++;});}@overrideWidget build(BuildContext context) {// 这个方法每次调用 setState 都会调用//// Flutter框架已经帮我们优化了这部分,所以当我们需要刷新状态的时候不用担心性能问题// 这个用来构建页面具体布局,这里使用了Scaffold脚手架// 里面包含了AppBar、body、bottomNavigationBar、floatingActionButton等return Scaffold(appBar: AppBar(// 通过配置AppBar属性来控制显示效果,这里通过title来设置标题内容title: Text(widget.title),),body: Center(// body部分用Center Widget布局来加载Widget布局内容,子控件居中排列child: Column(// Column是一个纵向列布局,子控件纵向排列mainAxisAlignment: MainAxisAlignment.center,children: <Widget>[//子控件,Text Widget用来显示文字内容Text('You have pushed the button this many times:',),// 动态绑定数据Text('$_counter',style: Theme.of(context).textTheme.display1,),],),),// 浮动+号按钮floatingActionButton: FloatingActionButton(// 设置点击事件,执行_incrementCounter方法累加计数onPressed: _incrementCounter,// 设置长按提示的信息tooltip: 'Increment',// 设置图标child: Icon(Icons.add),),);}}
通过 primarySwatch 属性来配置状态栏和标题栏颜色效果如下图:
一般入口文件用 MaterialApp 脚手架构建,其它页面可以不使用。
我们看下 MaterialApp 脚手架构造方法都提供了哪些可配置的属性功能:
const MaterialApp({Key key,this.navigatorKey,this.home,this.routes = const <String, WidgetBuilder>{},this.initialRoute,this.onGenerateRoute,this.onUnknownRoute,this.navigatorObservers = const <NavigatorObserver>[],this.builder,this.title = '',this.onGenerateTitle,this.color,this.theme,this.darkTheme,this.locale,this.localizationsDelegates,this.localeListResolutionCallback,this.localeResolutionCallback,this.supportedLocales = const <Locale>[Locale('en', 'US')],this.debugShowMaterialGrid = false,this.showPerformanceOverlay = false,this.checkerboardRasterCacheImages = false,this.checkerboardOffscreenLayers = false,this.showSemanticsDebugger = false,this.debugShowCheckedModeBanner = true,})
再看下 Scaffold 脚手架构造方法给我们提供的可配置的属性功能:
const Scaffold({Key key,this.appBar,this.body,this.floatingActionButton,this.floatingActionButtonLocation,this.floatingActionButtonAnimator,this.persistentFooterButtons,this.drawer,this.endDrawer,this.bottomNavigationBar,this.bottomSheet,this.backgroundColor,this.resizeToAvoidBottomPadding,this.resizeToAvoidBottomInset,this.primary = true,this.drawerDragStartBehavior = DragStartBehavior.down,})
具体这些属性作用,大家可以大致有所了解,这里不再详细解释,后面课程会讲解。
看到这里,你觉得怎么样,Flutter 实现一个页面就是这样简单的。
用 Flutter 编写一个小 Demo
接下来我们动手自己写一个简单的页面,实现页面显示一段文字加一张图片,点击按钮切换文字内容的小 Demo:
import 'package:flutter/material.dart';void main() {return runApp(ShowApp());}class ShowApp extends StatelessWidget {@overrideWidget build(BuildContext context) {return MaterialApp(title: 'Flutter Demo',theme: ThemeData(primarySwatch: Colors.green,),home: ShowAppPage(),);}}class ShowAppPage extends StatefulWidget {@override_ShowAppPageState createState() {return _ShowAppPageState();}}class _ShowAppPageState extends State<ShowAppPage> {String title = '春天的脚步近了,我们应该更加青春有朝气';bool change = false;void _changeTextContent() {setState(() {//setState里用于刷新UI和绑定数据title = change ? "这个图片很好看,描述了春天的气息" : "春天的脚步近了,我们应该更加青春有朝气";change = !change;});}@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text('春天的气息'),),body: Center(child: Column(mainAxisAlignment: MainAxisAlignment.center,children: <Widget>[Padding(padding: EdgeInsets.all(10),child: Image.network('https://gss0.bdstatic.com/94o3dSag_xI4khGkpoWK1HF6hhy/baike/c0%3Dbaike272%2C5%2C5%2C272%2C90/sign=eaad8629b0096b63951456026d5aec21/342ac65c103853431b19c6279d13b07ecb8088e6.jpg'),),// 动态绑定数据Padding(padding: EdgeInsets.all(10),child: Text('$title',style: Theme.of(context).textTheme.title,),),RaisedButton(onPressed: _changeTextContent,child: Text('点击更换内容'),),],),),);}}
用 flutter run 编译运行到真机或者模拟器上,运行效果如下图所示:
怎么样,效果是不是很好?构建这一个页面,对于其他语言可能要花费比较多的工作量,而 Flutter 构建的非常快,运行体验也很流畅。
总结
本文主要是给大家实践用 Flutter 搭建一个小应用 Demo,给大家一个入门的印象。俗话说熟能生巧,我们不但要理解理论知识,也需要动手实践,才能够更好地进行深入的研究和开发。建议如下:
-
将本文内容动手敲一遍,亲身体验 Flutter 的应用编写和运行的流畅度。 -
先了解 Flutter 的入口文件和入口函数,以及简单了解 MaterialApp、Scaffold 脚手架的概念。
🎁 彩蛋
Flutter 现已进入 GitHub Top 20 软件库!通过专栏《Flutter:从入门到实践》,希望大家可以对 Flutter 进一步了解,也希望大家有所收获:入门 Flutter,掌握未来技术主流的主动权!
即日起至 2 月 14 日,订阅本专栏将享受限时特惠!欢迎你加入进来,和我一起开启这段 Flutter 学习之旅!
点击阅读原文,查看更多试读章节
