<kbd id="5sdj3"></kbd>
<th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>

    【Flutter】簡單數(shù)據(jù)持久化

    共 4451字,需瀏覽 9分鐘

     ·

    2021-09-29 05:19

    保存數(shù)據(jù)到本地磁盤是應用程序常用功能之一,比如保存用戶登錄信息、用戶配置信息等。而保存這些信息通常使用 「shared_preferences」,它保存數(shù)據(jù)的形式為 Key-Value(鍵值對),支持 Android 和 iOS。shared_preferences 是一個第三方插件,在 Android 中使用 SharedPreferences,在 iOS中使用 NSUserDefaults。

    為什么要使用 shared_preferences ?如下場景,在設置頁面中有多個標識,比如是否允許4G下載、主題、字體大小等,希望這些設置改變后退出應用程序,再次進入,這些設置依然有效。

    首先將這些設置保存在內(nèi)存中明顯無法達到要求,因為退出應用程序內(nèi)存也會釋放,那上傳到服務器呢?再次進入的時候拉取服務器配置數(shù)據(jù),這種方案有兩個弊端:

    1. 用戶的在無網(wǎng)絡的情況下失效。
    2. 響應延遲,消耗不必要的流量。

    基于以上需求,這些配置需要持久化的保存在本地,而 shared_preferences 就是最受歡迎的框架之一, 適用于簡單數(shù)據(jù)的持久化,復雜且大量數(shù)據(jù)的持久化建議使用 SQLite。

    shared_preferences 持久化保存數(shù)據(jù),但在一下情況下會刪除數(shù)據(jù):

    • 卸載應用程序。
    • 在設置中清除應用數(shù)據(jù)。
    ?

    pub 地址:https://pub.flutter-io.cn/packages/shared_preferences

    Github 地址:https://github.com/flutter/plugins/tree/master/packages/shared_preferences/shared_preferences

    ?

    添加依賴

    在項目的 pubspec.yaml 文件中添加依賴:

    dependencies:
      shared_preferences: ^0.5.8

    執(zhí)行命令:

    flutter pub get

    1

    保存/讀取數(shù)據(jù)

    shared_preferences 支持的數(shù)據(jù)類型有 int、double、bool、string、stringList。

    int

    保存數(shù)據(jù):

    _saveData() async {
      var prefs = await SharedPreferences.getInstance();
      prefs.setInt('Key_Int'12);
    }
        

    讀取數(shù)據(jù):

    Future<int> _readData() async {
      var prefs = await SharedPreferences.getInstance();
      var result = prefs.getInt('Key_Int');
      return result ?? 0;
    }
        

    double

    保存數(shù)據(jù):

    _saveData() async {
        var prefs = await SharedPreferences.getInstance();
        prefs.setDouble('Key_Double'12.0);
      }
        

    讀取數(shù)據(jù):

    Future<double> _readData() async {
        var prefs = await SharedPreferences.getInstance();
        var result = prefs.getDouble('Key_Double');
        return result ?? 0.0;
      }

    bool

    保存數(shù)據(jù):

    _saveData() async {
      var prefs = await SharedPreferences.getInstance();
      prefs.setBool('Key_Bool'true);
    }

    讀取數(shù)據(jù):

    Future<bool> _readData() async {
      var prefs = await SharedPreferences.getInstance();
      var result = prefs.getBool('Key_Bool');
      return result ?? false;
    }

    String

    保存數(shù)據(jù):

    _saveData() async {
      var prefs = await SharedPreferences.getInstance();
      prefs.setString('Key''laomeng');
    }

    讀取數(shù)據(jù):

    Future<String> _readData() async {
      var prefs = await SharedPreferences.getInstance();
      var result = prefs.getString('Key');
      return result ?? '';
    }

    stringList

    保存數(shù)據(jù):

    _saveData() async {
      var prefs = await SharedPreferences.getInstance();
      prefs.setStringList('Key_StringList', ['laomeng','Flutter']);
    }

    讀取數(shù)據(jù):

    Future<List<String>> _readData() async {
      var prefs = await SharedPreferences.getInstance();
      var result = prefs.getStringList('Key_StringList');
      return result ?? [];
    }

    上面讀取數(shù)據(jù)時都有如下操作:

    return result ?? '';

    因為讀取數(shù)據(jù)時,如果沒有當前 Key 則返回 null,所以使用 ?? 操作符,如果 result 為 null,則返回 ?? 操作符后面的值。

    刪除數(shù)據(jù)

    刪除指定 Key 的數(shù)據(jù):

    Future<bool> _deleteData() async {
      var prefs = await SharedPreferences.getInstance();
      prefs.remove('Key');
    }

    清除所有數(shù)據(jù):

    Future<bool> _clearData() async {
      var prefs = await SharedPreferences.getInstance();
      prefs.clear();
    }

    此方法謹慎使用。

    Key 相關操作

    獲取所有的 Key:

    Future<Set<String>> _getKeys() async {
      var prefs = await SharedPreferences.getInstance();
      var keys = prefs.getKeys();
      return keys ?? [];
    }

    檢測是否 Key 是否存在:

    Future<bool> _containsKey() async {
      var prefs = await SharedPreferences.getInstance();
      return prefs.containsKey('Key') ?? false;
    }


    你可能還喜歡

    關注「老孟Flutter」
    讓你每天進步一點點


    瀏覽 91
    點贊
    評論
    收藏
    分享

    手機掃一掃分享

    分享
    舉報
    評論
    圖片
    表情
    推薦
    點贊
    評論
    收藏
    分享

    手機掃一掃分享

    分享
    舉報

    <kbd id="5sdj3"></kbd>
    <th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>
    久久久久久91亚洲精品中文字幕 | 影音先锋在线资源AV | 成人三区视频 | 色婷婷国产AV | 美女一级内射 |