Android上最基本的一个存储方式就是SharedPreferences,flutter上也有一个基于sp的插件。
该插件封装了NSUserDefaults
(IOS)和SharedPreferences
(Android),由于数据是异步存储到磁盘,不能保证在你return之后就生效, 所以尽量不要使用这个插件存储一些关键性数据。
既然是要分析源码,首先先把基本用法奉上。
基本用法
在项目的pubspec.yaml
文件中,添加以下内容:
dependencies:
shared_preferences: ^0.5.3+4
然后执行 packages get
。接下来新建一个dart文件,贴入如下代码:
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
void main() {
runApp(MaterialApp(
home: Scaffold(
body: Center(
child: RaisedButton(
onPressed: _incrementCounter,
child: Text('Increment Counter'),
),
),
),
));
}
_incrementCounter() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
int counter = (prefs.getInt('counter') ?? 0) + 1;
print('Pressed $counter times.');
await prefs.setInt('counter', counter);
}
运行,点击屏幕中心按钮,会看到如下打印:
I/flutter (30837): Pressed 1 times.
I/flutter (30837): Pressed 2 times.
...
源码分析
好了,以上就是sp的用法了,是不是很简单? ^_^
接下来一起看下源码,首先是获取sp的实例:SharedPreferences prefs = await SharedPreferences.getInstance();//注意,await必须在async修饰的函数中使用,表示异步
对应的源码如下:
const MethodChannel _kChannel =
MethodChan