Flutter本地存儲
和Android、Ios類似,Flutter也支持Preferences(Shared Preferences and NSUserDefaults) 、文件、和Sqlite3。
只不過要想使用這個功能需要引入官方倉庫的相應插件,那么我們就分別來看下這三種存儲方式的使用方法。
Preferences存儲
Flutter中本身並不支持Preferences存儲,需要借助於第三發的組件來實現。
插件搜索地址: https://pub.flutter-io.cn/packages/
在右側選擇github即可進入github下載
下載后配置
此處配置省略....
(shared_preferences)使用:
import 'dart:async'; import 'package:flutter/material.dart'; import 'package:shared_preferences/shared_preferences.dart'; void main() { runApp(MaterialApp(home: MyApp())); } class MyApp extends StatelessWidget { final String mUserName = "userName"; final _userNameController = new TextEditingController(); @override Widget build(BuildContext context) { save() async{ SharedPreferences prefs = await SharedPreferences.getInstance(); prefs.setString(mUserName, _userNameController.value.text.toString()); } Future<String> get() async { var userName; SharedPreferences prefs = await SharedPreferences.getInstance(); userName = prefs.getString(mUserName); return userName; } return new Builder(builder: (BuildContext context) { return new Scaffold( appBar: AppBar( title: Text("SharedPreferences"), ), body: Center( child: new Builder(builder: (BuildContext context){ return Column( children: <Widget>[ TextField( controller: _userNameController, decoration: InputDecoration( contentPadding: const EdgeInsets.only(top: 10.0), icon: Icon(Icons.perm_identity), labelText: "請輸入用戶名", helperText: "注冊時填寫的名字"), ), RaisedButton( color: Colors.blueAccent, child: Text("存儲"), onPressed: () { save(); Scaffold.of(context).showSnackBar( new SnackBar(content: Text("數據存儲成功"))); }), RaisedButton( color: Colors.greenAccent, child: Text("獲取"), onPressed: () { Future<String> userName = get(); userName.then((String userName) { Scaffold.of(context).showSnackBar( SnackBar(content: Text("數據獲取成功:$userName"))); }); }), ], ); }), ), ); }); } }
加上async和await關鍵字,因為SharedPreferences的存貯也是一個輕量級的耗時操作,所以需要在異步中進行的。
使用SharedPreferences.getInstance()方法來實例化SharedPreferences對象,使用它的setString方法來存儲用戶輸入的字符串。
setString(key, value) 其中key就是你存貯的名稱,value就是你存儲的值
Future save() async{ SharedPreferences prefs = await SharedPreferences.getInstance(); prefs.setString(mUserName, _userNameController.value.text.toString()); }
..傳參: Future set(String key,String value) async{ //根據傳入參數進行查詢 ... prefs.setString(key,value); }
SharedPreferences存儲其他對象方法:
prefs.setBool(key, value) prefs.setDouble(key, value) prefs.setInt(key, value) prefs.setStringList(key, value)
get方法:
Future<String> get() async { var userName; SharedPreferences prefs = await SharedPreferences.getInstance(); userName = await prefs.getString(mUserName); return userName; }
文件存儲
......后續更新