首页 > 建站教程 > APP开发,混合APP >  Flutter笔记66:本地存储shared_preferences的简单使用正文

Flutter笔记66:本地存储shared_preferences的简单使用

Flutter本地存储比较常用的插件shared_preferences,它其实就是对IOS的NSUserDefaults和安卓的SharedPreferences的分别实现,这里是简单用法示例:

1、在pubspec.yaml中安装
1shared_preferences: ^0.5.12+2
2、读取方法如:
1void initFromCache() async{
2    final SharedPreferences prefs = await _prefs;
3    final value_nickname = prefs.getString('key_nickname');
4    final value_dart = prefs.getBool('key_dart');
5}
3、写入方法如:
1void saveInfo(String value_nickname) async{
2    final SharedPreferences prefs = await _prefs;
3    prefs.setString('key_nickname', value_nickname);
4    prefs.setBool('key_dart'this.value_dart);
5}
4、完整代码如下:
001import 'package:flutter/material.dart';
002import 'package:shared_preferences/shared_preferences.dart';
003 
004void main(){
005  runApp(MyApp());
006}
007 
008class MyApp extends StatelessWidget {
009  const MyApp({Key key}) : super(key: key);
010 
011  @override
012  Widget build(BuildContext context) {
013    return Container(
014      child: MaterialApp(
015        title: 'shared_preferences本地存储',
016        debugShowCheckedModeBanner: false,
017        home: FirstPage(),
018      ),
019    );
020  }
021}
022 
023class FirstPage extends StatefulWidget{
024  FirstPage({Key key}) : super(key:key);
025 
026  _FirstPageState createState() => _FirstPageState();
027}
028 
029class _FirstPageState extends State<FirstPage>{
030  //实例化SharedPreferences,是异步处理
031  Future<SharedPreferences> _prefs = SharedPreferences.getInstance();
032 
033  var controller = TextEditingController();
034  bool value_dart = false;
035  bool value_js = false;
036  bool value_java = false;
037 
038  @override
039  void initState() {
040    super.initState();
041    //从缓存中取出数据
042    initFromCache();
043  }
044 
045  //从缓存中取值
046  void initFromCache() async{
047    final SharedPreferences prefs = await _prefs;
048    final value_nickname = prefs.getString('key_nickname');
049    final value_dart = prefs.getBool('key_dart');
050    final value_js = prefs.getBool('key_js');
051    final value_java = prefs.getBool('key_java');
052    setState(() {
053      controller.text = (value_nickname==null ? '' : value_nickname);
054      this.value_dart = (value_dart==null ? false : value_dart);
055      this.value_js = (value_js==null ? false : value_js);
056      this.value_java = (value_java==null ? false : value_java);
057    });
058  }
059 
060  //将值存储到缓存
061  void saveInfo(String value_nickname) async{
062    final SharedPreferences prefs = await _prefs;
063    prefs.setString('key_nickname', value_nickname);
064    prefs.setBool('key_dart'this.value_dart);
065    prefs.setBool('key_js', this.value_js);
066    prefs.setBool('key_java', this.value_java);
067  }
068 
069  @override
070  Widget build(BuildContext context) {
071   return Scaffold(
072     appBar: AppBar(
073       title: Text('SharedPreferences示例'),
074     ),
075     body: Container(
076       padding: EdgeInsets.all(10.0),
077       child: Column(
078         crossAxisAlignment: CrossAxisAlignment.center,
079         children: [
080           TextField(
081             controller: controller,
082             decoration: InputDecoration(
083               labelText: '昵称',
084               hintText: '请输入昵称'
085             ),
086           ),
087           Text('你喜欢的编程语言'),
088           Row(
089             mainAxisAlignment: MainAxisAlignment.center,
090             children: [
091               Text('Dart'),
092               Switch(
093                 value: value_dart,
094                 onChanged: (isChanged){
095                   setState(() {
096                     this.value_dart = isChanged;
097                   });
098               })
099             ],
100           ),
101           Row(
102             mainAxisAlignment: MainAxisAlignment.center,
103             children: [
104               Text('Javascript'),
105               Switch(
106                 value: value_js,
107                 onChanged: (isChanged){
108                   setState(() {
109                     this.value_js = isChanged;
110                   });
111               })
112             ],
113           ),
114           Row(
115             mainAxisAlignment: MainAxisAlignment.center,
116             children: [
117               Text('Java'),
118               Switch(
119                 value: value_java,
120                 onChanged: (isChanged){
121                   setState(() {
122                     this.value_java = isChanged;
123                   });
124               })
125             ],
126           ),
127           MaterialButton(
128             child: Text('保存'),
129             onPressed: (){
130               this.saveInfo(controller.text);
131             },
132           )
133         ],
134       ),
135     ),
136   );
137  }
138}