Flutter / Dart:地图列表与小部件列表?哪个更好?
Posted
技术标签:
【中文标题】Flutter / Dart:地图列表与小部件列表?哪个更好?【英文标题】:Flutter / Dart : List of maps vs List of Widgets? Which is better? 【发布时间】:2021-06-30 13:36:07 【问题描述】:我正在创建一种“交互式字典”。显然,字典将由 WORDS(作为条目)组成。所以我定义了“单词”是什么:一系列元素:一个主要的英语单词、一个同义词列表、一个反义词列表、法语翻译等......
到目前为止,我已经创建了一个包含所有这些字段的“WORD WIDGET”。 因此,我的 wordBank 列表将包含一个“单词小部件列表”。
我想知道这是否是一种组织数据的好方法,如果一个 MAPS 列表会更好? 在使用列表、排序、获取元素等时会不会有性能差异?
这是我构建它的方式:
enum Nature
nom_masc,
nom_fem,
adjectif,
adverbe,
verbe,
verbe_irr,
preposition,
class Word
final int id;
final Nature nature;
final String theme;
final List<String> french; // the first element is the primary word
final List<String> english; // the first element is the primary word
final String image;
final String sound; // to be used as label2 in case of input type question
final String wDef; // a written definion of the main word
final String oDef; // an oral definition of the main word
final String phon; // a phonetic transcription of the word
Word(
@required this.id,
@required this.nature,
@required this.theme,
@required this.french,
@required this.english,
this.image,
this.sound,
this.wDef,
this.oDef,
this.phon,
);
```
【问题讨论】:
【参考方案1】:总是更喜欢核心数据列表而不是 UI 小部件列表。优点很多:
保持后端和前端解耦始终是一个好习惯。
保留地图列表将有助于您在应用中的任何位置重复使用该列表中的数据。就像说您想制作另一个相同数据的列表,但小部件设计会有所不同,或者您可能只想在地图中显示一些数据,这些条件可以通过地图列表而不是小部件列表轻松满足.
比较每个的数据类型。 Map 类型的对象将占用更少的空间,因为它只包含数据。但另一方面,Widget 的对象会根据 Widget 树的深度和子 Widget 占用大量空间。
如果您保留地图列表,则可以轻松自定义生成的列表视图。在显示 ListView 时说,您希望根据同一页面上存在的其他一些数据为子小部件提供不同的颜色。使用地图列表执行起来会容易得多。
还有更多优点,而且它使代码保持干净且易于管理。
【讨论】:
这是我到目前为止的结构方式: 我现在将代码放在问题中以使其更清晰。 上面一个很好,因为它只包含用于创建小部件的数据,而不是小部件本身。使用地图代替地图只会增加复杂性,而性能提升可以忽略不计。 所以你认为创建一个“WORD”类是一个不错的主意?我可以继续这样吗?我的 wordBank 是一个“WORD”列表。 是的,去吧。并且说将来您需要将此数据传递给 REST API 或其他东西,并且需要将其转换为 Map 或 JSON 字符串,只需覆盖 Word 类的 toMap 和 toString 方法即可。【参考方案2】:根据我从您的描述中了解到的情况,有几件事值得一提:
没有小部件列表,而是有任何数据结构来存储数据(列表、映射任何东西都取决于用例)并将其包装到小部件中,同时向用户显示它们。
现在要根据您的用例存储此数据,使用地图可能会有所帮助,因为当您在字典中查询所需的任何单词时,它可以减少搜索时间,只有一个具有特定拼写的唯一单词.列表适合存储任何数据,当您对其中存储的数据没有任何特殊条件(如此处的字典)时,因此每次搜索元素时都会执行线性搜索。
因此,您可以将单词(字符串)映射到单词对象,并根据您想要的单词,查询该映射,检索数据并将该数据包装到 WordWidget 中,同时将其显示给用户。
此外,作为软件开发的一般做法,我们会尽量保持松散的解耦。因此,提供数据的层(或数据结构)应该只用于此目的,而接收数据并将其包装到 UI 元素中的层应该是分开的。这样,您的代码也可以根据未来的任何用例进行维护和扩展。
【讨论】:
以上是关于Flutter / Dart:地图列表与小部件列表?哪个更好?的主要内容,如果未能解决你的问题,请参考以下文章
在 Flutter 中使用 Dart,如何添加到地图列表中的地图列表中?