iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Flutter本地存储之基本的键值对存储怎么实现
  • 277
分享到

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

2023-07-05 14:07:00 277人浏览 独家记忆
摘要

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

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

前言

在原生的 AndroidiOS 中,都提供了基本的键值对存储方式,Android 是 SharedPreferencesioS 是 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本地存储之基本的键值对存储怎么实现”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: Flutter本地存储之基本的键值对存储怎么实现

本文链接: https://www.lsjlt.com/news/352256.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • Flutter本地存储之基本的键值对存储怎么实现
    这篇文章主要介绍“Flutter本地存储之基本的键值对存储怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Flutter本地存储之基本的键值对存储怎么实现”文章能帮助大家解决问题。前言在原生的...
    99+
    2023-07-05
  • Flutter本地存储之基本的键值对存储详解
    目录前言基本使用存储其他类型数据总结前言 在原生的 Android 或 iOS 中,都提供了基本的键值对存储方式,Android 是 SharedPreferences,iOS 是 ...
    99+
    2023-03-21
    Flutter键值存储 Flutter 存储
  • JavaScript本地存储怎么实现用户名存储
    这篇文章主要介绍了JavaScript本地存储怎么实现用户名存储的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JavaScript本地存储怎么实现用户名存储文章都会有所收获,下面我们一起来看看吧。一、本地存储1...
    99+
    2023-07-02
  • HTML5本地存储globalStorage的基本语法是什么
    这篇文章主要介绍“HTML5本地存储globalStorage的基本语法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“HTML5本地存储globalStora...
    99+
    2022-10-19
  • Javascript怎么实现浏览器本地存储
    今天小编给大家分享一下Javascript怎么实现浏览器本地存储的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我...
    99+
    2022-10-19
  • Vue中的Strorage本地化存储怎么实现
    本文小编为大家详细介绍“Vue中的Strorage本地化存储怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Vue中的Strorage本地化存储怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Sto...
    99+
    2023-06-30
  • HTML5中怎么使用网络存储存储键值对的数据
    本篇内容介绍了“HTML5中怎么使用网络存储存储键值对的数据”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!...
    99+
    2022-10-19
  • vue中怎么实时监听本地存储
    这篇文章主要介绍“vue中怎么实时监听本地存储”,在日常操作中,相信很多人在vue中怎么实时监听本地存储问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue中怎么实时监听本地存储”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-30
  • Vuex怎么结合storage实现用户信息本地存储
    这篇文章主要介绍“Vuex怎么结合storage实现用户信息本地存储”,在日常操作中,相信很多人在Vuex怎么结合storage实现用户信息本地存储问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vuex怎么结...
    99+
    2023-06-30
  • JS项目中对本地存储进行二次的封装的实现
    目录前言定义恒量的键名下层实现上层调用总结前言 平时在开发的中,发现身边同事在使用localStorage和sessionStorage的时候,喜欢在代码里面直接调用,举个的栗子: ...
    99+
    2022-11-13
  • HTML5 本地存储中WebStorage使用以及实验是怎样的
    这期内容当中小编将会给大家带来有关HTML5 本地存储中WebStorage使用以及实验是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。 ...
    99+
    2022-10-19
  • C语言实现串的顺序存储表示与基本操作
    本文实例为大家分享了C语言实现串的顺序存储表示与基本操作代码,供大家参考,具体内容如下 1、串的三种存储表示 串,即:字符串。要注意的是,C语言中是没有字符串数据类型的,而将其作为一...
    99+
    2022-11-12
  • MySQL怎么有效的实现存储IP地址及字符串IP和数值之间的转换
    小编给大家分享一下MySQL怎么有效的实现存储IP地址及字符串IP和数值之间的转换,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!之间,建议当存储IPv4地址时,应该使用32位的无符号整数(UNSIGNED INT)来存储I...
    99+
    2023-06-22
  • SQL Server中怎么实现数据行批量插入脚本的存储
    这篇文章给大家介绍SQL Server中怎么实现数据行批量插入脚本的存储,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。本存储运行于SQL Server 2005或以上版本,T-SQL代...
    99+
    2022-10-18
  • Android开发----实现登录注册页面(创建本地数据库,对注册的账户密码进行存储)
    实现登录注册页面(创建本地数据库,对注册的账户密码进行存储) 写在前面: 本文实现了登录注册页面的开发,创建了本地数据库,存储注册的账户密码。注册账户为手机号,对账户为手机号进行了正则化验证。登录成功...
    99+
    2023-10-21
    数据库 android
  • js怎么实现给存储的cookie值一个有效期并让次日自动失效
    本篇内容主要讲解“js怎么实现给存储的cookie值一个有效期并让次日自动失效”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“js怎么实现给存储的cookie值一...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作