首页 > 解决方案 > 如何在 Flutter 中构建动态字符串列表?

问题描述

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

规则与朋友相关,所以它在一个类 Friend 中,具有 id、name、rule0、rule1、rule2...rule9。这是真的很烦人,但我认为我需要将它放在 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

}

标签: databasestringflutterdynamic-listsqflite

解决方案


我不完全确定,但您似乎在 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);
}

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


将其作为动态项目列表很可能更有意义。SQL 不处理这个问题,因此您将不得不为规则创建一个单独的表。

您将有两个类似这样的表,id它们都是 PRIMARY KEYs 并且friendId是 FOREIGN KEY:

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

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


推荐阅读