Flutter https://flutter.cn/docs学习之加入交互体验
https://flutter.cn/docs/development/ui/interactive
你会学到什么
-
如何响应点击。
-
如何创建自定义 widget。
-
无状态和有状态 widget 之间的区别。
有状态和无状态的 widgets
有些 widgets 是有状态的, 有些是无状态的。如果用户与 widget 交互,widget 会发生变化,那么它就是_有状态的_。
Stateless widget 不会发生变化。[Icon][]、[IconButton][] 和 [Text][] 都是无状态 widget,它们都是 [StatelessWidget][] 的子类。
而 stateful widget 是动态的。例如,可以通过与用户的交互或是随着数据的改变而导致外观形态的变化。 [Checkbox][]、[Radio][]、[Slider][]、[InkWell][]、[Form][] 和 [TextField][] 都是有状态 widget,它们都是 [StatefulWidget][] 的子类。
一个 widget 的状态保存在一个 [State][] 对象中, 它和 widget 的显示分离。 Widget 的状态是一些可以更改的值, 如一个滑动条的当前值或一个复选框是否被选中。当 widget 状态改变时, State 对象调用 setState()
, 告诉框架去重绘 widget。
创建一个有状态的 widget(自定义)
以下划线(_
)开头的成员或类是私有的
状态管理
重点是什么?
-
有多种方法可以管理状态。
-
您作为 widget 的设计者,需要选择使用何种管理方法。
-
如果不是很清楚时, 就在父 widget 中管理状态。
谁管理着 stateful widget 的状态?widget 本身?父 widget?双方?另一个对象?答案是…… 这取决于实际情况。有几种有效的方法可以给你的 widget 加入交互。作为 widget 设计师,你可以基于你所期待的表现 widget 的方式来做决定。以下是一些管理状态的最常见的方法:
如何决定使用哪种管理方法?以下原则可以帮助您决定:
-
如果状态是用户数据,如复选框的选中状态、滑块的位置,则该状态最好由父 widget 管理。 ------->因为事件是给界面巡逻处理的,不与按钮相关
-
如果所讨论的状态是有关界面外观效果的,例如动画,那么状态最好由 widget 本身来管理。
- 如果有疑问,首选是在父 widget 中管理状态
widget 管理自己的状态
有时,widget 在内部管理其状态是最好的。例如,当 [ListView][] 的内容超过渲染框时, ListView 自动滚动。大多数使用 ListView 的开发人员不想管理 ListView 的滚动行为,因此 ListView 本身管理其滚动偏移量。