state
和 widget 的蓝图是分开的。
所以widget的顺序发生了变化,state没有变的话,element的树是不会重新渲染的。
statelessWidget 并不会用到key。
statefulWidget 会用到key。
valuekey和 objectkey的区别:valuekey 比较的是对象的内容是否一样。objectkey比较的是对象的内存地址。
uniqueKey可以强行让widget 把状态丢掉。让重新渲染。在动画的时候可用到。Text变化文字内容的时候。
Draggable
ReorderableList
stack + positioned/AnimatedPositioned
Listener
滚动:
listView
ListView.builder [cacheExtent:缓冲区大小]
itemExtent 固定item的大小,防止卡顿。
controlle - ScrollController 操作listview的内容。 animateTo
physics
ListView.separated 带分割线的
Scrollbar
下拉刷新:
RefreshIndicator
NotificationListener
Dismissible
GridView
ListWheelScrollView
RotateBox
pageView
SingleChildScrollView
Align
异步:
eventLoop
eventQueue / microtaskQueue
aysnc await try catch
future.then.errorCatch.whenComplete
futureBuilder
StreamBuilder, StreamController可以精确控制
StreamBuilder 在监听StreamController里面的数据流。当StreamController里面的数据发生了变化,
StreamBuilder的builder就会调用。
一个stream默认只能有一个监听,如果需要有多个监听,就需要将stream变成广播。
stream.map.where.distinct
小例子:
在flutter的滚动控件中,默认的padding不是0。因为iPhone手机有安全区域。要避开。
每次点击的时候,就发出了一个事件。