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

Flutter中GestureDetector内调用Navigator.push提示context未定义如何解决

问题原因

你当前的ProductDataGridSource继承自DataGridSource,不属于Flutter Widget体系的类,本身没有内置的context属性,所以直接在回调里调用context就会报未定义的错误。

解决步骤

  • 给ProductDataGridSource增加BuildContext类型的成员变量,修改构造函数要求传入该参数
  • 在你初始化ProductDataGridSource的Widget页面,实例化时把当前页面的context传入
  • 在onPressed回调中使用你存储的这个context变量调用Navigator

修改后的完整代码

class ProductDataGridSource extends DataGridSource {
  // 新增context成员变量
  final BuildContext context;
  // 构造函数增加context参数要求传入
  ProductDataGridSource(this.productList, this.context) {
    buildDataGridRow();
  }
  late List<DataGridRow> dataGridRows;
  late List<Product> productList;

  @override
  DataGridRowAdapter? buildRow(DataGridRow row) {
    return DataGridRowAdapter(cells: [
      // 提示:TextButton本身自带点击事件,不需要外层套GestureDetector,这里直接去掉了冗余嵌套
      TextButton(
        style: TextButton.styleFrom(
          primary: Colors.blue,
          onSurface: Colors.blueAccent,
        ),
        onPressed: (){
          // 这里调用成员变量存储的context
          Navigator.push(
            context,
            MaterialPageRoute(builder: (context) => const SecondRoute()),
          );
        },
        child: Text(row.getCells()[0].value.toString()),
      ),
      GestureDetector(
        onTap: (){
          print(row.getCells()[1].value.toString());
        },
        child: TextButton(
          style: TextButton.styleFrom(
            primary: Colors.blue,
            onSurface: Colors.red,
          ),
          onPressed: null,
          child: Text(row.getCells()[1].value.toString()),
        ),
      ),
    ]);
  }
}

实例化数据源时的传参示例

在你使用该数据源的Widget页面,实例化时传入当前页面的context即可:

@override
Widget build(BuildContext context) {
  // 把当前build方法的context作为第二个参数传入
  ProductDataGridSource source = ProductDataGridSource(productList, context);
  // 后续表格组件绑定数据源的逻辑不变
}

额外提示:如果你第二列也需要做页面跳转,直接复用上面的逻辑即可,不需要额外加参数

内容的提问来源于stack exchange,提问作者salva garcia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:54:05