iT邦幫忙

2021 iThome 鐵人賽

DAY 6
0
Mobile Development

Flutter with GetX, loading*175%歷程 系列 第 6

[Day06] Flutter with GetX shared_preference

  • 分享至 

  • xImage
  •  

Shared preference

App關閉再次啟動後,需要保存的資料可以先保存在shared_preference
Android 也叫Shared preferences, iOS是UserDefault
首先建立一個Class, 並使instance不會重new的singleton
在init() 裡先取得instance SharedPreferences.getInstance()
假設會存accessToken 和 userName 這兩個屬性

import 'package:it_home/utils/static_name.dart';
import 'package:shared_preferences/shared_preferences.dart';

class UserDefault {
  static UserDefault instance = UserDefault._internal();
  factory UserDefault() => instance;

  UserDefault._internal();
  late SharedPreferences _prefs;

  init() async {
    _prefs = await SharedPreferences.getInstance();
  }

  String get accessToken => _prefs.getString(ACCESS_TOKEN) ?? "";
  set accessToken(String? value) {
    if (value != null) {
      _prefs.setString(ACCESS_TOKEN, value);
    }
  }

  set userName(String name) => _prefs.setString(USER_NAME, name);
  String get userName => _prefs.getString(USER_NAME) ?? "";

}

開一個空的 static_name.dart 檔(或者自己習慣的命名)
並將hard code的字串寫在另一個檔案裡(避免再次用到的時候寫錯)
(ACCESS_TOKEN, USER_NAME)

const String ACCESS_TOKEN = 'accessToken';
const String USER_NAME = 'user_name';

接著在main.dart 裡面新增
在app啟動時 將SharedPreferences 先new一次

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  await UserDefault().init();
  runApp(MyApp());
}

最後使用時呼叫UserDefault().屬性 進行讀或寫

  @override
  void onInit() {
    print(UserDefault().userName);
    UserDefault().userName = "it_home_user";
    print(UserDefault().userName);

    super.onInit();
  }

本篇的GitHub source code

下一篇將為大家介紹 image_picker


上一篇
[Day05] Flutter with GetX carousel slider 水平輪播
下一篇
[Day07] Flutter with GetX image picker 手機相簿選照片
系列文
Flutter with GetX, loading*175%歷程 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言