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

 

文件存儲

......后續更新

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM