【Flutter】【package】shared_preferences 持久性存储数据到设备上

在这里插入图片描述

widget名字:shared_preferences: ^2.0.15

导入包到项目中去

  • 存储数据到磁盘(存储)上面

功能:

功能:

  1. 存储数据到磁盘(存储)上面
  2. 支持的数据类型int double bool String List

数据的保存,使用键值来区分

// 初始化
final prefs = await SharedPreferences.getInstance();
// 保存int类型
await prefs.setInt('counter', 10);
// 保存Bool类型
await prefs.setBool('repeat', true);
// 保存Double类型
await prefs.setDouble('decimal', 1.5);
//保存String类型
await prefs.setString('action', 'Start');
// 保存List<String>类型
await prefs.setStringList('items', <String>['Earth', 'Moon', 'Sun']);

数据的读取

//读取的key数值如果不存在就会返回null 
final int? counter = prefs.getInt('counter');
final bool? repeat = prefs.getBool('repeat');
final double? decimal = prefs.getDouble('decimal');
final String? action = prefs.getString('action');
final List<String>? items = prefs.getStringList('items');

使用实例和代码:

下面的代码实现,计数器,存储起来数值,下次在打开该软件,数值还是上传存储的数值
import 'dart:ffi';

import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';

void main() {
 runApp(const MyApp());
}

class MyApp extends StatelessWidget {
 const MyApp({super.key});

 
 Widget build(BuildContext context) {
   return MaterialApp(
     title: 'Flutter Demo',
     theme: ThemeData(
       primarySwatch: Colors.blue,
     ),
     home: const MyHomePage(title: 'shared_preferences'),
   );
 }
}

class MyHomePage extends StatefulWidget {
 const MyHomePage({super.key, required this.title});

 final String title;

 
 State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
 final Future<SharedPreferences> _prefs = SharedPreferences.getInstance();
 late Future<int> _counter;

 
 void initState() {
   // TODO: implement initState
   super.initState();
   //读取之前存储的数值,如果key 不存在就赋值为0
   _counter = _prefs.then((SharedPreferences pref) {
     return pref.getInt('counter') ?? 0;
   });
 }

 Future<void> _incrementCounter() async {
   final SharedPreferences prefs = await _prefs;
   final int counter = (prefs.getInt('counter') ?? 0) + 1;
   print('counter$counter');

   setState(() {
     _counter = prefs.setInt('counter', counter).then((bool success) {
       print('success$success');
       print('counter2$counter');
       return counter;
     });
   });
 }

 
 Widget build(BuildContext context) {
   return Scaffold(
     appBar: AppBar(
       title: Text(widget.title),
     ),
     body: Center(
       child: Column(
         mainAxisAlignment: MainAxisAlignment.center,
         children: <Widget>[
           const Text(
             'You have pushed the button this many times:',
           ),
           FutureBuilder<int>(
               future: _counter,
               builder: (context, AsyncSnapshot sdata) {
                 if (sdata.connectionState == ConnectionState.done) {
                   if (sdata.hasError) {
                     return Icon(Icons.error);
                   } else {
                     return Text('${sdata.data}');
                   }
                 } else {
                   return const CircularProgressIndicator();
                 }
               })
         ],
       ),
     ),
     floatingActionButton: FloatingActionButton(
       onPressed: _incrementCounter,
       tooltip: 'Increment',
       child: const Icon(Icons.add),
     ), // This trailing comma makes auto-formatting nicer for build methods.
   );
 }
}


截图:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值