首页 > 解决方案 > 自定义小部件的回调中没有上下文

问题描述

我是 Flutter 的新手,所以比我更有经验的人可能很容易回答这个问题。这更多的是关于设计的问题,而不是代码问题。

有时我想编写可重用的小部件并使它们有点通用我想为用户输入回调,以便父小部件可以订阅然后采取适当的行动而不是硬编码路由等。例如,我想从我的回调中导航,因为我没有上下文。那么如何在 Flutter 中进行设计呢?

标签: design-patternsfluttercallback

解决方案


您始终可以在无状态小部件中使用可选/必需的上下文参数。对于有状态的小部件,上下文通常是可用的,但如果您出于某种原因需要父上下文,您始终可以将其传递给您的小部件。看看下面的例子

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,
        ),
      )),
    );
  }
}

推荐阅读