Linux内核遵循一切皆文件原则,Flutter开发遵从一切皆组件Widget的原则。

应用界面由组件与组件的嵌套堆叠构成,组件按照布局作用有布局组件(如CenterColumn)和一般组件(常见Text,MD风格组件:ScaffoldfloatingActionButton

布局组件

Flutter提供的布局组件命名及其作用与前端CSS样式/Python Tkinter中的布局样式组件类似。
Center 是一个布局 widget。它接收一个子 widget,并将其放置在父 widget 的正中间。

StatefulWidget和StatelessWidget

按照状态区分则分为有状态组件 (集成自StatefulWidget)和无状态组件(继承自StatelessWidget
有无状态,主要区别在于是否需要在应用运行期间动态改变数据并更新UI。

无状态组件

属于不可变组件,创建后所有的属性、UI 呈现均固定不变。它不依赖任何随时间变化的数据
生命周期:简单,仅包含一个 build() 方法。
性能:性能开销低,不需要管理状态和触发重绘。
常见场景:静态文本(Text)、图标(Icon)、静态图片以及页面头部导航栏(AppBar)

class MyStatelessWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Text('这是一个无状态组件');
  }
}

有状态组件

特点:可变组件,在生命周期内可以持有、改变状态(State),并在状态改变时自动刷新、重新构建 UI。
组成部分:包含两个类,一个继承自 StatefulWidget,另一个继承自 State。UI 的逻辑和布局写在 State 类的 build 方法中。
状态管理:通过调用 setState() 方法通知 Flutter 框架数据已改变,从而触发 build 重新绘制界面。
常见场景:复选框(Checkbox)、输入框(TextField)、计数器、网络请求加载中状态等需要根据用户交互或数据更新而变化的 UI。

MyStatefulWidget extends StatefulWidget {
  @override
  _MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}

class _MyStatefulWidgetState extends State<MyStatefulWidget> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++; // 改变状态并触发UI更新
    });
  }

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onTap: _incrementCounter,
      child: Text('点击次数: $_counter'),
    );
  }
}

标签: none

添加新评论