Flutter中的Widget、State和BuildContext的作用和区别
Flutter中的Widget、State和BuildContext的作用和区别如下:
Widget:Widget是构成Flutter应用程序用户界面的基本元素。它可以是一个按钮、文本、图片等
State:在Flutter中,State用于管理有状态Widget的状态。当有状态Widget的状态发生变化时,Flutter框架会调用其build方法来更新用户界面。State的生命周期方法包括: initState:在State对象创建时调用,用于初始化状态。 didChangeDependencies:在State对象的依赖关系发生变化时调用,例如数据源的更改。 build:在Widget的状态发生变化时调用,用于构建新的用户界面。 didUpdateWidget:在Widget更新时调用,例如父Widget的属性发生变化。 deactivate:在State对象失去关联的Widget时调用。 dispose:在State对象被销毁时调用,用于释放资源。
BuildContext:BuildContext是Flutter框架在构建Widget时提供的上下文信息。它包含当前构建过程中的相关信息,例如Widget的父容器、主题、布局约束等
以下是build方法的基本结构和用法:
Widget build(BuildContext context) {
// 在这里构建和返回Widget树
}
有状态组件(Stateful Widgets)的 build 方法
class MyStatefulWidget extends StatefulWidget {
@override
_MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}
class _MyStatefulWidgetState extends State<MyStatefulWidget> {
@override
Widget build(BuildContext context) {
// 在这里构建和返回Widget树
}
}
无状态组件(Stateless Widgets)的 build 方法 对于无状态组件,build方法通常位于组件类的直接内部。无状态组件不包含可变状态,因此build方法可以直接在组件类内部定义。
class MyStatelessWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
// 在这里构建和返回Widget树
}
}
build方法接受一个BuildContext对象作为参数。BuildContext是一个用于获取与构建上下文相关信息的对象,例如主题、媒体查询信息等。它是构建过程中的上下文环境。
位置信息:获取屏幕的方向
class MyStatefulWidget extends StatefulWidget {
@override
_MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}
class _MyStatefulWidgetState extends State<MyStatefulWidget> {
@override
Widget build(BuildContext context) {
// 在这里构建和返回Widget树
print(MediaQuery.of(context).orientation);
...
}
}
主题信息:BuildContext允许你访问应用程序的主题数据。通过Theme.of(context),可以获取当前上下文中的主题,从而根据主题数据自定义 Widget 的外观。
class MyStatelessWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
final ThemeData theme = Theme.of(context);
...
}
}
class MyStatelessWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Text(
"我是一个标题",
style: Theme.of(context).textTheme.labelLarge,
)
}
}
媒体查询信息:BuildContext还允许执行媒体查询,以获取有关设备屏幕的信息,如屏幕宽度、高度和方向。这对于创建响应式布局非常有用。
class MyStatefulWidget extends StatefulWidget {
@override
_MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}
class _MyStatefulWidgetState extends State<MyStatefulWidget> {
@override
Widget build(BuildContext context) {
// 在这里构建和返回Widget树
final MediaQueryData mediaQuery = MediaQuery.of(context);
final double screenWidth = mediaQuery.size.width;
final double screenHeight = mediaQuery.size.height;
final Orientation orientation = mediaQuery.orientation;
....
}
}
Dart Flutter教程在线学习地址:https://www.bilibili.com/video/BV1S4411E7LY?p
Dart Flutter教程视频+课件+源码网盘下载地址:https://pan.baidu.com/s/1iaLGIyR9UmyJyHDGH6hepg 提取码:abcd
Flutter仿小米商城项目实战地址:https://www.itying.com/goods-1176.html
Flutter+Go_Router+Fluent_Ui仿阿里网盘桌面软件开发跨平台实战:https://www.itying.com/goods-1183.html