前言
Flutter 从 2018年开展至今,生态可谓极其丰富,不管咱们想要完成任何功用,根本都能找到对应的插件。但也正是因为其插件的丰富多样,导致咱们常常需求花费很多的时刻去选择适宜的插件,尤其是关于刚触摸 Flutter 开发的新同学,有些甚至没有触摸过客户端开发,面临的难度将会更大。
在 Android 开发的时候,我会常常运用 AndroidUtilCode 库来完成一些常用的函数和封装的系统API的调用来提高研制效率。可是很惋惜,在Flutter 中一向还没有呈现相似的插件,本着 靠人不如靠己
的主意,自己把这两年项目中完成的东西类进行收拾,所以就有了这个插件 FlutterUtilCode。
现在 FlutterUtilCode 还在初期完成阶段,已经一些规划了一些待完成的东西类,咱们假如有更多的建议,欢迎在 Github 中提 Issues。
FlutterUtilCode 系列(一)—— Flutter东西篇之LogUtils、SharedPerfsUtils
FlutterUtilCode 系列(二)—— Flutter东西篇之ToastUtils
FlutterUtilCode 系列(三)—— Flutter东西篇之UuidUtils
本篇是【FlutterUtilCode】 系列文章的开篇,系列文章内容主要介绍插件中东西类的功用、用法和代码完成等,感兴趣的同学能够继续重视。
好了,废话不多说,咱们开始今天的 《Flutter 东西篇之LogUtils、SharedPerenceUtils》 的介绍吧~
一、日志东西类-LogUtils
日志打印可谓是咱们开发中必不可少的功用,在 Flutter 中咱们一般经过debugPrint
来完成日志打印,这儿的 LogUtils 也不例外,完成代码:
/// Name: Log东西类
/// Created by Fitem on 2023/5/31
class LogUtils {
/// 是否敞开日志,默许Debug形式下敞开
static bool isOpenLog = kDebugMode;
/// 调试打印
static void println(String obj) {
if (isOpenLog) debugPrint(obj);
}
/// Log 用于网络请求等长内容日志
static void logger(String obj, {StackTrace? stackTrace, int level = 0}){
if (isOpenLog) log(obj, stackTrace: stackTrace, level: level);
}
}
这儿经过静态变量 isOpenLog
来完成日志打印的开关,默许是在 Debug形式 下敞开,咱们也能够手动修改。
除此之外,为了处理长日志打印不全的问题。这儿提供了 logger()
办法调用,其内部经过 log()
办法完成。与 print()
函数或 debugPrint()
函数不同,log()
将日志写入环形缓冲区,并将其存储在内存中。虽然也会受到设备内存的约束,可是彻底满意开发期间打印日志的需求。
运用事例:
// 打印日志
LogUtils.println('这是一条测试日志');
// 打印长日志
LogUtils.logger('这是一条十分长的日志,这是一条十分长的日志,这是一条十分长的日志,这是一条十分长的日志,这是一条十分长的日志,'
'这是一条十分长的日志,这是一条十分长的日志,这是一条十分长的日志,这是一条十分长的日志,这是一条十分长的日志,这是一条十分长的日志,'
'这是一条十分长的日志,这是一条十分长的日志,这是一条十分长的日志,这是一条十分长的日志,这是一条十分长的日志,这是一条十分长的日志,'
'这是一条十分长的日志,这是一条十分长的日志,这是一条十分长的日志,这是一条十分长的日志,这是一条十分长的日志,这是一条十分长的日志,');
// 控制打印开关
LogUtils.isOpenLog = value;
二、数据缓存东西类-SharedPrefsUtils
从事过客户端开发的同学都清楚,一般数据的缓存分为 SharedPreference 和 数据库存储,其中 SharedPreference 主要是经过 Key-Value
键值对的形式存储数据。
这儿咱们根据 shared_preferences 插件来完成,该插件是Flutter官方发布的,现在 LIKES 7.4K、支撑Flutter全平台、最近一次更新时刻是 23 天前,可谓是反常受欢迎。
SharedPrefsUtils 支撑对 int
、Double
、Bool
、String
、List<String>
类型数据的缓存和读取,数据读取支撑增加默许值,并对每次操作增加打印日志便于咱们查看数据,完成代码:
/// Name: SP东西类
/// Created by Fitem on 2023/5/31
class SharedPrefsUtils {
/// 增加String类型数据
/// [key] 键
/// [value] 值
static Future<void> putString(String key, String value) async {
_println('putString', key, value);
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setString(key, value);
}
/// 增加int类型数据
/// [key] 键
/// [value] 值
static Future<void> putInt(String key, int value) async {
_println('putInt', key, value);
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setInt(key, value);
}
/// 增加bool类型数据
/// [key] 键
/// [value] 值
static Future<void> putBool(String key, bool value) async {
_println('putBool', key, value);
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setBool(key, value);
}
/// 增加double类型数据
/// [key] 键
/// [value] 值
static Future<void> putDouble(String key, double value) async {
_println('putDouble', key, value);
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setDouble(key, value);
}
/// 增加List<String>类型数据
/// [key] 键
/// [value] 值
static Future<void> putStringList(String key, List<String> value) async {
_println('putStringList', key, value);
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setStringList(key, value);
}
/// 获取String类型数据
/// [key] 键
/// [defValue] 默许值
static Future<String?> getString(String key, [String? defValue]) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
String? value = prefs.getString(key) ?? defValue;
_println('getString', key, value);
return value;
}
/// 获取int类型数据,假如没有则回来默许值
/// [key] 键
/// [defValue] 默许值
static Future<int?> getInt(String key, [int? defValue]) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
int? value = prefs.getInt(key) ?? defValue;
_println('getInt', key, value);
return value;
}
/// 获取double类型数据,假如没有则回来默许值
/// [key] 键
/// [defValue] 默许值
static Future<double?> getDouble(String key, [double? defValue]) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
double? value = prefs.getDouble(key) ?? defValue;
_println('getDouble', key, value);
return value;
}
/// 获取bool类型数据,假如没有则回来默许值
/// [key] 键
/// [defValue] 默许值
static Future<bool?> getBool(String key, [bool? defValue]) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
bool? value = prefs.getBool(key) ?? defValue;
_println('getBool', key, value);
return value;
}
/// 获取List<String>类型数据,假如没有则回来默许值
/// [key] 键
/// [defValue] 默许值
static Future<List<String>?> getStringList(String key, [List<String>? defValue]) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
List<String>? value = prefs.getStringList(key) ?? defValue;
_println('getStringList', key, value);
return value;
}
/// 打印日志
static void _println(String methodName, String key, dynamic value) {
LogUtil.println('''SharedPref $methodName:
key: $key
value: $value''');
}
}
运用事例:
/// 增加数据
void _handlePut() {
SharedPrefsUtils.putString(SPConstants.name, '小明');
SharedPrefsUtils.putInt(SPConstants.age, 18);
SharedPrefsUtils.putDouble(SPConstants.height, 175.5);
SharedPrefsUtils.putBool(SPConstants.gender, true);
SharedPrefsUtils.putStringList(SPConstants.family, ['爸爸', '妈妈', '哥哥', '弟弟']);
}
/// 获取数据
Future<void> _handleGet() async {
var name = await SharedPrefsUtils.getString(SPConstants.name, '');
var age = await SharedPrefsUtils.getInt(SPConstants.age, 0);
var height = await SharedPrefsUtils.getDouble(SPConstants.height, 0.0);
var gender = await SharedPrefsUtils.getBool(SPConstants.gender, false);
var family = await SharedPrefsUtils.getStringList(SPConstants.family, []);
}
结语
好了,今天的东西类收拾文章就到这儿,现在插件已发布到 Pub 中,欢迎咱们体验。
假如觉得这篇文章对你有所帮助的话,不要忘记一键三连哦,咱们的点赞是我更新的动力。
Pub: flutter_util_code
项目源码:FlutterUtilCode
运用事例:Example