我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Flutter本地存储之基本的键值对存储怎么实现

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Flutter本地存储之基本的键值对存储怎么实现

这篇文章主要介绍“Flutter本地存储之基本的键值对存储怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Flutter本地存储之基本的键值对存储怎么实现”文章能帮助大家解决问题。

前言

在原生的 Android 或 iOS 中,都提供了基本的键值对存储方式,Android 是 SharedPreferences,iOS 是 NSUserDefaults。在 Flutter 中,提供了 shared_preferences 这个插件来实现本地键值对数据存储。实际上,shared_preferences 在 Android 就是使用 SharedPreferences 实现,在 iOS 上则是使用 NSUserDefaults 实现。

基本使用

在 pubspec.yaml 文件中添加以下代码:

dependencies:    flutter:        sdk: flutter    shared_preferences: ^2.0.18

我们将基础的计数应用修改为支持从上一次结果(即存储在本地的数值)开始增加。代码如下:

import 'package:flutter/material.dart';import 'package:shared_preferences/shared_preferences.dart';class MyApp extends StatefulWidget {  @override  _MyAppState createState() => _MyAppState();}class _MyAppState extends State<MyApp> {  int _counter = 0;  late SharedPreferences _prefs;  @override  void initState() {    super.initState();    _loadCounter();  }  void _loadCounter() async {    _prefs = await SharedPreferences.getInstance();    setState(() {      _counter = (_prefs.getInt('counter') ?? 0);    });  }  void _incrementCounter() async {    setState(() {      _counter++;    });    await _prefs.setInt('counter', _counter);  }  @override  Widget build(BuildContext context) {    return MaterialApp(      home: Scaffold(        appBar: AppBar(          title: Text('Shared Preferences 示例'),        ),        body: Center(          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: _incrementCounter,          tooltip: 'Increment',          child: Icon(Icons.add),        ),      ),    );  }}

上面的代码是一个基础的计数器应用,我们定义了一个_counter变量来保存计数器的值,并且使用 SharedPreferences 实例来存储和检索_counter变量的值。 在initState方法中,我们使用_loadCounter方法来加载_counter变量的值。在_loadCounter方法中,我们首先使用SharedPreferences.getInstance() 方法来获取 SharedPreferences 实例,然后使用 getInt()方法来检索 _counter 变量的值。如果检索到的值为 null,则将 _counter 变量的值设置为 0。 在 _incrementCounter 方法中,我们使用了setInt方法将 _counter 变量的值保存到 SharedPreferences 实例中来实现本地存储。 运行效果如下:

Flutter本地存储之基本的键值对存储怎么实现

存储其他类型数据

shared_preferences支持存储的数据类型有整型、浮点型(double)、字符串、布尔型和字符串数组。如果想存储对象,也可以通过 json 序列化和反序列化的方式实现。我们来看一个更复杂点的例子。

class MyApp extends StatefulWidget {  const MyApp({Key? key}) : super(key: key);  @override  _MyAppState createState() => _MyAppState();}class _MyAppState extends State<MyApp> {  // 初始化需要存储的值  int _counter = 0;  String _username = '';  bool _isDarkModeEnabled = false;  final _textController = TextEditingController(text: '');  // SharedPreferences 实例  late SharedPreferences _prefs;  // 加载 SharedPreferences 中存储的值  Future<void> _loadData() async {    _prefs = await SharedPreferences.getInstance();    setState(() {      _counter = _prefs.getInt('counter') ?? 0;      _username = _prefs.getString('username') ?? '';      _textController.text = _username;      _isDarkModeEnabled = _prefs.getBool('isDarkModeEnabled') ?? false;    });  }  void _incrementCounter() async {    setState(() {      _counter++;    });    await _prefs.setInt('counter', _counter);  }  // 保存用户名  void _saveUsername(String username) async {    setState(() {      _username = username;    });    await _prefs.setString('username', _username);  }  // 切换暗黑模式  void _toggleDarkMode(bool isDarkModeEnabled) async {    setState(() {      _isDarkModeEnabled = isDarkModeEnabled;    });    await _prefs.setBool('isDarkModeEnabled', _isDarkModeEnabled);  }  @override  void initState() {    super.initState();    _loadData();  }  @override  Widget build(BuildContext context) {    return MaterialApp(      title: 'Flutter SharedPreferences 示例',      theme: _isDarkModeEnabled ? ThemeData.dark() : ThemeData.light(),      home: Scaffold(        appBar: AppBar(          title: const Text('Flutter SharedPreferences 示例'),        ),        body: Center(          child: Column(            mainAxisAlignment: MainAxisAlignment.center,            children: <Widget>[              Text(                '计数器的值:$_counter',              ),              const SizedBox(height: 20),              TextFormField(                decoration: const InputDecoration(                  labelText: '请输入您的名字',                ),                controller: _textController,                onChanged: (value) {                  _saveUsername(value);                },              ),              const SizedBox(height: 20),              SwitchListTile(                title: const Text('启用暗黑模式'),                value: _isDarkModeEnabled,                onChanged: (value) {                  _toggleDarkMode(value);                },              ),            ],          ),        ),        floatingActionButton: FloatingActionButton(          onPressed: _incrementCounter,          tooltip: '递增计数器的值',          child: const Icon(Icons.add),        ),      ),    );  }}

上述代码增加了两个类型的存储,分别是字符串和布尔型,存储方式其实是类似的,布尔型使用 getBool 获取、setBool 存储;字符串则是使用 getStringsetString。我们通过布尔型变量控制是否启用暗黑模式,使用字符串类存储用户名。下面是运行的结果。

Flutter本地存储之基本的键值对存储怎么实现

关于“Flutter本地存储之基本的键值对存储怎么实现”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网行业资讯频道,小编每天都会为大家更新不同的知识点。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Flutter本地存储之基本的键值对存储怎么实现

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Flutter本地存储之基本的键值对存储怎么实现

这篇文章主要介绍“Flutter本地存储之基本的键值对存储怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Flutter本地存储之基本的键值对存储怎么实现”文章能帮助大家解决问题。前言在原生的
2023-07-05

Flutter本地存储之基本的键值对存储详解

在原生的 Android 或 iOS 中,都提供了基本的键值对存储方式,在 Flutter 中,提供了 shared_preferences 这个插件来实现本地键值对数据存储,本文就来和大家简单聊聊吧
2023-03-21

JavaScript本地存储怎么实现用户名存储

这篇文章主要介绍了JavaScript本地存储怎么实现用户名存储的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JavaScript本地存储怎么实现用户名存储文章都会有所收获,下面我们一起来看看吧。一、本地存储1
2023-07-02

Vue中的Strorage本地化存储怎么实现

本文小编为大家详细介绍“Vue中的Strorage本地化存储怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Vue中的Strorage本地化存储怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Sto
2023-06-30

vue中怎么实时监听本地存储

这篇文章主要介绍“vue中怎么实时监听本地存储”,在日常操作中,相信很多人在vue中怎么实时监听本地存储问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue中怎么实时监听本地存储”的疑惑有所帮助!接下来,请跟
2023-06-30

Vuex怎么结合storage实现用户信息本地存储

这篇文章主要介绍“Vuex怎么结合storage实现用户信息本地存储”,在日常操作中,相信很多人在Vuex怎么结合storage实现用户信息本地存储问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vuex怎么结
2023-06-30

MySQL怎么有效的实现存储IP地址及字符串IP和数值之间的转换

小编给大家分享一下MySQL怎么有效的实现存储IP地址及字符串IP和数值之间的转换,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!之间,建议当存储IPv4地址时,应该使用32位的无符号整数(UNSIGNED INT)来存储I
2023-06-22

云存储不是唯一:企业利用云来实现降本增效的9大关键任务

在数字技术时代,企业应该以最大限度地使用云计算,提高业务灵活性,并且降低成本,尤其是对于那些每天必须处理大量不同任务的用户而言,云计算的优势更加明显。
云存储2024-12-03

HDFS怎么实现数据在不同存储层之间的自动迁移

在HDFS中,数据在不同存储层之间的自动迁移通常是通过数据生命周期管理功能来实现的。数据生命周期管理功能可以根据数据的访问频率、存储成本等因素,将数据自动迁移到不同的存储层,以实现数据的优化存储管理。具体来说,HDFS的数据生命周期管理功
HDFS怎么实现数据在不同存储层之间的自动迁移
2024-05-08

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录