如何在 Flutter 中构建动态字符串列表?

How to build a list of dynamic strings in Flutter?

我正在编写一个 app/game 代码,用户在其中输入他自己在存储在 SQFLite 数据库 中的文本字段上的规则。

规则与朋友相关,因此它在 class 朋友中,具有 id、名称、rule0、rule1、rule2...rule9。由于很多原因,真的很烦人,但我想我需要它在 Friend class 中,这样它才能正确存储 friend.id.

我在尝试时遇到了明显的错误 'only static members can be accessed on initializers' List<Strings> rules = [rule0, rule1]; 或者 List<dynamic> rules = [...];

有谁知道我该如何解决这个问题? 创建一个新的 class 规则,每个规则都有与正确朋友相关的 ID? 或者,如果我可以在 Friend 中创建一个动态列表?

真的迷失在这一点上。欢迎任何帮助。

class Friend {

  int id;
  String name;
  String pic;
  bool play;
  String rule0;
  String rule1;
  String rule2;
  String rule3;
  String rule4;
  String rule5;
  String rule6;
  String rule7;
  String rule8;
  String rule9;

  Friend();

  // i have then a fromMap() and a toMap() for the database

}

我不完全确定,但您似乎在 SQL 方面以及数据的 class 表示方面遇到了问题。

如果您确定只有一定数量的规则,您可以按照目前的方式处理它。我要做的是为规则列表创建一个 'getter' 函数,即

List<String> get rules => [rule1, rule2, rule2, ...].where((item) => item != null).toList()

请注意,如果您使用的是构造函数,则可以改为在构造函数中构建列表,如下所示:

class Friend {
  int id;
  String name;
  String pic;
  bool play;
  String rule0;
  String rule1;
  String rule2;
  String rule3;
  String rule4;
  String rule5;
  String rule6;
  String rule7;
  String rule8;
  String rule9;

  List<String> rules;

  Friend(
      {this.id,
      this.name,
      this.pic,
      this.play,
      this.rule0,
      this.rule1,
      this.rule2,
      this.rule3,
      this.rule4,
      this.rule5,
      this.rule6,
      this.rule7,
      this.rule8,
      this.rule9})
      : rules = [
          rule0,
          rule1,
          rule2,
          rule3,
          rule4,
          rule5,
          rule6,
          rule7,
          rule8,
          rule9,
        ].where((item) => item != null).toList(growable: false);
}

虽然我不会推荐(或者如果你这样做,你可能应该将规则*或规则设为私有或以某种方式维护状态)。字符串列表不存储对 rule0、rule1、... 字符串的引用,而是存储字符串本身。您可以通过制定规则 class 并将规则 0-9 定为最终规则来解决这个问题,但这有点复杂。


动态的项目列表很可能更有意义。 SQL 不处理那个,所以你将不得不为规则创建一个单独的 table。

你会有两个像这样的 table,其中 id 都是 PRIMARY KEY 而 friendId 是 FOREIGN KEY:

Friend(id, name, pic, play)Rule(id, friendId, text)

保存和更新现在会变得更加复杂。您必须更加小心地维护数据库中的规则列表,但这并不是那么困难。如果你知道你只会从一个位置写入列表(即一个 class),你可以保持 class 当前状态和初始状态之间的差异,但是实际上,除非您要处理数以千计的规则,否则它可能无关紧要。