赞
踩
缓存少量的键值对信息(比如记录用户是否阅读了公告,或是简单的计数),可以使用 SharedPreferences。
SharedPreferences 会以原生平台相关的机制,为简单的键值对数据提供持久化存储,即在 iOS 上使用 NSUserDefaults,在 Android 使用 SharedPreferences。
SharedPreferences 的使用方式非常简单方便。不过需要注意的是,以键值对的方式只能存储基本类型的数据,比如 int、double、bool 和 string。
shared_preferences: 0.5.12+4
import 'dart:developer'; import 'package:flutter/material.dart'; import 'package:shared_preferences/shared_preferences.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { // This widget is the root of your application. @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', theme: ThemeData( primarySwatch: Colors.blue, ), home: MyHomePage(title: 'Flutter Demo Home Page'), ); } } class MyHomePage extends StatefulWidget { MyHomePage({Key key, this.title}) : super(key: key); final String title; @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { int _counter = 0; //涉及到耗时的文件读写,以异步的方式对这些操作进行包装 //读取SharedPreferences中key为counter的值 Future<int> _loadCounter() async { SharedPreferences prefs = await SharedPreferences.getInstance(); int counter = (prefs.getInt('counter') ?? 0); return counter; } //递增写入SharedPreferences中key为counter的值 Future<void> _incrementCounter() async { SharedPreferences prefs = await SharedPreferences.getInstance(); int counter = (prefs.getInt('counter') ?? 0) + 1; print("当前值: " + counter.toString()); prefs.setInt('counter', counter); //setter(setInt)方法会同步更新内存中的键值对,然后将数据保存至磁盘,因此无需再调用更新方法强制刷新缓存 } _fresh() { // _incrementCounter(); _incrementCounter().then((_) => { _loadCounter().then((value) { setState(() { _counter = value; }); print("before:$value"); }) }); } // void _incrementCounter() { // setState(() { // _counter++; // }); // } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( // Here we take the value from the MyHomePage object that was created by // the App.build method, and use it to set our appbar title. title: Text(widget.title), ), body: Center( // Center is a layout widget. It takes a single child and positions it // in the middle of the parent. child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Text( 'You have pushed the button this many times:', ), Text( '$_counter', style: Theme.of(context).textTheme.headline4, ), ], ), ), floatingActionButton: FloatingActionButton( onPressed: _fresh, tooltip: 'Increment', child: Icon(Icons.add), ), // This trailing comma makes auto-formatting nicer for build methods. ); } }
这里也为想要学习Flutter的朋友们准备了两份学习资料《Flutter Dart语言编程入门到精通》《Flutter实战》,从编程语言到项目实战,一条龙服务!!
第一章 Dart语言基础
第二章 Dart 异步编程
第三章 异步之 Stream 详解
第四章 Dart标准输入输出流
第五章 Dart 网络编程
第六章 Flutter 爬虫与服务端
第七章 Dart 的服务端开发
第八章 Dart 调用C语言混合编程
第九章 LuaDardo中Dart与Lua的相互调用
第六章:可滚动组件
第七章:功能型组件
第八章:事件处理与通知
第九章:动画
第十章:自定义组件
第十一章:文件操作与网络请求
第十二章:Flutter扩展
第十三章:国际化
第十四章:Flutter核心原理
第十五章:一个完整的Flutter应用
有需要学习资料的朋友扫描下方二维码即可免费领取!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。