Flutter中如何使用controller
在Flutter中,如何使用controller来管理Widget的状态?比如TextEditingController或ScrollController,具体应该怎么初始化、监听值变化以及在dispose时释放资源?能否提供一个完整的使用示例,说明常见的使用场景和注意事项?
2 回复
在Flutter中,使用controller(如TextEditingController)需先创建实例,绑定到widget(如TextField),通过controller.text读写值,最后在dispose中释放资源,避免内存泄漏。
更多关于Flutter中如何使用controller的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中,Controller用于控制和管理特定Widget的状态或行为。常见的Controller包括:
1. TextEditingController - 文本输入控制
TextEditingController _controller = TextEditingController();
@override
Widget build(BuildContext context) {
return TextField(
controller: _controller,
onChanged: (text) {
print("当前文本: $text");
},
);
}
// 获取文本
String text = _controller.text;
// 设置文本
_controller.text = "新文本";
// 清空文本
_controller.clear();
@override
void dispose() {
_controller.dispose(); // 必须释放资源
super.dispose();
}
2. ScrollController - 滚动控制
ScrollController _scrollController = ScrollController();
@override
void initState() {
super.initState();
_scrollController.addListener(() {
print("滚动位置: ${_scrollController.offset}");
});
}
ListView(
controller: _scrollController,
// ...
)
// 滚动到指定位置
_scrollController.animateTo(
500.0,
duration: Duration(seconds: 1),
curve: Curves.easeInOut,
);
3. PageController - 页面控制
PageController _pageController = PageController(initialPage: 0);
PageView(
controller: _pageController,
children: [Page1(), Page2(), Page3()],
)
// 跳转到指定页面
_pageController.animateToPage(
2,
duration: Duration(milliseconds: 500),
curve: Curves.ease,
);
4. AnimationController - 动画控制
AnimationController _animationController;
@override
void initState() {
super.initState();
_animationController = AnimationController(
vsync: this,
duration: Duration(seconds: 2),
);
}
// 启动动画
_animationController.forward();
// 重置动画
_animationController.reset();
// 反向播放
_animationController.reverse();
使用要点:
- 必须调用dispose() 释放资源
- 在initState()中初始化,避免build中重复创建
- 使用SingleTickerProviderStateMixin 配合AnimationController
- 监听状态变化 通过addListener()
根据具体需求选择合适的Controller类型。

