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