![0e37eea26ab09e570759d5d6d2bb0da4.png](https://i-blog.csdnimg.cn/blog_migrate/b0f798a393eec35e9817a6bf4ffbfdf5.jpeg)
Flutter 从 React 中吸取灵感,通过现代化框架创建出精美的组件。它的核心思想是用 widget 来构建你的 UI 界面。 Widget 描述了在当前的配置和状态下视图所应该呈现的样子。
当 widget 的状态改变时,它会重新构建其描述(展示的 UI),框架则会对比前后变化的不同,以确定底层渲染树从一个状态转换到下一个状态所需的最小更改。
1. Hello world
创建一个最小的 Flutter 应用简单到仅需调用 runApp() 方法并传入一个 widget 即可:
![61ebcb33c26b5ef041aaab388de5bc04.png](https://i-blog.csdnimg.cn/blog_migrate/443480901717d9a50b05960086be49f7.jpeg)
runApp() 函数会持有传入的 Widget,并且使它成为 Widget 树中的根节点。在这个例子中,Widget 树有两个 widgets, Center 及其子控件 Text 。框架会强制让根 Widget 铺满整个屏幕,也就是说“Hello World”会在屏幕上居中显示。在这个例子我们需要指定文字的方向,当使用 MaterialApp widget 时,你需要考虑这一点,之后我会进一步的描述。
在写应用的过程中,取决于是否需要管理状态,你通常会创建一个新的组件继承 StatelessWidget 或 StatefulWidget。 Widget 的主要工作是实现 build方法,build()该方法根据其它较低级别的 widget 来描述这个 Widget。框架会逐一构建这些 widget,直到最底层的描述 widget 几何形状的 RenderObject。
2. 基础 widgets
Flutter 自带了一套强大的基础 Widget,下面列出了一些常用的:
Text
Text这个 widget 可以用来在应用内创建带样式的文本。
Row, Column
这两个 flex widgets 可以让你在水平 (Row) 和垂直(Column) 方向创建灵活的布局。它是基于 web 的 flexbox 布局模型设计的。
Stack
Stack widget 不是线性(水平或垂直)定位的,而是按照绘制顺序将 widget 堆叠在一起。你可以用 Positioned widget 作为 Stack 的子 widget,以相对于 Stack 的上,右,下,左来定位它们。 Stack 是基于 Web 中的绝对位置布局模型设计的。有点类似Android的相对布局RelativeLayout。
Container
Container widget 可以用来创建一个可见的矩形元素。 Container 可以使用 BoxDecoration 来进行装饰,如背景,边框,或阴影等。 Container 还可以设置外边距、内边距和尺寸的约束条件等。另外,Conta