A. 入口程序 main.dart
每一个Flutter项目的/lib目录下都有一个main.dart文件,打开该文件,里面应该有一个main()函数。Flutter使用Dart语言开发,而在Dart语言中,main()函数是Dart程序的入口,也就是说,Flutter程序在运行的时候,第一个执行的函数就是main()函数。如下面的代码所示:
C. 程序入口
void main() => runApp(Widget app);
从上面的代码中可以看到,main()函数中只调用runApp函数,使用runApp函数可以将给定的根组件填满整个屏幕。你可能会有疑问,为什么一定要使用runApp函数?如果不调用runApp函数,项目也可以正常执行,但是屏幕上什么都不会显示。Flutter是Dart语言的移动应用框架,runApp函数就是Flutter框架的入口,如果不调用runApp函数,那你执行的就是一个Dart控制台应用。
B. Material Design设计风格
每一个.dart文件的第一行几乎都会导入flutter/material.dart包,这个包是Flutter实现Material Design设计风格的基础包,里面有文本输入框(Text)、图标(Icon)、图片(Image)、行排列布局(Row)、列排列布局(Column)、Decoration(装饰器)、动画等组件,大家可以将它们理解为网页中的按钮、标题、选项框等组件库。
import 'package:flutter/material.dart';
那么Material Design又是什么呢?是谷歌推出的一套视觉设计语言。比如有的App可以换皮肤,而每一套皮肤就是一种设计语言,有古典风、炫酷风、极简风,等等,而Material Design就是谷歌风。Flutter采用的就是Material Design风格。
D.E 无状态组件和有状态组件
● 无状态组件(StatelessWidget)是不可变的,这意味着它们的属性不能改变,所有的值都是最终的。
● 有状态组件(StatefulWidget)持有的状态可能在Widget生命周期中发生变化。实现一个StatefulWidget至少需要两个类:
○ 一个StatefulWidget类。
○ 一个State类。StatefulWidget类本身是不变的,但是State类在Widget生命周期中始终存在。
使用资源包
Flutter包类似于Java语言里的jar包,由全球众多开发者共同提供第三方库。例如,网络请求(http)、自定义导航/路由处理(fluro)、集成设备API(如url_launcher&battery)以及第三方平台SDK(如Firebase)等。这使得开发者可以快速构建应用程序,而无须从头造轮子。
所有包(package)都会发布到Dart的包仓库里
包仓库地址:
// 地址 (需要翻墙) https://pub.dartlang.org
// 国内地址 https://pub.flutter-io.cn
包使用示例
点击Packages get 在控制台输出:
引用和使用
import 'package:flutter/material.dart';
import 'package:english_words/english_words.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
final wordPair = new WordPair.random();
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: new Scaffold(
appBar: new AppBar(
title: new Text('Hello Flutter'),
),
body: new Center(
child: new Text(wordPair.asPascalCase),
),
),
);
}
}
分享个返利程序,可以赚点零花钱。