Flutter:存储数据的最佳方式,使其可供不同的小部件访问并在应用程序初始化时计算一次

问题描述 投票:0回答:1

我想以类似的方式存储数据:

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 数据库不感兴趣,因为它对我来说更新、管理数据会更困难。

flutter dart
1个回答
0
投票

您可以像这样定义一个 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
地图,则必须重新计算排序的变量。

© www.soinside.com 2019 - 2024. All rights reserved.