0

任何帮助表示赞赏,因为我试图弄清楚这一点但不能。我正在制作一个游戏,每个新游戏随机显示大约 20 个图块。我目前有一个“列表”小部件,其中包含所有 20 个图块作为“平面按钮”小部件。然后我使用“randomNumGen..shuffle”函数将它们随机化,并在“SliverGrid”内以随机顺序显示它们(5 个交叉,4 行)。然后我希望用户单击他们想要的那个,然后单击他想要放置该图块的位置(下面是一个空的 Slivergrid)(它是玩家的大本营)。

问题是我无法弄清楚如何将特定的“数据”与每个图块相关联。例如..

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.

一旦它们变得随机化,我就无法弄清楚如何将该数据“提供”给选择该磁贴的用户,以便用户在选择磁贴 1(位于随机位置)时收到“5 能量和 2 个人”。

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);
      });
});
4

1 回答 1

0


您可以简单地创建一个具有您的属性的类。

 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
));

然后用下面的函数随机化它。List shuffle(List items) { 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;
}

然后,您可以创建一个 FlatButtons 列表,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);
        }
    );
});
于 2019-12-24T08:08:38.237 回答