Flutter 入门笔记

虚树涟漪
• 阅读 1371

环境安装

参考: https://nhancv.com/newbie-chapter-2-flutter-getting-started/

Dart语法

环境安装

参考: https://nhancv.com/newbie-chapter-2-flutter-getting-started/

Dart语法

基本语法

Flutter 入门笔记

Flutter 入门笔记 Flutter 入门笔记

Flutter

Flutter 入门笔记.png")

相关文档: https://api.flutter.dev/

我们仅需处理好 Widget 和 用户交互 即可.

关于 Widget

Widget 的生命周期

Flutter 入门笔记

我们针对App可采取管理数据流方式

  • 每个Widget独自管理State的方式
  • 仅使用一个State的两种方式
StatelessWidget

无状态

build
StatefulWidget

拥有状态管理的

Flutter 入门笔记.png")

createState

<pre class="cm-s-default" style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">class MyScreen extends StatefulWidget { @override _MyScreenState createState() => _MyScreenState(); // 创建时执行并仅当一次 }</pre>

initState

<pre class="cm-s-default" style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">@override void initState() { super.initState(); ... // 用于获取rest api的data }</pre>

didChangeDependencies
当 StatefulWidget 第一次创建的时候,didChangeDependencies 方法会在 initState 方法之后立即调用,之后当 StatefulWidget 刷新的时候,就不会调用了,除非你的 StatefulWidget 依赖的 InheritedWidget 发生变化之后,didChangeDependencies 才会调用,所以 didChangeDependencies 有可能会被调用多次。
build
在 StatefulWidget 第一次创建的时候,build 方法会在 didChangeDependencies 方法之后立即调用,另外一种会调用 build 方法的场景是,每当 UI 需要重新渲染的时候,build 都会被调用,所以 build 会被多次调用,然后 返回要渲染的 Widget。千万不要在 build 里做除了创建 Widget 之外的操作,因为这个会影响 UI 的渲染效率。
addPostFrameCallback
addPostFrameCallback 是 StatefulWidge 渲染结束的回调,只会被调用一次,之后 StatefulWidget 需要刷新 UI 也不会被调用,addPostFrameCallback 的使用方法是在 initState 里添加回调:

<pre class="cm-s-default" style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">import 'package:flutter/scheduler.dart'; @override void initState() { super.initState(); SchedulerBinding.instance.addPostFrameCallback((_) => {}); }</pre>

didUpdateWidget
didUpdateWidget 这个生命周期我们一般不会用到,只有在使用 key 对 Widget 进行复用的时候才会调用。
deactivate
当要将 State 对象从渲染树中移除的时候,就会调用 deactivate 生命周期,这标志着 StatefulWidget 将要销毁,但是有时候 State 不会被销毁,而是重新插入到渲染树种。
dispose
当 View 不需要再显示,从渲染树中移除的时候,State 就会永久的从渲染树中移除,就会调用 dispose 生命周期,这时候就可以在 dispose 里做一些取消监听、动画的操作,和 initState 是相反的。

App 的生命周期

Flutter 入门笔记

获知App处于前台还是后台?

Flutter 入门笔记.png")

<pre class="cm-s-default" style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">class _MyHomePageState extends State<MyHomePage> with WidgetsBindingObserver { @override void initState() { WidgetsBinding.instance.addObserver(this); super.initState(); } @override void dispose() { WidgetsBinding.instance.removeObserver(this); super.dispose(); } @override void didChangeAppLifecycleState(AppLifecycleState state) { super.didChangeAppLifecycleState(state); if (state == AppLifecycleState.paused) { // Background } if (state == AppLifecycleState.resumed) { // Foreground } } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('AppLifecycleState'), ), body: Center(), ); } }</pre>

关于交互

静态资源

https://flutter.dev/docs/development/ui/assets-and-images

国际化

依次浏览

Rest API

https://flutter.dev/docs/cookbook/networking/fetch-data

JSON to Dart: https://javiercbk.github.io/json_to_dart/

Cache

图片持久化:https://flutter.dev/docs/cookbook/images/cached-images

数据持久化:https://flutter.dev/docs/cookbook/persistence

Dialog

https://api.flutter.dev/flutter/material/Dialog-class.html

App navgation

https://flutter.dev/docs/cookbook/navigation

List

https://flutter.dev/docs/cookbook/lists

Animation

https://flutter.dev/docs/development/ui/animations

App version and env

Testing

Performance & Memory

与AppCenter集成

参考: https://nhancv.com/newbie-chapter-3-flutter-initial-setup/

Widget 组件使用

参考: Flutter go https://flutter-go.pub/website/

完整预览地址:https://flutter-go.pub/flutter_go_web/#WidgetPage

  • 面向对象语言,在 Dart 中,万物皆对象,包括 函数

基本语法

Flutter 入门笔记

Flutter 入门笔记 Flutter 入门笔记

Flutter

Flutter 入门笔记.png")

相关文档: https://api.flutter.dev/

我们仅需处理好 Widget 和 用户交互 即可.

关于 Widget

Widget 的生命周期

Flutter 入门笔记

我们针对App可采取管理数据流方式

  • 每个Widget独自管理State的方式
  • 仅使用一个State的两种方式
StatelessWidget

无状态

build
StatefulWidget

拥有状态管理的

Flutter 入门笔记.png")

createState

<pre class="cm-s-default" style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">class MyScreen extends StatefulWidget { @override _MyScreenState createState() => _MyScreenState(); // 创建时执行并仅当一次 }</pre>

initState

<pre class="cm-s-default" style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">@override void initState() { super.initState(); ... // 用于获取rest api的data }</pre>

didChangeDependencies
当 StatefulWidget 第一次创建的时候,didChangeDependencies 方法会在 initState 方法之后立即调用,之后当 StatefulWidget 刷新的时候,就不会调用了,除非你的 StatefulWidget 依赖的 InheritedWidget 发生变化之后,didChangeDependencies 才会调用,所以 didChangeDependencies 有可能会被调用多次。
build
在 StatefulWidget 第一次创建的时候,build 方法会在 didChangeDependencies 方法之后立即调用,另外一种会调用 build 方法的场景是,每当 UI 需要重新渲染的时候,build 都会被调用,所以 build 会被多次调用,然后 返回要渲染的 Widget。千万不要在 build 里做除了创建 Widget 之外的操作,因为这个会影响 UI 的渲染效率。
addPostFrameCallback
addPostFrameCallback 是 StatefulWidge 渲染结束的回调,只会被调用一次,之后 StatefulWidget 需要刷新 UI 也不会被调用,addPostFrameCallback 的使用方法是在 initState 里添加回调:

<pre class="cm-s-default" style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">import 'package:flutter/scheduler.dart'; @override void initState() { super.initState(); SchedulerBinding.instance.addPostFrameCallback((_) => {}); }</pre>

didUpdateWidget
didUpdateWidget 这个生命周期我们一般不会用到,只有在使用 key 对 Widget 进行复用的时候才会调用。
deactivate
当要将 State 对象从渲染树中移除的时候,就会调用 deactivate 生命周期,这标志着 StatefulWidget 将要销毁,但是有时候 State 不会被销毁,而是重新插入到渲染树种。
dispose
当 View 不需要再显示,从渲染树中移除的时候,State 就会永久的从渲染树中移除,就会调用 dispose 生命周期,这时候就可以在 dispose 里做一些取消监听、动画的操作,和 initState 是相反的。

App 的生命周期

Flutter 入门笔记

获知App处于前台还是后台?

Flutter 入门笔记.png")

<pre class="cm-s-default" style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">class _MyHomePageState extends State<MyHomePage> with WidgetsBindingObserver { @override void initState() { WidgetsBinding.instance.addObserver(this); super.initState(); } @override void dispose() { WidgetsBinding.instance.removeObserver(this); super.dispose(); } @override void didChangeAppLifecycleState(AppLifecycleState state) { super.didChangeAppLifecycleState(state); if (state == AppLifecycleState.paused) { // Background } if (state == AppLifecycleState.resumed) { // Foreground } } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('AppLifecycleState'), ), body: Center(), ); } }</pre>

关于交互

静态资源

https://flutter.dev/docs/development/ui/assets-and-images

国际化

依次浏览

Rest API

https://flutter.dev/docs/cookbook/networking/fetch-data

JSON to Dart: https://javiercbk.github.io/json_to_dart/

Cache

图片持久化:https://flutter.dev/docs/cookbook/images/cached-images

数据持久化:https://flutter.dev/docs/cookbook/persistence

Dialog

https://api.flutter.dev/flutter/material/Dialog-class.html

App navgation

https://flutter.dev/docs/cookbook/navigation

List

https://flutter.dev/docs/cookbook/lists

Animation

https://flutter.dev/docs/development/ui/animations

App version and env

Testing

Performance & Memory

与AppCenter集成

参考: https://nhancv.com/newbie-chapter-3-flutter-initial-setup/

Widget 组件使用

参考: Flutter go https://flutter-go.pub/website/

完整预览地址:https://flutter-go.pub/flutter_go_web/#WidgetPage

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Stella981 Stella981
3年前
Flutter集成百度语音识别(Android端)实战
今天和大家分享一下Flutter中集成百度语音识别Android端的过程,供大家进行参考。既然是Flutter集成,那首先就要创建一个Flutter项目,这个就不仔细讲了,可以参考Flutter中文的创建项目流程(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fflutterchin
Stella981 Stella981
3年前
Flutter环境搭建
本文介绍mac上搭建Flutter环境1、Flutter官方提供中国地区镜像地址:https://github.com/flutter/flutter/wiki/UsingFlutterinChina(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fgithub.com%2Ff
Stella981 Stella981
3年前
OFBiz 快速入门——续二
OFBiz快速入门——续二2011年03月17日星期四00:03OFBiz 快速入门2.5 创建一个文件,取名为(controller.xml),被OFBiz webapp控制器使用的。在没有额外增加功能时,这个文件内容非常的小与简单,如下:<?xml version"1.0" encoding"UTF8"?<siteco
Wesley13 Wesley13
3年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Stella981 Stella981
3年前
Css入门学习笔记03—DIV
_很久很久以前学习html的笔记记录,很随意,但都是自己记录的,希望对需要的人有所帮助。__本文使用word2013编辑并发布__Postbird|ThereIam,intheworldmoreexciting!__Postbirdperso
少湖说 少湖说
9个月前
鸿蒙Flutter实战:03-鸿蒙Flutter开发中集成Webview
鸿蒙Flutter开发中集成Webview主要有两种方案使用第三方库如使用flutterinappwebview插件,在pubspec.lock文件中配置:yamlflutterinappwebview:git:url:https://gitee.com/
少湖说 少湖说
9个月前
鸿蒙Flutter实战:08-如何调试代码
鸿蒙Flutter实战:如何调试代码1.环境搭建参考文章搭建好开发环境。IDE安装好DevEco和VsCode/AndroidStudio。2.配置如果是vscode,可以在.vscode/launch.json文件中,增加以下配置json"name":"
虚树涟漪
虚树涟漪
Lv1
无端更渡桑干水,却望并州是故乡。
文章
3
粉丝
0
获赞
0