【发布时间】:2021-01-04 14:04:17
【问题描述】:
我有以下小部件:
class GenesTableTabState extends State<GenesTableTab> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('DataTable of Gene Lists'),
centerTitle: true,
backgroundColor: Colors.greenAccent,
),
body: GenesTable(this),
persistentFooterButtons: [
RaisedButton(
onPressed: _onLoadCSV,
child: Text('Load CSV'),
),
RaisedButton(
onPressed: _onExportCSV,
child: Text('Export CSV'),
),
RaisedButton(
onPressed: () {},
child: Text('Hypergeometric test'),
),
RaisedButton(
onPressed: () {
Navigator.of(context).push(
MaterialPageRoute(builder: (context) => VennDiagramWidget()));
},
child: Text('Show venn diagram'),
)
],
);
}
}
GenesTable 是我从另一个文件导入的另一个小部件,我需要在维恩图按钮的 on_pressed 属性中使用其中一个变量(最后一个 RaisedButton)。
有没有办法将变量从GenesTable 传递到这个小部件?
编辑:
另外,我必须对GenesTable 进行哪些更改?
class GenesTable extends StatefulWidget {
final GenesTableTabState genesTableTabState;
GenesTable(this.genesTableTabState);
@override
_GenesTableState createState() => _GenesTableState();
}
class _GenesTableState extends State<GenesTable> {
bool sort = false;
int lastRowIndex = 1;
List<GenesListObjIndexed> selectedGeneLists = [];
...
..
编辑 2:
selectedGeneLists是我要传递的变量
我想以这种方式使用它:
RaisedButton(
onPressed: () {
widget.selectedGeneLists.isEmpty
? null
: Navigator.of(context).push(MaterialPageRoute(
builder: (context) => VennDiagramWidget()));
},
当我点击这个按钮时,我得到NoSuchMethodError: invalid member on null: 'isEmpty'
【问题讨论】:
-
widget.selectedGeneLists.isEmpty这里 isEmpty 不在列表中,您可以使用它的长度属性 -
如何将
selectedGeneLists视为该文件中的列表?它被定义为另一个文件@AbhishekGhaskata 中的列表 -
如果那是另一个文件,那么你可以将它传递给构造函数,并使用
as关键字进行类型转换。 -
@nvoigt 如果我想在两个有状态小部件之间传递数据,该解决方案是否可行?
-
只要改变另一个小部件的输入并在第一个小部件的回调中调用
setState,它就应该。这就是颤振小部件的工作方式,这就是它们构建您已经使用的所有onValueChange、onTap和onPressed方法的方式。