首页 > 解决方案 > 我的 GestureDetector 中的“上下文”有问题吗?

问题描述

当我按下我的列之一时,我想重定向我的应用程序,但是在 `onPressed() (): {Navigator.push () the "context" is not defined 中出现错误。但我不知道如何传递上下文。

也许解决方案很简单,但这是我第一次使用颤振

onPressed 方法在第一个GestureDetector().

    class ProductDataGridSource extends DataGridSource {
      ProductDataGridSource(this.productList) {
        buildDataGridRow();
      }
      late List<DataGridRow> dataGridRows;
      late List<Product> productList;
    
      @override
      DataGridRowAdapter? buildRow(DataGridRow row) {
        return DataGridRowAdapter(cells: [
          GestureDetector(
             child: TextButton(
                style: TextButton.styleFrom(
                  primary: Colors.blue,
                  onSurface: Colors.blueAccent,
                ),
                onPressed: (){
                  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()),
            ),
          ),
    
        ]);
      }

标签: androidkotlin

解决方案


由于这是一个自定义类,因此您需要向该类添加一个成员字段并从您实例化该类的任何位置传入它,例如:

class ProductDataGridSource extends DataGridSource {
  ProductDataGridSource(this.productList, required this.context) {
    buildDataGridRow();
  }
  late List<DataGridRow> dataGridRows;
  late List<Product> productList;
  final BuildContext context;
  
  ...

我添加 required 只是因为您似乎需要它,并且在构造对象时添加“required”是一种很好的做法,如果它很重要。

然后继续在你的课堂上使用上下文,希望这会有所帮助!


推荐阅读