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 本身管理其滚动偏移量

原文地址:https://www.cnblogs.com/caosq/p/13815481.html