android - 我的 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()),
),
),
]);
}
解决方案
由于这是一个自定义类,因此您需要向该类添加一个成员字段并从您实例化该类的任何位置传入它,例如:
class ProductDataGridSource extends DataGridSource {
ProductDataGridSource(this.productList, required this.context) {
buildDataGridRow();
}
late List<DataGridRow> dataGridRows;
late List<Product> productList;
final BuildContext context;
...
我添加 required 只是因为您似乎需要它,并且在构造对象时添加“required”是一种很好的做法,如果它很重要。
然后继续在你的课堂上使用上下文,希望这会有所帮助!
推荐阅读
- windows - Windows 商店 APPX 包安装文件在不同位置
- flutter - 可以用颤振创建一个布尔矩阵吗?
- javascript - 常规的 try/catch 块不适用于 Promise
- list - 如何从大表中制作过滤表?
- azure - 由于错误,azcopy 无法执行复制命令:如果没有 --recursive 或尾随通配符 (/*),则无法将目录用作源
- c# - 从 Azure DataLake Gen2 读取 Parquet 文件到 DataTable / SQLView 以查询 C#.Net Core 自动化测试
- python - 在python中查找具有特定名称的所有JSON键
- ios - iOS ARKit 如何将 ARFrame .capturedImage 保存到文件中?
- javascript - Vue 多个组件在一个包/文件中
- javascript - 使用 ReactJS 中的 Navigator.Clipboard API 从 Firestore 复制到剪贴板