Flutter学习12 - SharedPreferences

1、shared_preferences 插件

  • 类似于 Android 中的 SharedPreferences,键值对的形式进行本地存储

1.1、引入插件

在 pubspec.yaml 中引入

dependencies:
  shared_preferences: ^2.1.0

在需要用到的文件中引入

import 'package:shared_preferences/shared_preferences.dart';

1.2、基本用法

  • 写入数据
var sp = await SharedPreferences.getInstance();
sp.setString('name', 'Leon');
  • 读取数据
var sp = await SharedPreferences.getInstance();
var name = sp.getString('name');
  • 删除数据
var sp = await SharedPreferences.getInstance();
sp.remove('name');

2、代码示例

在这里插入图片描述

  • 工具类
import 'package:shared_preferences/shared_preferences.dart';

class SharedPreferencesUtils {
  static saveData<V>(String key, V value) async {
    var sp = await SharedPreferences.getInstance();
    var type = value.runtimeType;
    if (type == int) {
      sp.setInt(key, value as int);
    } else if (type == double) {
      sp.setDouble(key, value as double);
    } else if (type == String) {
      sp.setString(key, value as String);
    } else if (type == bool) {
      sp.setBool(key, value as bool);
    } else {
      print('类型不匹配');
    }
  }

  static getData(String key) async {
    var sp = await SharedPreferences.getInstance();
    print("sp.get:${sp.get(key)}");
    return sp.get(key);
  }

  static deleteAllData() async {
    var sp = await SharedPreferences.getInstance();
    for (String key in sp.getKeys()) {
      sp.remove(key);
    }
  }
}
  • 页面代码
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';

const String KEY_NAME = "name";
const String KEY_AGE = "age";
const String KEY_WEIGHT = "weight";
const String KEY_BOOL = "bool";

class SpDemo extends StatefulWidget {
  const SpDemo({super.key});

  
  State<SpDemo> createState() => _SpDemoState();
}

class _SpDemoState extends State<SpDemo> {
  var _resultShow = "";

  
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('SpDemo'),
      ),
      body: Column(
        children: [
          ElevatedButton(onPressed: _saveData2Sp, child: const Text('保存数据')),
          ElevatedButton(onPressed: _getDataFromSp, child: const Text('获取数据')),
          ElevatedButton(onPressed: _deleteDataInSp, child: const Text('删除数据')),
          Text(_resultShow),
        ],
      ),
    );
  }

  void _saveData2Sp() async {
    await SharedPreferencesUtils.saveData(KEY_NAME, 'Leon');
    await SharedPreferencesUtils.saveData(KEY_AGE, 26);
    await SharedPreferencesUtils.saveData(KEY_WEIGHT, 60.5);
    await SharedPreferencesUtils.saveData(KEY_BOOL, true);
    setState(() {
      _resultShow = "保存成功";
    });
  }

  void _getDataFromSp() async {
    var name = await SharedPreferencesUtils.getData(KEY_NAME);
    var age = await SharedPreferencesUtils.getData(KEY_AGE);
    var weight = await SharedPreferencesUtils.getData(KEY_WEIGHT);
    var b = await SharedPreferencesUtils.getData(KEY_BOOL);
    print('姓名:$name\n年龄:$age\n体重:$weight\n其他:$b');
    setState(() {
      _resultShow = "姓名:$name\n年龄:$age\n体重:$weight\n其他:$b";
    });
  }

  void _deleteDataInSp() async {
    await SharedPreferencesUtils.deleteAllData();
    setState(() {
      _resultShow = "删除成功";
    });
  }
}
import 'package:flutter/material.dart';

import 'SharedPreferencesDemo.dart';

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

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

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

相关推荐

  1. Flutter Web持久化存储SharedPreferences原理

    2024-04-07 09:54:02       37 阅读
  2. flutter学习-day12-可滚动组件和监听

    2024-04-07 09:54:02       27 阅读
  3. flutter学习-day10-布局类组件

    2024-04-07 09:54:02       37 阅读
  4. flutter学习-day11-容器类组件

    2024-04-07 09:54:02       38 阅读
  5. flutter学习-day16-自定义组件

    2024-04-07 09:54:02       45 阅读
  6. flutter学习-day19-国际化支持

    2024-04-07 09:54:02       36 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-07 09:54:02       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-07 09:54:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-07 09:54:02       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-07 09:54:02       20 阅读

热门阅读

  1. 前端八股文面试题——webpack工程化

    2024-04-07 09:54:02       10 阅读
  2. 17-小黑记事本

    2024-04-07 09:54:02       20 阅读
  3. ip地址与子网

    2024-04-07 09:54:02       56 阅读
  4. vue3.x专题十 ---- vuex使用方法总结(全局状态)

    2024-04-07 09:54:02       16 阅读
  5. vue3实现导出pdf、png功能

    2024-04-07 09:54:02       22 阅读
  6. Vue3:优化-从响应式数据中获取纯数据

    2024-04-07 09:54:02       19 阅读
  7. 用GPT-4调试 用Claude 3编码

    2024-04-07 09:54:02       16 阅读
  8. 前端进阶特训营-班会

    2024-04-07 09:54:02       18 阅读
  9. 内网安全之域内用户名枚举

    2024-04-07 09:54:02       47 阅读