我想以类似的方式存储数据:
Map countries {
'abw' : {
'continent' : "noam",
'population' : 112269,
'size' : 180,
'hasCapital': true
},
'afg' : {
'continent' : "apac",
'population' : 32890171,
'size' : 652864,
'hasCapital': true
},
'ago' : {
'continent' : "afri",
'population' : 24383301,
'size' : 1246700,
'hasCapital': true
},
'aia' : {
'continent' : "noam",
'population' : 14869,
'size' : 91,
'hasCapital': true
},
'ala' : {
'continent' : "euro",
'population' : 30055,
'size' : 1580,
'hasCapital': true
},
};
我更喜欢这种方式,因为很容易维护大量的记录和参数。 我希望可以从不同的小部件/页面访问它,我可以使用
import 'filewithcountries'
来实现这一点。
但是,我想创建列表,其中会对数据进行过滤、排序,例如:
Map countriesByContinent = {
'afri' : ['ago'],
'apac' : ['afg'],
'euro' : ['ala'],
'noam' : ['abw','aia'],
};
List<String> countriesBySize = ['aia', 'abw', 'ala', 'afg', 'ago'];
我知道,我可以创建助手来返回这样的数据:
List<String> countriesBySize = countries.bySize();
Map countriesByContinent = {
'afri' : countries.byContinent('afri'),
'apac' : countries.byContinent('apac'),
'euro' : countries.byContinent('euro'),
'noam' : countries.byContinent('noam'),
};
但是使用这种方法,我需要在每个需要的地方对数据进行过滤/排序。我想在打开应用程序时执行一次,然后访问该数据?
如何才能做到呢?我对创建的 SQL 数据库不感兴趣,因为它对我来说更新、管理数据会更困难。
您可以像这样定义一个 Country 类:
class Countries {
static final Map<String, dynamic> countries = {
'abw': {
'continent': "noam",
'population': 112269,
'size': 180,
'hasCapital': true
},
'afg': {
'continent': "apac",
'population': 32890171,
'size': 652864,
'hasCapital': true
},
'ago': {
'continent': "afri",
'population': 24383301,
'size': 1246700,
'hasCapital': true
},
'aia': {
'continent': "noam",
'population': 14869,
'size': 91,
'hasCapital': true
},
'ala': {
'continent': "euro",
'population': 30055,
'size': 1580,
'hasCapital': true
},
};
static final List<String> countriesBySize = Map.fromEntries(
countries.entries.toList()
..sort((e1, e2) => e1.value['size'].compareTo(e2.value['size'])))
.entries
.map((e) => e.key)
.toList();
static final List<String> countriesByPopulation = Map.fromEntries(
countries.entries.toList()
..sort((e1, e2) =>
e1.value['population'].compareTo(e2.value['population'])))
.entries
.map((e) => e.key)
.toList();
}
将变量设置为最终意味着您只能设置变量一次,确保其值不会更改。
您可以在您的应用程序中使用它,如下所示:
print(Countries.countriesBySize);
print(Countries.countriesByPopulation);
此方法仅在
countries
恒定时才有效。如果您愿意在应用程序运行时更新 countries
地图,则必须重新计算排序的变量。