Builder构造器

一、认识组件

1.Builder组件介绍

一个不影响子组件占位空间不具有显示性的组件,存在的唯一价值是提供当前组件对应元素的上下文。

1
2
3
4
5
6
名称:       Builder  构造器
类型: 功能型
重要性: ☆☆
相关组件: 【Scaffold】
家族: Widget
|--- StatelessWidget

2. 组件属性一览
属性名 属性类型 默认值 备注
key Key null 组件键
builder WidgetBuilder @required 组件构造器

WidgetBuilder是一个接受BuildContext的回调函数,可以提供当前组件元素所在的上下文。
由于组件build方法中的context是上级回调来的,如果在本组件类中Scaffold.of(context)弹出snackbar等时,则无法获得ScaffoldState。可以使用Builder将context下沉一层,从而可以上溯拿到ScaffoldState

1
typedef WidgetBuilder = Widget Function(BuildContext context);

二、使用组件

1. 应用于Scaffold.of(context)

当在Scaffold的同类中使用of时,可以选择新建一个Widget来实现context的下沉,保证ScaffoldState的存在。但如果是非常简单的组件,你可以考虑使用Builder。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class BuilderDemo extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
height: 200,
child: Scaffold(
appBar: AppBar(
title: Text('Builder'),
),
floatingActionButton: Builder(
builder: (ctx) => FloatingActionButton(
onPressed: () {
Scaffold.of(ctx)
.showSnackBar(SnackBar(content: Text('hello builder')));
},
child: Icon(Icons.add),
),
),
),
);
}
}

2. 其他用途

对应使用XXX.of获取某类状态对象方法都存在这种现象,当无法获取时,可以查看是否是上下文滞后的错误,使用Builder解决。

1
2
3
4
5
Scaffold.of(context)
MediaQuery.of(context)
Theme.of(context)
BlocProvider.of(context)
...

三、尾声

FlutterUnit开源项目: https://github.com/toly1994328/FlutterUnit
我的公众号:编程之王
联系我–邮箱:1981462002@qq.com –微信:zdl1994328
@张风捷特烈 2020.04.29
~ END ~

张风捷特烈 wechat
-------------本文结束感谢您的阅读 @张风捷特烈-------------
0%