zoukankan      html  css  js  c++  java
  • 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;
    }

    文件存储

    ......后续更新

  • 相关阅读:
    排序
    多线程
    swift demo
    支付宝支付
    TV端产品设计法则和分析
    产品经理提升修炼的方法
    “互联网+”不是传统企业的万金油
    我眼中理想的程序员
    来谈谈产品的模仿与抄袭的问题
    产品体验成就产品
  • 原文地址:https://www.cnblogs.com/john-hwd/p/10789368.html
Copyright © 2011-2022 走看看