Это потому, что вы неправильно подключили конструктор, вы не создаете объект из объекта State
, то есть задача StatefulWidget
состоит в создании объекта State
. Вы создаете экземпляр StatefulWidget
с именем GridCell
, поэтому GridCell
должны иметь поля и конструктор, перемещенный в него.
Короче говоря, вам нужно переместить поля и конструктор GridCellState
до самого StatefulWidget
следующим образом:
class GridCell extends StatefulWidget {
final String choice;
final VoidCallback onTap;
GridCell({Key key, this.choice, this.onTap}) :
super(key: key);
@override
GridCellState createState() {
return new GridCellState();
}
}
, а затем используйте widget.fieldName
изнутри объекта State
для доступа к любому полю в StatefulWidget
объекте, см. Я использую widget.onTap
и widget.choice
для получения данных полей из моего StatefulWidget
выше.
class GridCellState extends State<GridCell> {
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap:widget.onTap,
child:Container(
child: Text(widget.choice),
height:20.0,
color:Theme.of(context).primaryColor,
),
);
}
}
В качестве альтернативы, вы можете просто конвертировать GridCell
в SatelessWidget
, вместо этого оба подхода решат вашу проблему, поэтому все зависит от того, нужно ли вам оставить StatefulWidget
или нет.