Flutter StatefulWidget #

一、StatefulWidget基础 #

1.1 定义 #

dart
class MyWidget extends StatefulWidget {
  final String title;
  
  const MyWidget({super.key, required this.title});
  
  @override
  State<MyWidget> createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  int _count = 0;
  
  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        Text('${widget.title}: $_count'),
        ElevatedButton(
          onPressed: () => setState(() => _count++),
          child: Text('Increment'),
        ),
      ],
    );
  }
}

1.2 State类 #

dart
class _MyWidgetState extends State<MyWidget> {
  late TextEditingController _controller;
  late FocusNode _focusNode;
  
  @override
  void initState() {
    super.initState();
    _controller = TextEditingController();
    _focusNode = FocusNode();
  }
  
  @override
  void dispose() {
    _controller.dispose();
    _focusNode.dispose();
    super.dispose();
  }
  
  @override
  Widget build(BuildContext context) {
    return TextField(controller: _controller);
  }
}

二、生命周期 #

2.1 生命周期图 #

text
createState()
      │
      ▼
initState()
      │
      ▼
didChangeDependencies()
      │
      ▼
build() ◄──────────────────┐
      │                     │
      ▼                     │
didUpdateWidget()           │ setState()
      │                     │
      ▼                     │
setState() ─────────────────┘
      │
      ▼
deactivate()
      │
      ▼
dispose()

2.2 生命周期方法 #

dart
class _MyWidgetState extends State<MyWidget> {
  @override
  void initState() {
    super.initState();
    print('initState');
  }
  
  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    print('didChangeDependencies');
  }
  
  @override
  void didUpdateWidget(MyWidget oldWidget) {
    super.didUpdateWidget(oldWidget);
    print('didUpdateWidget');
  }
  
  @override
  void deactivate() {
    super.deactivate();
    print('deactivate');
  }
  
  @override
  void dispose() {
    print('dispose');
    super.dispose();
  }
  
  @override
  Widget build(BuildContext context) {
    return Container();
  }
}

三、setState #

3.1 基本用法 #

dart
setState(() {
  _count++;
});

3.2 异步更新 #

dart
Future<void> _loadData() async {
  final data = await fetchData();
  setState(() {
    _data = data;
  });
}

3.3 注意事项 #

dart
void _increment() {
  setState(() {
    _count++;
  });
}

void _wrongWay() {
  setState(() {
    _count++;
    setState(() {
      _count++;
    });
  });
}

四、总结 #

4.1 核心要点 #

要点 说明
StatefulWidget 有状态Widget
State 状态管理类
setState 触发UI更新
生命周期 initState → build → dispose

4.2 下一步 #

让我们学习 InheritedWidget

最后更新:2026-03-28