当前位置: 首页 > news >正文

有多少网站可以推广业务那个公司做app

有多少网站可以推广业务,那个公司做app,购物网站制作教程,社交电商系统开发在移动应用开发中,本地持久化存储是必不可少的功能。无论是保存用户登录状态、应用配置,还是缓存数据,合理选择存储方案都能提高应用的性能与用户体验。在 Flutter 中,常用的本地存储方式主要有两种:SharedPreferences…

在移动应用开发中,本地持久化存储是必不可少的功能。无论是保存用户登录状态、应用配置,还是缓存数据,合理选择存储方案都能提高应用的性能与用户体验。

在 Flutter 中,常用的本地存储方式主要有两种:SharedPreferencesHive

本文将带你快速了解这两种方式的特点,并通过简单的 Demo 展示如何使用它们。


🔹 1. SharedPreferences

1.1 简介

SharedPreferences 是 Flutter 提供的轻量级存储方式,底层使用 Key-Value 形式存储,适合存储少量配置信息。

1.2 使用步骤

  1. 添加依赖

# pubspec.yaml
dependencies:shared_preferences: ^2.2.2
  1. 示例代码

import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';class SharedPreferencesDemo extends StatefulWidget {@override_SharedPreferencesDemoState createState() => _SharedPreferencesDemoState();
}class _SharedPreferencesDemoState extends State<SharedPreferencesDemo> {String _username = "";Future<void> _saveData() async {final prefs = await SharedPreferences.getInstance();await prefs.setString("username", "FlutterUser");setState(() {_username = "FlutterUser";});}Future<void> _loadData() async {final prefs = await SharedPreferences.getInstance();setState(() {_username = prefs.getString("username") ?? "暂无数据";});}@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text("SharedPreferences Demo")),body: Center(child: Column(mainAxisAlignment: MainAxisAlignment.center,children: [Text("用户名:$_username"),ElevatedButton(onPressed: _saveData,child: Text("保存数据"),),ElevatedButton(onPressed: _loadData,child: Text("读取数据"),),],),),);}
}

🔹 2. Hive

2.1 简介

Hive 是 Flutter 社区非常流行的 NoSQL 本地数据库,支持持久化存储、加密和复杂数据结构,性能优于 SharedPreferences

2.2 使用步骤

  1. 添加依赖

# pubspec.yaml
dependencies:hive: ^2.2.3hive_flutter: ^1.1.0# 如果要存储复杂对象
# dev_dependencies:
#   hive_generator: ^2.0.1
#   build_runner: ^2.3.3
  1. 初始化 Hive

import 'package:flutter/material.dart';
import 'package:hive_flutter/hive_flutter.dart';void main() async {WidgetsFlutterBinding.ensureInitialized();await Hive.initFlutter();await Hive.openBox("settings");runApp(MyApp());
}class MyApp extends StatelessWidget {@overrideWidget build(BuildContext context) {return MaterialApp(title: "Hive Demo",home: HiveDemo(),);}
}class HiveDemo extends StatefulWidget {@override_HiveDemoState createState() => _HiveDemoState();
}class _HiveDemoState extends State<HiveDemo> {final box = Hive.box("settings");String _username = "暂无数据"; // 本地存储的用户名void _saveData() {box.put("username", "HiveUser");setState(() {_username = "HiveUser"; // 立即更新 UI});}void _loadData() {final value = box.get("username", defaultValue: "暂无数据");setState(() {_username = value;});}@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text("Hive Demo")),body: Center(child: Column(mainAxisAlignment: MainAxisAlignment.center,children: [Text("用户名:$_username"),ElevatedButton(onPressed: _saveData,child: Text("保存数据"),),ElevatedButton(onPressed: _loadData,child: Text("读取数据"),),],),),);}
}

2.3 封装 HiveService(存储数组示例)

在实际项目中,为了方便调用,可以对 Hive 进行二次封装,例如存储数组:

import 'package:hive/hive.dart';class HiveService {Future<void> saveArray(String key, List<dynamic> array) async {var box = await Hive.openBox('myBox');await box.put(key, array); // 保存数组}Future<List<dynamic>> getArray(String key) async {var box = await Hive.openBox('myBox');return box.get(key, defaultValue: []); // 获取数组,默认值为空列表}
}

这样,我们只需调用 HiveService().saveArray("users", ["张三", "李四"]) 即可保存数组,调用 HiveService().getArray("users") 即可获取,十分方便。


🔹 3. 对比总结

特性SharedPreferencesHive
存储方式Key-ValueNoSQL 本地数据库
适用场景配置项、布尔开关、少量数据列表、对象、大量本地数据
性能适合轻量存储高性能,支持大规模数据存储
数据类型基础类型(String/Int/Bool)支持复杂对象和数组
易用性简单易上手初学需要配置,但功能更强大
加密支持支持 AES 加密

结论

  • 如果只是存储登录状态或主题设置,用 SharedPreferences 就够了。

  • 如果需要存储数组、对象或大量数据,推荐使用 Hive,并可通过封装服务类提高代码复用性。

http://www.dtcms.com/a/581781.html

相关文章:

  • 正规的大连网站建设a963中华室内设计官网
  • 中承信安信创软件检测:CMA资质+国家标准双重保障的测试报告
  • #智能CI/CD流水线与AIOps 论坛@AiDD深圳站
  • 医疗AI模型与控制器自动化CI/CD流水线
  • NumPy -数组运算与操作
  • 中美最近军事新闻邯郸网站优化公司
  • windows本机vscode通过ssh免密登录远程linux服务器 git push/pull 免密
  • go语言网站开发教程门户网站是如何做引流的
  • SG-ECAT_S-TCP(EtherCAT 转 ModbusTCP 网关)
  • 分享一些在C++中使用异常处理的最佳实践
  • 物流网站怎么开网络最好的运营商
  • 学习随笔-async和await
  • 祁阳做网站河南工程建设验收公示网
  • PCIe协议分析仪-VIAVI设置抓取ASPM协商过程
  • ThreadLocal 相关知识点
  • OSG新版GLSL语法全解析
  • 智守边界:入侵报警系统的主动防御时代
  • 为什么网站建设起来搜素不到电子商务网站建设考题
  • 济南网站建设是什么合肥seo网络营销推广
  • 【Hot100|4-LeetCode 283. 移动零 】
  • 操作系统拿着文件名查找磁盘文件的全过程
  • 【Hot100 | 6 LeetCode 15. 三数之和】
  • 哪些网站用wordpress建设银行网站总是崩溃
  • c#实现redis的调用与基础类
  • 【深度学习新浪潮】什么是投机解码?大模型推理优化的核心技术解析(含代码实操)
  • Verilog函数function
  • 做电商宠物带哪个网站最好网络营销方法的选择
  • 超融合系统七大核心技术详解
  • Spring Boot 2.7.18(最终 2.x 系列版本)1 - 技术选型:连接池技术选型对比;接口文档技术选型对比
  • 从0到1做一个“字母拼词”Unity小游戏(含源码/GIF)- 单词字母打乱及字母拼词填空逻辑