我是Flutter的新手,所以有经验的人可能比我容易回答。与其说是代码问题,不如说是设计方面的问题。
有时候,我想编写可重用的小部件并使它们具有某种通用性,我希望有用于用户输入的回调,以便父小部件可以订阅然后采取适当的操作,而不是硬编码路由等。但是我直接运行例如,如果我想从回调中导航,就会遇到麻烦,因为我没有上下文。那么如何在Flutter中设计它呢?
答案 0 :(得分:1)
无状态小部件中始终可以有一个可选/必需的上下文参数。对于有状态的小部件,上下文通常是可用的,但是如果出于某种原因需要父上下文,则可以始终将其传递给小部件。看下面的例子
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,
),
)),
);
}
}
答案 1 :(得分:0)
正如psink所说,我只是错过了扩展State类实际上可以访问上下文的事实:
属性
context→BuildContext 此小部件在树中的位置。 [...] 只读