我有以下小部件:
class VennDiagramWidget extends StatefulWidget {
VennDiagramWidget(selectedGeneLists);
List<GenesListObjIndexed> get selectedGeneLists => this.selectedGeneLists;
@override
_VennState createState() => _VennState();
}
class _VennState extends State<VennDiagramWidget> {
List<GenesListObjIndexed> _selectedGeneLists;
@override
initState() {
_selectedGeneLists = widget.selectedGeneLists;
}
此窗口小部件通过以下方式由另一个窗口小部件初始化:.
.
.
Navigator.of(context).push(MaterialPageRoute(
builder: (context) => VennDiagramWidget(selectedGeneLists)));
我在这行上收到Maximum call stack size exceeded
的错误:_selectedGeneLists = widget.selectedGeneLists;
内的initState
。据我所知,该代码应该使用我在第二个片段中指定的
VennDiagramWidget
构造类selectedGeneLists
,并且当我调用此类的getter时,我应该获得完全相同的变量。我究竟做错了什么?
最佳答案
问题是,当您调用getter selectedGeneLists
时,它再次调用了自己
// calling itself ⬇
get selectedGeneLists => this.selectedGeneLists;
您需要在小部件类中声明selectedGeneLists
变量这应该工作
class VennDiagramWidget extends StatefulWidget {
final selectedGeneLists;
VennDiagramWidget(this.selectedGeneLists);
@override
_VennState createState() => _VennState();
}
或者如果您想要变量privateclass VennDiagramWidget extends StatefulWidget {
final _selectedGeneLists;
VennDiagramWidget(this._selectedGeneLists);
List<GenesListObjIndexed> get selectedGeneLists => this._selectedGeneLists;
@override
_VennState createState() => _VennState();
}
关于flutter - setter/getter 导致最大调用堆栈大小超出抖动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63992775/