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; }
文件存储
......后续更新