继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

【备战春招】第14天 Flutter中的数据存储

GT9456
关注TA
已关注
手记 89
粉丝 12
获赞 17

课程名称Flutter从入门到进阶 实战携程网App 一网打尽核心技术
课程章节:Flutter进阶提升:网络编程与数据存储技术
课程讲师CrazyCodeBoy

课程内容

数据存储是开发APP必不可少的一部分,比如页面缓存,从网络上获取数据的本地持久化等。

shared_preferences

shared_preferences是一个本地数据存取的插件,具有以下特点:

  • 简单的,异步的,持久化的key-value存储系统;
  • 在Android上是基于SharedPreferences实现的;
  • 在iOS上基于NSUserDefaults的;

使用shared_preferences,需要先在pubspec.yaml中导入插件

dependencies:
  shared_preferences: ^0.5.1+

与 Android 中的 SharedPreferences 中类似,shared_preferences也对原始的数据类型(int、string、bool、double)提供了相应的 getter 和 setter 方法。

final prefs = await SharedPreferences.getInstance();
//存储数据
prefs.setInt('counter', counter);
//读取数据
final counter = prefs.getInt('counter') ?? 0;}
//删除数据
prefs.remove('counter');

还可以在读写之前,检查一下数据是否存在,通过containsKey()方法,方法返回一个bool值。

prefs.containsKey("counter")

基于shared_preferences实现一个计数器效果的 demo。

void main() {
  runApp(MaterialApp(
    home: Scaffold(
      appBar: AppBar(
        title: Text('shared_preferences'),
      ),
      body: _CounterWidget(),
    ),
  ));
}

class _CounterWidget extends StatefulWidget {
  @override
  _CounterState createState() => _CounterState();
}

class _CounterState extends State<_CounterWidget> {
  String countString = '';
  String localCount = '';

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Column(
        children: <Widget>[
          RaisedButton(
              onPressed: _incrementCounter, child: Text('Increment Counter')),
          RaisedButton(onPressed: _getCounter, child: Text('Get Counter')),
          Text(
            countString,
            style: TextStyle(fontSize: 20),
          ),
          Text(
            'result:' + localCount,
            style: TextStyle(fontSize: 20),
          ),
        ],
      ),
    );
  }

  _incrementCounter() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    setState(() {
      countString = countString + " 1";
    });
    int counter = (prefs.getInt('counter') ?? 0) + 1;
    await prefs.setInt('counter', counter);
  }

  _getCounter() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    setState(() {
      localCount = prefs.getInt('counter').toString();
    });
  }
}

课程收获

在使用shared_preferences时每次都需要去获取它的实例,如果多个地方用到,那么每次都要实例化一次。这样代码的可读性差,后期的维护成本也变得很高,而且还不支持存储Map类型,可以把shared_preferences封装一个通用而且使用更简单的库。

图片描述

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP