Flutter 移动端开发学习笔记——一切皆组件
Linux内核遵循一切皆文件原则,Flutter开发遵从一切皆组件Widget的原则。应用界面由组件与组件的嵌套堆叠构成,组件按照布局作用有布局组件(如Center,Column)和一般组件(常见Text,MD风格组件:Scaffold,floatingActionButton)
布局组件
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'),
);
}
}