您的位置:首页 > 财经 > 产业 > 聚名网买卖域名合法吗_手机游戏开发制作软件_如何开一个自己的网站_百度经验app

聚名网买卖域名合法吗_手机游戏开发制作软件_如何开一个自己的网站_百度经验app

2025/3/15 11:05:48 来源:https://blog.csdn.net/u014361280/article/details/146207217  浏览:    关键词:聚名网买卖域名合法吗_手机游戏开发制作软件_如何开一个自己的网站_百度经验app
聚名网买卖域名合法吗_手机游戏开发制作软件_如何开一个自己的网站_百度经验app

Flutter 学习之旅 之 flutter 使用 shared_preferences 实现简单的数据本地化保存封装

目录

Flutter 学习之旅 之 flutter 使用 shared_preferences 实现简单的数据本地化保存封装

一、简单介绍

1. shared_preferences

2. sqflite

3. file

二、shared_preferences

开发注意事项

使用注意事项

三、安装 shared_preferences

四、简单效果

五、简单案例实现

六、关键代码


一、简单介绍

Flutter 是一款开源的 UI 软件开发工具包,由 Google 开发和维护。它允许开发者使用一套代码同时构建跨平台的应用程序,包括移动设备(iOS 和 Android)、Web 和桌面平台(Windows、macOS 和 Linux)。

Flutter 使用 Dart 编程语言,它可以将代码编译为 ARM 或 Intel 机器代码以及 JavaScript,从而实现快速的性能。Flutter 提供了一个丰富的预置小部件库,开发者可以根据自己的需求灵活地控制每个像素,从而创建自定义的、适应性强的设计,这些设计在任何屏幕上都能呈现出色的外观和感觉。

1. shared_preferences

  • 简介shared_preferences 是一个简单的键值存储解决方案,适合存储少量数据,如用户偏好设置、配置信息等。

  • 特点

    • 简单易用:提供简单的 API,如 setStringgetInt 等,方便保存和读取数据。

    • 数据类型支持:支持常见的数据类型,如 Stringintbooldouble 等。

    • 异步操作:所有操作都是异步的,不会阻塞主线程。

  • 适用场景:适用于存储少量简单的键值对数据,不适合存储大量或复杂的数据。

2. sqflite

  • 简介sqflite 是一个用于与 SQLite 数据库交互的 Flutter 插件,适合存储结构化数据。

  • 特点

    • 结构化存储:支持复杂的数据结构,可以存储大量数据。

    • SQL 支持:通过 SQL 语句进行数据操作,适合复杂的查询和事务处理。

    • 持久化存储:数据存储在本地数据库文件中,应用卸载后数据不会丢失。

  • 适用场景:适用于需要存储大量结构化数据的应用,如待办事项、用户信息等。

3. file

  • 简介:使用 Dart 的 File 类直接操作文件系统,适合存储自定义格式的数据。

  • 特点

    • 直接操作:可以直接读写文件,支持二进制文件和文本文件。

    • 灵活性高:可以根据需要自定义数据格式和存储逻辑。

  • 适用场景:适用于需要存储自定义格式数据(如 JSON 文件、二进制文件等)的应用。

二、shared_preferences

官网地址:shared_preferences | Flutter package

shared_preferences 是 Flutter 中用于本地存储键值对数据的插件。它简单易用,适合存储少量数据,如用户偏好设置、配置信息等。通过 SharedPreferences.getInstance() 获取实例后,可使用 setStringsetIntsetBool 等方法保存数据,用 getStringgetIntgetBool 等方法获取数据,还可用 remove 删除指定键的数据。它基于平台的本地存储机制,如 Android 的 SharedPreferences 和 iOS 的 UserDefaults,数据存储在设备本地,应用卸载后数据会丢失。

在开发和使用 shared_preferences 时,需要注意以下几点:

开发注意事项

  1. 异步操作shared_preferences 的操作是异步的,需要使用 awaitthen 来处理结果,避免数据未保存或读取完成就执行后续逻辑。

  2. 类型匹配:保存和读取数据时,要确保类型一致。例如,保存时使用 setInt,读取时必须用 getInt,否则会报错。

  3. 初始化检查:在使用 shared_preferences 前,需确保实例已初始化完成,通常通过 await SharedPreferences.getInstance() 来获取实例。

  4. 错误处理:操作过程中可能会出现错误(如存储空间不足等),建议添加错误处理逻辑,避免应用崩溃。

使用注意事项

  1. 存储容量限制shared_preferences 适合存储少量数据,如用户偏好设置等,不适合存储大量数据,否则可能影响性能。

  2. 数据安全性:存储在 shared_preferences 中的数据是明文存储的,不适合存储敏感信息(如密码等),若需存储敏感信息,应进行加密处理。

  3. 数据持久性:存储的数据会随着应用卸载而丢失,若需要数据在卸载后仍保留,需考虑其他存储方案。

  4. 跨平台差异:虽然 shared_preferences 在 Android 和 iOS 上都能使用,但底层实现不同,可能会有细微差异,建议在不同平台上进行充分测试。

三、安装 shared_preferences

1、直接运行命令:flutter pub add shared_preferences

2、或者在 pubspec.yaml 添加

dependencies:shared_preferences: ^2.5.2

四、简单效果

五、简单案例实现

1、这里使用 Android Studio 进行创建 Flutter 项目

2、创建一个 application 的 Flutter 项目

3、编写一个 SharedPreferencesHelper


4、在 main 中测试

5、连接设备,运行效果如下

六、关键代码

1、SharedPreferencesHelper

import 'package:shared_preferences/shared_preferences.dart';class SharedPreferencesHelper {// 保存数据到 SharedPreferences// 参数:// - key: 存储的键// - value: 要保存的值,支持 String、int、bool、double 类型// 异常:// - 如果 value 的类型不支持,会抛出异常static Future<void> saveData<T>(String key, T value) async {// 获取 SharedPreferences 实例final prefs = await SharedPreferences.getInstance();// 根据 value 的类型调用不同的保存方法if (value is String) {await prefs.setString(key, value); // 保存字符串} else if (value is int) {await prefs.setInt(key, value); // 保存整数} else if (value is bool) {await prefs.setBool(key, value); // 保存布尔值} else if (value is double) {await prefs.setDouble(key, value); // 保存浮点数} else {// 如果 value 的类型不支持,抛出异常throw Exception('Unsupported type');}}// 从 SharedPreferences 获取数据// 参数:// - key: 存储的键// - T: 指定返回值的类型,必须是 String、int、bool、double 中的一种// 返回值:// - 如果 key 存在,返回对应的值;否则返回 null// 异常:// - 如果 T 不是支持的类型,会抛出异常static Future<T?> getData<T>(String key) async {// 获取 SharedPreferences 实例final prefs = await SharedPreferences.getInstance();// 根据 T 的类型调用不同的获取方法if (T == String) {return prefs.getString(key) as T?; // 获取字符串} else if (T == int) {return prefs.getInt(key) as T?; // 获取整数} else if (T == bool) {return prefs.getBool(key) as T?; // 获取布尔值} else if (T == double) {return prefs.getDouble(key) as T?; // 获取浮点数} else {// 如果 T 不是支持的类型,抛出异常throw Exception('Unsupported type');}}// 从 SharedPreferences 删除指定的键值对// 参数:// - key: 要删除的键static Future<void> removeData(String key) async {// 获取 SharedPreferences 实例final prefs = await SharedPreferences.getInstance();// 删除指定的键值对await prefs.remove(key);}
}

代码说明

  1. saveData 方法

    • 通过 SharedPreferences.getInstance() 获取实例。

    • 根据 value 的类型调用对应的保存方法(setStringsetInt 等)。

    • 如果 value 的类型不支持,抛出异常。

  2. getData 方法

    • 通过 SharedPreferences.getInstance() 获取实例。

    • 根据泛型参数 T 的类型调用对应的获取方法(getStringgetInt 等)。

    • 如果键不存在,返回 null

    • 如果 T 的类型不支持,抛出异常。

  3. removeData 方法

    • 通过 SharedPreferences.getInstance() 获取实例。

    • 调用 remove 方法删除指定的键值对。

这些注释可以帮助开发者快速理解每个方法的功能和使用方式,避免常见错误。

2、main

import 'package:flutter/material.dart';
import 'package:test_shared_preferences/shared_preferences_helper.dart';void main() {runApp(MyApp());
}// MyApp 是整个应用的入口,继承自 StatelessWidget
class MyApp extends StatelessWidget {@overrideWidget build(BuildContext context) {// 使用 MaterialApp 创建一个简单的 Flutter 应用return MaterialApp(home: HomeScreen(), // 设置应用的首页为 HomeScreen);}
}// HomeScreen 是应用的主页,继承自 StatefulWidget
// 因为需要在页面中保存和加载数据,所以需要使用 StatefulWidget
class HomeScreen extends StatefulWidget {@override_HomeScreenState createState() => _HomeScreenState();
}// _HomeScreenState 是 HomeScreen 的状态类
class _HomeScreenState extends State<HomeScreen> {final _controller = TextEditingController(); // 创建一个 TextEditingController,用于控制 TextFieldString _savedValue = ''; // 用于存储从 SharedPreferences 中加载的值@overridevoid initState() {super.initState();_loadSavedValue(); // 在页面初始化时加载保存的值}// _loadSavedValue 是一个异步方法,用于从 SharedPreferences 中加载数据Future _loadSavedValue() async {final value = await SharedPreferencesHelper.getData<String>('my_key'); // 从 SharedPreferences 中获取键为 'my_key' 的值setState(() {_savedValue = value ?? ''; // 如果值为空,则默认为空字符串_controller.text = _savedValue; // 将加载的值设置到 TextField 的控制器中});}// _saveValue 是一个方法,用于将用户输入的值保存到 SharedPreferences 中void _saveValue() async {final value = _controller.text; // 获取 TextField 中的值await SharedPreferencesHelper.saveData('my_key', value); // 将值保存到 SharedPreferences 中,键为 'my_key'setState(() {_savedValue = value; // 更新保存的值});}@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text('SharedPreferences Example'), // 设置应用栏标题),body: Padding(padding: EdgeInsets.all(16.0), // 设置页面的内边距child: Column(children: [TextField(controller: _controller, // 将控制器绑定到 TextFielddecoration: InputDecoration(labelText: 'Enter a value'), // 设置 TextField 的装饰,显示提示文本),ElevatedButton(onPressed: _saveValue, // 点击按钮时调用 _saveValue 方法child: Text('Save'), // 设置按钮的文本),Text('Saved Value: $_savedValue'), // 显示保存的值],),),);}
}

代码说明

  1. MyApp

    • 是整个应用的入口,使用 MaterialApp 创建一个简单的 Flutter 应用,并设置首页为 HomeScreen

  2. HomeScreen

    • 是应用的主页,继承自 StatefulWidget,因为需要在页面中保存和加载数据,所以需要使用 StatefulWidget

  3. _HomeScreenState

    • HomeScreen 的状态类,包含以下功能:

      • 使用 _controller 控制 TextField,方便获取用户输入的值。

      • 在页面初始化时调用 _loadSavedValue 方法,从 SharedPreferences 中加载保存的值。

      • _loadSavedValue 方法是异步的,从 SharedPreferences 中获取键为 'my_key' 的值,并更新 _savedValue_controller.text

      • _saveValue 方法将用户输入的值保存到 SharedPreferences 中,键为 'my_key',并更新 _savedValue

      • 页面布局包含一个 TextField 用于输入值,一个 ElevatedButton 用于保存值,以及一个 Text 用于显示保存的值。

通过这些注释,开发者可以快速理解代码的结构和功能,方便后续的开发和维护。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com