You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter如何向Widget类型的自定义组件传递context

解决方案

你当前把cusSearchBar定义为固定的Widget实例变量,初始化时无法动态接收上下文,调整为以下两种写法即可实现context传递:

方案1:改为函数式组件(适合轻量无状态的小组件)

将组件定义为接收BuildContext作为入参的函数,调用时传入当前上下文即可:

// 定义时接收context参数
Widget cusSearchBar(BuildContext context) {
  // 此处可正常使用传入的context,例如获取主题、导航、媒体查询等能力
  return Text(
    "Supplier",
    style: TextStyle(color: Theme.of(context).primaryColor),
  );
}

// 使用时,在build方法内传入当前context即可
@override
Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(
      title: cusSearchBar(context),
    ),
  );
}

方案2:封装为独立的StatelessWidget(适合复用性高的组件)

自定义独立的组件类,Flutter框架会自动将当前上下文传递到组件的build方法中,无需手动传参:

class CusSearchBar extends StatelessWidget {
  const CusSearchBar({super.key});

  @override
  Widget build(BuildContext context) {
    // 此处可直接使用框架传入的context
    return const Text("Supplier");
  }
}

// 使用时直接在Widget树中声明即可
@override
Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(
      title: const CusSearchBar(),
    ),
  );
}

注意事项

不要把需要依赖上下文能力的Widget定义为顶层或类的固定实例,这类固定实例不会随组件树更新动态获取最新的上下文,容易出现后续的主题、本地化等能力不生效的问题。

内容的提问来源于stack exchange,提问作者Navjot Aulakh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 07:39:05