如何在 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 当前状态和初始状态之间的差异,但是实际上,除非您要处理数以千计的规则,否则它可能无关紧要。
我正在编写一个 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 当前状态和初始状态之间的差异,但是实际上,除非您要处理数以千计的规则,否则它可能无关紧要。