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

时间:2019-01-16 02:33:18

标签: database string flutter dynamic-list sqflite

我正在编写一个应用程序/游戏,用户可以在 SQFLite数据库中存储的文本字段上输入自己的规则。

规则与朋友相关,所以它在Friend类中,具有ID,名称,rule0,rule1,rule2 ... rule9。 REALLY 令人讨厌的原因很多,但我认为我需要将它放在Friend类中,以便将其存储在正确的friend.id中。

当我尝试时,出现了明显的错误“只能在初始化程序上访问静态成员” List<Strings> rules = [rule0, rule1]; 要么 List<dynamic> rules = [...];

有人知道我该如何解决吗? 创建一个新的规则类,每个规则都有与正确朋友相关的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

}

1 个答案:

答案 0 :(得分:0)

我不确定,但是似乎您在SQL方面以及数据的类表示方面都遇到了麻烦。

如果您确定只有一定数量的规则,则可以按照当前的方式进行处理。我要做的另一件事是为规则列表创建一个“ 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);
}

我不建议这样做(或者,如果这样做,您可能应该将rule *或规则设为私有或以某种方式维护状态)。字符串列表不存储对rule0,rule1,...字符串的引用,而是存储字符串本身。您可以通过制作Rule类并将rule0-9最终化来解决此问题,但这有点复杂。


最有可能的是,将其动态地列出项目。 SQL无法处理该问题,因此您将不得不为规则创建一个单独的表。

您将有两个类似这样的表,其中id既是主键,friendId是外键:

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

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