前言

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 天前,可谓是反常受欢迎。

【FlutterUtilCode】Flutter工具篇之LogUtils、SharedPerfsUtils

SharedPrefsUtils 支撑对 intDoubleBoolStringList<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