Нужна помощь в использовании Flutter в Android Studio и рандомизации плиток с определенными свойствами данных
Любая помощь приветствуется, так как я пытался понять это и не могу. Я делаю игру, которая отображает около 20 плиток случайным образом для каждой новой игры. В настоящее время у меня есть виджет "Список" со всеми 20 плитками как виджеты "Плоская кнопка". Затем я рандомизирую их с помощью функции "randomNumGen..shuffle" и отображаю их в случайном порядке внутри "SliverGrid" (с 5 по ширине, что составляет 4 строки). Затем я хочу, чтобы пользователь щелкнул по тому, который он хочет, а затем щелкнул по месту (пустая сетка ниже), в которое он хочет поместить эту плитку (это домашняя база игрока).
Проблема в том, что я не могу понять, как связать определенные "данные" с каждой плиткой. Например..
Tile 1 = 5 energy and 2 people.
Tile 2 = 3 energy and 4 people
Tile 3 = 4 energy and 3 people.... and so on for all 20 tiles.
Как только они становятся случайными, я не могу понять, как "передать" эти данные пользователю, который выбрал эту плитку, чтобы пользователь получил "5 энергии и 2 человека", если они выбрали плитку 1 (которая находится в случайном месте).
import 'package:flutter/material.dart';
import 'dart:math';
class TileData {
int position;
int energy;
int people;
TileData({this.position, this.energy, this.people});
}
// The 'add' below is causing the error "The expression here has a type of void and therefore can not be used"
List<TileData> list=[];
list.add(TileData(
position:1,
energy:2,
people:4
));
list.add(TileData(
position:2,
energy:5,
people:3
));
// The "tileList" below is causing error "Undefined name tileList"
List<FlatButton> buttons = List.generate(tileList.length, (position) {
TileData data = tileList[position];
return FlatButton(
child: Text('${data.position}'),
onPressed: () {
print(data.energy);
print(data.people);
});
});
1 ответ
Вы можете просто создать класс со своими атрибутами.
class TileData{
int position;
int energy;
int people;
TileData({this.position,this.energy,this.people});
}
Тогда вы можете сделать List<TileData>
List<TileData> list=[];
list.add(TileData(
position:1,
energy:2,
people:4
));
list.add(TileData(
position:2,
energy:5,
people:3
));
Затем рандомизируйте его с помощью функции ниже. Перемешать список (элементы списка) { var random = new Random();
// Go through all elements.
for (var i = items.length - 1; i > 0; i--) {
// Pick a pseudorandom number according to the list length
var n = random.nextInt(i + 1);
var temp = items[i];
items[i] = items[n];
items[n] = temp;
}
return items;
}
Затем вы можете создать список FlatButton с помощью List.generate()
где вы можете назначить желаемое задание с точными данными.
List<FlatButton> buttons=List.generate(tileList.length,(position){
//You can get the data here
TileData data=tileList[position];
return FlatButton(
child:Text('${data.position}'),
onPressed:(){
//You can do you task here
print(data.energy);
print(data.people);
}
);
});