Design patterns 自定义小部件的回调中没有上下文
我是个新手,所以这很容易被比我更有经验的人回答。与其说是代码问题,不如说是设计问题Design patterns 自定义小部件的回调中没有上下文,design-patterns,flutter,callback,Design Patterns,Flutter,Callback,我是个新手,所以这很容易被比我更有经验的人回答。与其说是代码问题,不如说是设计问题 有时,我想编写可重用的小部件,并使它们具有某种通用性,我想对用户输入进行回调,以便父小部件可以订阅,然后采取适当的操作,而不是硬编码路由等。但是,如果我想从回调中导航,我会直接遇到麻烦,因为那时我没有上下文。那么,我如何在flatter中设计它呢?在无状态小部件中,始终可以有一个可选/必需的上下文参数。对于有状态的小部件,上下文通常是可用的,但如果出于某种原因需要父上下文,则始终可以将其传递给小部件。看看下面的例
有时,我想编写可重用的小部件,并使它们具有某种通用性,我想对用户输入进行回调,以便父小部件可以订阅,然后采取适当的操作,而不是硬编码路由等。但是,如果我想从回调中导航,我会直接遇到麻烦,因为那时我没有上下文。那么,我如何在flatter中设计它呢?在无状态小部件中,始终可以有一个可选/必需的上下文参数。对于有状态的小部件,上下文通常是可用的,但如果出于某种原因需要父上下文,则始终可以将其传递给小部件。看看下面的例子
class GenericWidgetFoo extends StatelessWidget {
final BuildContext context;
final Key key;
final String name;
const GenericWidgetFoo(
{this.key, @required this.context, @required this.name});
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(8.0),
child: Center(
child: Text(
this.name,
style: TextStyle(
color: Theme.of(context).primaryColorLight,
),
)),
);
}
}
正如psink上面所说,我只是忽略了扩展状态类实际上可以访问上下文的事实: 性质 上下文→ 构建上下文 树中此小部件生成的位置。[...]
只读在callbackso中传递上下文您是否扩展了
StatefulWidget
?如果是,请阅读状态
类属性您可以传递上下文
。如果您显示一些代码会更好。好的,我认为上下文对于树中的每个小部件都是本地的,您不应该使用父级的上下文(但只能从构建函数接收)。因为我读到了一些关于上下文的内容,这些内容有特定小部件的约束和大小,所以我认为传递它可能是危险的。你不必在小部件中保存上下文:请参阅我的第一条评论