从回调函数中调用它的地方获取 BuildContext

问题描述 投票:0回答:1

我制作了一个由另外 2 个小部件 A 和 B 组成的小部件 (MyComplexWidget)。

在构建 MyComplexWidget 时,我向其传递了其子控件之一的 (A, B)

onTap/onPressed
属性的回调函数。

问题是这个回调需要其当前父级(例如小部件 A 或 B)的

BuildContext
,因为,比方说,它在内部进行导航:

Navigator.pushNamed(context, "newroute");

理想情况下,我想要这个:

MyComplexWidget(
  // this cb is eventually passed on
  // Widget A's and B's constructors.
  onTap: () {
    Navigator.pushNamed(context, "newroute");
  }
);

其中

context
是分配了此
onTap
回调(在
MyComplexWidget
内部)的子控件(控件 A 或 B)的 BuildContext,而不是创建闭包回调的当前 BuildContext(如果有的话!) .

顺便说一句,

Navigator.pushNamed()
只是一个例子,回调中可能还有其他需要上下文的东西。我并不是在寻求有关如何在没有上下文的情况下导航等的解决方案。

这怎么可能?

flutter dart callback closures
1个回答
0
投票

您可以使用全局键来查找特定小部件的上下文。 然而,这只适用于回调,上下文不能直接在构建中使用,例如

padding: MediaQuery.paddingOf(navKey.currentContext!);

class NavWidget extends StatelessWidget {
  const NavWidget({super.key, required this.navKey});
  final GlobalKey navKey;

  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      onPressed: () {
        if (navKey.currentContext == null) return;
        Navigator.pushNamed(navKey.currentContext!, '/next');
      },
      child: const Text('Next'),
    );
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.