У меня есть 5x5 сетка 5xTableRow -> 5xFitedBox. Нажав на правую верхнюю кнопку, я хочу, чтобы она перемешивала цвета, описанные в массиве (см. Изображение).
Я пытался с OnChanged и onPressed, но проблема в том, что я не знаю, как получить доступ к каждому элементу индивидуально
Я прочитал, что должен использовать функцию setState, чтобы заставить флаттер перерисовывать определенные элементы, но проблема в том, куда мне поместить указанную функцию?
Также есть ли простой способ дать виджетам и дочерним элементам какой-то идентификатор (например, class = "что-то" или id = "что-то"). который я хочу использовать для l oop, чтобы перекрасить все 25 блоков, и после этого я хочу сохранить эти 25 блоков в массиве, чтобы использовать их для последующей проверки условий.
var colorArr = [0xffd61745, 0xff3569bc, 0xffffffff, 0xfff4862a, 0xffeaed19, 0xff329f64,
0xff000000];
//playArr is used to store values from 0-5 which corresponds each color => colorArr[playArr[n]]
var playArr = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
void shuffleBox() {
for (var i = 0; i<playArr.length;i++) {
playArr[i] = new Random().nextInt(6);
print(playArr[i]);
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
centerTitle: true,
title: Container(
child: Text(
'Table Widget',
style: TextStyle(
fontSize: 20.0,
fontWeight: FontWeight.bold,
),
),
),
actions: <Widget>[
IconButton(
icon: Icon(Icons.shuffle),
onPressed: shuffleBox,
),
],
),
body: SingleChildScrollView(
padding: EdgeInsets.only(top: 12),
child: Table(
border: null,
defaultVerticalAlignment: TableCellVerticalAlignment.top,
children: <TableRow>[
TableRow(children: <Widget>[
//this is what i want recolored and/or redrawn
FittedBox(
fit: BoxFit.contain,
child: Container(
margin: EdgeInsets.all(2),
color: Color(a),
width: 48.0,
height: 48.0,
),
),
FittedBox -> repeated 5x, then TableRow again