flutter 本地存储 (shared_preferences)

时间:2023-03-09 15:46:19
flutter 本地存储 (shared_preferences)

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;
}

文件存储

......后续更新