首頁 > 軟體

ios開發Flutter之資料儲存

2022-07-20 18:02:09

偏好儲存

shared_preferences 類比iOS中的UserDefaults,使用方法比較簡單。 地址戳這裡 pub get之後會自動出現一個這樣的檔案generated_plugin_registrant.dart

資料儲存:

void _incrementCounter() {
  //建立物件,用於操作儲存和讀取。
  SharedPreferences.getInstance().then((SharedPreferences prefs) {
    setState(() {
      _counter++;
    });
    prefs.setInt('counter', _counter);
  });
  }

資料讀取:

 SharedPreferences.getInstance().then((SharedPreferences prefs) {
      setState(() {
        _counter = prefs.getInt('counter') ?? 0;
      });
    });

sqlite

使用sqlite需要搭配著path一起使用,在使用的過程中踩了一個坑, 明明我安裝了CocoaPods卻一直提示我CocoaPods not installed

Warning: CocoaPods not installed. Skipping pod install. 
CocoaPods is used to retrieve the iOS and macOS platform side's plugin code 
that responds to your plugin usage on the Dart side. 
Without CocoaPods, plugins will not work on iOS or macOS. 
For more info, see https://flutter.dev/platform-plugins To install 
see https://guides.cocoapods.org/using/getting-started.html#installation for instructions.

最後解決辦法 1;開啟終端 2; 輸入open /Applications/Android Studio.app即可。感覺挺奇怪的一個錯誤 感謝大佬,問題解決連結

建立表

1.getDatabasesPath來到了Documents下的目錄 2.join(value, 'test_db.db')使用的是一個path的pub庫配合使用 3.openDatabase開啟資料庫,onCreate建表 // 建表 CREATE TABLE 表名(,,)

 late Database _db;
  @override
  void initState() {
    super.initState();
    _initDatabase().then((value) => _db = value);
  }
  Future<Database> _initDatabase() async {
    Database db = await getDatabasesPath()
        .then((value) => join(value, 'test_db.db'))
        .then((value) => openDatabase(value, version: 1,
                onCreate: (Database db, int version) async {
              // 建表
              await db.execute(
                  'CREATE TABLE LK_Text(id INTEGER PRIMARY KEY,name TEXT, age INT)');
            }));
    return db;
  }

Future<String> getDatabasesPath() => databaseFactory.getDatabasesPath();是一個Future所以需要async配合著await來使用。 執行之後發現已經建立成功了,大小8kb, 是一個空表。

資料插入

_db插入資料可以使用事務處理

// 新增資料 INSERT INTO 表名 VALUES (值1,值2,...)

    _db.transaction((txn) async {
      txn
          .rawInsert('INSERT INTO LK_Text(name,age) VALUES("zhangsan",16)')
          .then((value) => print(value));
      txn
          .rawInsert('INSERT INTO LK_Text(name,age) VALUES("lisi",17)')
          .then((value) => print(value));
    });

資料查詢

// 資料查詢 SELECT 列名稱 FROM 表名稱 *萬用字元

_db.rawQuery('SELECT * FROM LK_Text').then((value) => print(value));

資料修改

// 修改資料 UPDATE 表名稱 SET 列名稱 = 新值 WHERE 列名稱 = 某值

_db.rawUpdate('UPDATE LK_TEXT SET age = 18 WHERE age = 16');

刪除表

1._db.delete刪除表 2._db.close()關閉資料庫

  _db
        .rawQuery('SELECT * FROM LK_Text')
        .then((value) =&gt; print(value))
        .then((value) {
      // 刪除表
      _db.delete('LK_Text').then((value) =&gt; _db.close());
    });

切記:由於這裡是非同步的操作,注意執行的順序!! 校驗的話還是很簡單,再次寫入資料的時候會報錯。

刪除資料庫

    // 刪除資料庫
    getDatabasesPath()
        .then((value) => join(value, 'test_db.db'))
        .then((value) => deleteDatabase(value));

整體來說還是比較簡單的,主要是把sqlite語句寫正確。

以上就是ios開發Flutter之資料儲存的詳細內容,更多關於ios Flutter資料儲存的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com