<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 4451字,需瀏覽 9分鐘

           ·

          2021-09-29 05:19

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

          為什么要使用 shared_preferences ?如下場(chǎng)景,在設(shè)置頁(yè)面中有多個(gè)標(biāo)識(shí),比如是否允許4G下載、主題、字體大小等,希望這些設(shè)置改變后退出應(yīng)用程序,再次進(jìn)入,這些設(shè)置依然有效。

          首先將這些設(shè)置保存在內(nèi)存中明顯無(wú)法達(dá)到要求,因?yàn)橥顺鰬?yīng)用程序內(nèi)存也會(huì)釋放,那上傳到服務(wù)器呢?再次進(jìn)入的時(shí)候拉取服務(wù)器配置數(shù)據(jù),這種方案有兩個(gè)弊端:

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

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

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

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

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

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

          ?

          添加依賴

          在項(xiàng)目的 pubspec.yaml 文件中添加依賴:

          dependencies:
            shared_preferences: ^0.5.8

          執(zhí)行命令:

          flutter pub get

          1

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

          shared_preferences 支持的數(shù)據(jù)類(lèi)型有 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ù)時(shí)都有如下操作:

          return result ?? '';

          因?yàn)樽x取數(shù)據(jù)時(shí),如果沒(méi)有當(dāng)前 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();
          }

          此方法謹(jǐn)慎使用。

          Key 相關(guān)操作

          獲取所有的 Key:

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

          檢測(cè)是否 Key 是否存在:

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


          你可能還喜歡

          關(guān)注「老孟Flutter」
          讓你每天進(jìn)步一點(diǎn)點(diǎn)


          瀏覽 91
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  伊人丁香五月婷婷 | 国产麻豆剧传媒精品国产 | 超碰人人干人人操 | 亚洲青娱乐在线 | 拍拍拍拍拍拍拍拍拍拍拍拍拍拍拍拍拍电影 |