Flutter 在buildContext空间中使用连字符抖动某些情况

Flutter 在buildContext空间中使用连字符抖动某些情况,flutter,Flutter,BuildContext显示树中的哪个小部件 所以每个小部件都有这样的功能。我也知道为什么在下面的示例中需要构建器小部件 小部件构建(构建上下文){ 归还新脚手架( appBar:新的appBar( 标题:新文本(widget.title), ), 正文:新容器(), ///生成器允许您传递上下文 ///从*当前*生成方法 ///直接返回到此生成方法中返回的子级 /// ///“生成器”属性接受回调 ///它可以被准确地视为任何应用程序上的“构建”方法 ///小部件 floatingAction

BuildContext显示树中的哪个小部件 所以每个小部件都有这样的功能。我也知道为什么在下面的示例中需要构建器小部件

小部件构建(构建上下文){
归还新脚手架(
appBar:新的appBar(
标题:新文本(widget.title),
),
正文:新容器(),
///生成器允许您传递上下文
///从*当前*生成方法
///直接返回到此生成方法中返回的子级
///
///“生成器”属性接受回调
///它可以被准确地视为任何应用程序上的“构建”方法
///小部件
floatingActionButton:新生成器(生成器:(BuildContext上下文){
返回新的浮动操作按钮(按下时:(){
Scaffold.of(上下文).showSnackBar(
新小吃吧(
背景颜色:Colors.blue,
内容:新文本(“SnackBar”),
),
);
});
}),
);
}
因为在浮动操作按钮中,它必须知道脚手架。 若我不使用构建器,那个么这个小部件使用的上下文来自构建函数,它不包含脚手架信息 这是一个问题 我看到在上下文空间中使用了连字符

builder: (_) {}
像这样

返回消费者
(构建器:(u,counter,child)=>Scaffold(appBar:appBar(标题:Text(widget.title)),
还是像这样 它是如何工作的?为什么上下文不需要?

如果不使用传递给参数的值,可以使用下划线(而不是连字符)而不是指定参数名

在您的使用者示例中,之所以使用下划线,是因为在生成器函数中未使用
BuildContext
;您不需要它来实例化
Scaffold
AppBar
Text
。另一方面,您需要下划线才能调用
Scaffold.of(context).showSnackBar()

同样,您可以将
计数器
子项
替换为
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu


在消费者中使用BuildContext的示例

您可以认为它的工作方式与
Builder
类中的工作方式相同

脚手架(
正文:ChangeNotifierProvider(
create:(context1)=>Foo(),
儿童:消费者(
构建者:(上下文2,foo,child){
返回上升按钮(
子:文本(foo.message),
已按下:(){
//您可以使用context2获取脚手架状态
//这在context1中是不可能的
脚手架.的(上下文2).showSnackBar(…);
},
);
},
},
),
)
有关详细信息,请参阅


什么是建筑商?

builder
是一个传入函数的参数,为方便起见,必要时会调用该函数并传入一些值

许多小部件都有
builder
,但举个例子,它会在树的某个位置获取
Provider()
给定的值,然后使用包含所获得值的值调用builder函数,以便使用函数返回的小部件构建小部件树

在您的示例中,
Consumer
从祖先获取计数器值,并调用
builder
函数,传入
BuildContext
、计数器值(从祖先获取)和子小部件(如果省略了
Consumer
child
参数,则为
null
).

如果不使用传入参数的值,则可以使用下划线(而不是连字符)代替指定参数名称

在您的使用者示例中,之所以使用下划线,是因为在生成器函数中未使用
BuildContext
;您不需要它来实例化
Scaffold
AppBar
Text
。另一方面,您需要下划线才能调用
Scaffold.of(context).showSnackBar()

同样,您可以将
计数器
子项
替换为
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu


在消费者中使用BuildContext的示例

您可以认为它的工作方式与
Builder
类中的工作方式相同

脚手架(
正文:ChangeNotifierProvider(
create:(context1)=>Foo(),
儿童:消费者(
构建者:(上下文2,foo,child){
返回上升按钮(
子:文本(foo.message),
已按下:(){
//您可以使用context2获取脚手架状态
//这在context1中是不可能的
脚手架.的(上下文2).showSnackBar(…);
},
);
},
},
),
)
有关详细信息,请参阅


什么是建筑商?

builder
是一个传入函数的参数,为方便起见,必要时会调用该函数并传入一些值

许多小部件都有
builder
,但举个例子,它会在树的某个位置获取
Provider()
给定的值,然后使用包含所获得值的值调用builder函数,以便使用函数返回的小部件构建小部件树

在您的示例中,
Consumer
从祖先获取计数器值,并调用
builder
函数,传入
BuildContext
、计数器值(从祖先获取)和子小部件(如果省略了
Consumer
child
参数,则为
null