Flutter初学体验
Flutter概述
Flutter是一款移动应用程序SDK,一份代码可以同时生成iOS和Android两个高性能、高保真的应用程序。
Flutter目标是使开发人员能够交付在不同平台上都感觉自然流畅的高性能应用程序。我们兼容滚动行为、排版、图标等方面的差异。
应用程序是用Dart语言编写的,如果使用过Java或JavaScript之类的语言,则该应用程序看起来很熟悉。使用面向对象语言的经验绝对有帮助。
Flutter的优势
提高开发效率
同一份代码开发iOS和Android
用更少的代码做更多的事情
轻松迭代
在应用程序运行时更改代码并重新加载(通过热重载)
修复崩溃并继续从应用程序停止的地方进行调试
创建美观,高度定制的用户体验
受益于使用Flutter框架提供的丰富的Material Design和Cupertino(iOS风格)的widget
实现定制、美观、品牌驱动的设计,而不受原生控件的限制
Flutter基础学习
Dart语言是使用flutter框架开发时候必备的语言,flutter是一个跨平台的框架,适配也很不错,Dart语言很友好,和java很类似,学习成本也是很低的。所以这也是我推荐学习Dart语言的一个原因。
Dart学习要点
关键字、变量和常量、特殊数据类型、运算符、控制流程语句、异常
- 关键字
33个保留字(不能使用保留字作为标识符)
关键字 | - | - | - |
if | superdo | switch | assert |
else | in | this | enum |
is | throw | true | break |
new | try | case | extends |
null | typedef | catch | var |
class | false | void | const |
final | rethrow | while | continue |
finally | return | with | for |
default | - | - | - |
其中内置标志符有:(17个)
关键字 | - | - | - |
abstract | deferred | as | dynamic |
covariant | export | external | factory |
get | implements | import | library |
operator | part | set | static |
typedef |
跟java相比,Dart特有的关键字有:(25个)
关键字 | - | - | - |
deferred | as | assert | dynamic |
sync* | async | async* | in |
is | await | export | library |
external | typedef | factory | operator |
var | part | const | rethrow |
covariant | set | yield | get |
yield* |
- 变量和常量
变量的声明,可以使用 var、Object 或 dynamic 关键字。
Var name=’张三’; dynamic name =’张三’; Object name=’张三’;
未初始化的变量的初始值为null(包括数字),因此数字、字符串都可以调用各种方法。
Int intDefaultValue; assert(intDefaultValue==null)
如果您从未打算更改一个变量,那么使用 final 或 const,不是var,也不是一个类型。一个 final 变量只能被设置一次;const 变量是一个编译时常量。(Const变量是隐式的final。)
- 特殊数据类型
numbers 数字
strings 字符串
booleans 布尔
lists list集合(也称为数组)
maps map集合
runes 字符(用于在字符串中表示Unicode字符)
- 运算符
- 控制流程语句
If()else语句 、for循环、switch case语句、while和do while语句、break continue 语句、assert语句(,如果布尔条件为false,则使用assert语句来中断正常执行)。
- 异常
Dart提供了Exception
和Error
类型,以及许多预定义的子类型。当然,您可以定义自己的Exception。但是,Dart程序可以抛出任何非null对象,作为Exception(不仅仅是Exception和Error对象)
- Throw 以下是抛出或引发异常的示例
- try catch 捕获或捕获异常会阻止异常传递(除非您重新抛 出异常)。捕获异常使您有机会处理它:
- finally 无论是否抛出异常,要确保某些代码运行,请使用
finally
子句。如果没有catch子句匹配该异常,则在finally子句运行后传递异常。
Flutter详细学习请移步Flutter中文网
https://flutterchina.club/get-started/install/
简单总结:
- 在flutter中,绝大部分可使用的内容都是widget ,相当于android中的View
- 如果只是显示内容,不涉及更改状态,就是用StatelessWidget;如果涉及状态的变更就是用StatefulWidget
- StatefulWidget的实现需要两步:一个是需要创建继承StatefulWidget的类;另一个就是创建继承State的类,一般在State中控制整个状态。
- 更新状态一定要调用setState方法,不然不会起作用
- hot reload只会影响更改的内容
- Intent在flutter中等价于什么 ,要在Flutter中切换屏幕,您可以访问路由以绘制新的Widget。 管理多个屏幕有两个核心概念和类:Route 和 Navigator。Route是应用程序的“屏幕”或“页面”的抽象(可以认为是Activity), Navigator是管理Route的Widget。Navigator可以通过push和pop route以实现页面切换。
- RunOnUiThread在Flutter中等价于什么,Dart是单线程执行模型,支持Isolates(在另一个线程上运行Dart代码的方式)、事件循环和异步编程。 除非您启动一个Isolate,否则您的Dart代码将在主UI线程中运行,并由事件循环驱动
- OkHttp 在Flutter中等价于什么,虽然“http” package 没有实现OkHttp的所有功能,但“http” package 抽象出了许多常用的API,可以简单有效的发起网络请求 ,您可以通过在pubspec.yaml中添加依赖项来使用它
http: ‘>=0.11.3+12
- Activities 和Fragment在Flutter中,都等同于Widget
- 如何监听Activity生命周期,在Flutter中您可以通过挂接到WidgetsBinding观察并监听didChangeAppLifecycleState更改事件来监听生命周期事件
resumed - 应用程序可见并响应用户输入。这是来自Android的onResume
inactive - 应用程序处于非活动状态,并且未接收用户输入。此事件在Android上未使用,仅适用于iOS
paused - 应用程序当前对用户不可见,不响应用户输入,并在后台运行。这是来自Android的暂停
suspending - 该应用程序将暂时中止。这在iOS上未使用
- LinearLayout 在Flutter中相当于 Row的控件
- RelativeLayout在Flutter中相当于Couumn控件