Flutter 常用工具类大全:路由、加密、日期、字符串、文件等

news/2025/3/16 0:51:36/

在 Flutter 开发中,工具类是提高代码复用性和开发效率的关键。本文将介绍 Flutter 中常用的工具类,包括:

  1. 路由工具类:支持带参数的路由跳转和参数获取。
  2. 对称加密工具类:使用 AES 算法实现数据加密和解密。
  3. 非对称加密工具类:使用 RSA 算法实现数据加密和解密。
  4. 日期工具类:日期格式化、解析、计算日期差等。
  5. 字符串工具类:字符串判空、截取、格式化等。
  6. 文件工具类:文件读写、路径获取等。
  7. 网络工具类:检查网络状态、发送网络请求等。
  8. 颜色工具类:颜色转换、生成随机颜色等。
  9. 日志工具类:统一管理日志输出。
  10. SharedPreferences 工具类:简化本地存储操作。

通过封装这些工具类,开发者可以更高效地完成日常开发任务。


正文

1. 路由工具类

支持带参数的路由跳转和参数获取。

实现代码
import 'package:flutter/material.dart';class NavigatorUtil {// 跳转到新页面(带参数)static void pushWithParams(BuildContext context, Widget page, {dynamic arguments}) {Navigator.push(context,MaterialPageRoute(builder: (context) => page,settings: RouteSettings(arguments: arguments),),);}// 从路由中获取参数static dynamic getRouteArgs(BuildContext context) {return ModalRoute.of(context)?.settings.arguments;}// 跳转到新页面并替换当前页面(带参数)static void pushReplacementWithParams(BuildContext context, Widget page, {dynamic arguments}) {Navigator.pushReplacement(context,MaterialPageRoute(builder: (context) => page,settings: RouteSettings(arguments: arguments),),);}// 跳转到新页面并清除所有历史页面(带参数)static void pushAndRemoveUntilWithParams(BuildContext context, Widget page, {dynamic arguments}) {Navigator.pushAndRemoveUntil(context,MaterialPageRoute(builder: (context) => page,settings: RouteSettings(arguments: arguments),),(route) => false,);}
}

2. 对称加密工具类

使用 AES 算法实现数据加密和解密。

安装依赖

pubspec.yaml 中添加 encrypt 插件:

dependencies:encrypt: ^5.0.0
实现代码
import 'package:encrypt/encrypt.dart';class SymmetricCryptoUtil {static final key = Key.fromUtf8('32characterslongpassphrase1234'); // 32字符密钥static final iv = IV.fromUtf8('16characterslong'); // 16字符IV// 加密static String encrypt(String plainText) {final encrypter = Encrypter(AES(key));final encrypted = encrypter.encrypt(plainText, iv: iv);return encrypted.base64;}// 解密static String decrypt(String encryptedText) {final encrypter = Encrypter(AES(key));final decrypted = encrypter.decrypt64(encryptedText, iv: iv);return decrypted;}
}

3. 非对称加密工具类

使用 RSA 算法实现数据加密和解密。

安装依赖

pubspec.yaml 中添加 pointycastle 插件:

dependencies:pointycastle: ^3.4.0
实现代码
import 'dart:convert';
import 'package:pointycastle/export.dart';class AsymmetricCryptoUtil {// 生成 RSA 密钥对static AsymmetricKeyPair<RSAPublicKey, RSAPrivateKey> generateKeyPair() {final keyGen = RSAKeyGenerator()..init(ParametersWithRandom(RSAKeyGeneratorParameters(BigInt.parse('65537'), 2048, 64),SecureRandom(),));return keyGen.generateKeyPair();}// 使用公钥加密static String encrypt(String plainText, RSAPublicKey publicKey) {final encryptor = OAEPEncoding(RSAEngine())..init(true, PublicKeyParameter<RSAPublicKey>(publicKey));final encrypted = encryptor.process(utf8.encode(plainText));return base64.encode(encrypted);}// 使用私钥解密static String decrypt(String encryptedText, RSAPrivateKey privateKey) {final decryptor = OAEPEncoding(RSAEngine())..init(false, PrivateKeyParameter<RSAPrivateKey>(privateKey));final decrypted = decryptor.process(base64.decode(encryptedText));return utf8.decode(decrypted);}
}

4. 日期工具类

用于日期格式化、解析、计算日期差等操作。

实现代码
import 'package:intl/intl.dart';class DateUtil {// 格式化日期static String formatDate(DateTime date, {String format = 'yyyy-MM-dd'}) {return DateFormat(format).format(date);}// 解析字符串为日期static DateTime parseDate(String dateString, {String format = 'yyyy-MM-dd'}) {return DateFormat(format).parse(dateString);}// 计算两个日期之间的天数差static int getDaysBetween(DateTime startDate, DateTime endDate) {return endDate.difference(startDate).inDays;}// 判断两个日期是否为同一天static bool isSameDay(DateTime date1, DateTime date2) {return date1.year == date2.year &&date1.month == date2.month &&date1.day == date2.day;}// 获取当前时间的字符串static String getCurrentTime({String format = 'yyyy-MM-dd HH:mm:ss'}) {return formatDate(DateTime.now(), format: format);}// 获取某一天的开始时间(00:00:00)static DateTime getStartOfDay(DateTime date) {return DateTime(date.year, date.month, date.day);}// 获取某一天的结束时间(23:59:59)static DateTime getEndOfDay(DateTime date) {return DateTime(date.year, date.month, date.day, 23, 59, 59);}
}

5. 字符串工具类

用于字符串的常用操作,如判空、截取、格式化等。

实现代码
class StringUtil {// 判断字符串是否为空static bool isEmpty(String? str) {return str == null || str.isEmpty;}// 判断字符串是否不为空static bool isNotEmpty(String? str) {return !isEmpty(str);}// 首字母大写static String capitalize(String str) {if (isEmpty(str)) return '';return str[0].toUpperCase() + str.substring(1);}// 去除空格static String trim(String str) {return str.trim();}// 忽略大小写判断是否包含static bool containsIgnoreCase(String str, String search) {return str.toLowerCase().contains(search.toLowerCase());}// 截取字符串static String substring(String str, int start, [int? end]) {if (isEmpty(str)) return '';return str.substring(start, end);}// 判断是否为邮箱格式static bool isEmail(String str) {final emailRegex = RegExp(r'^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$');return emailRegex.hasMatch(str);}// 判断是否为手机号格式static bool isPhoneNumber(String str) {final phoneRegex = RegExp(r'^[0-9]{10,11}$');return phoneRegex.hasMatch(str);}
}

6. 文件工具类

用于文件读写、路径获取等操作。

实现代码
import 'dart:io';
import 'package:flutter/services.dart';
import 'package:path_provider/path_provider.dart';class FileUtil {// 获取应用文档目录路径static Future<String> getAppDocumentsPath() async {Directory directory = await getApplicationDocumentsDirectory();return directory.path;}// 写入文件static Future<File> writeFile(String path, String content) async {final file = File(path);return file.writeAsString(content);}// 读取文件static Future<String> readFile(String path) async {final file = File(path);return file.readAsString();}// 复制资源文件到指定路径static Future<void> copyAssetToFile(String assetPath, String targetPath) async {final byteData = await rootBundle.load(assetPath);final file = File(targetPath);await file.writeAsBytes(byteData.buffer.asUint8List());}// 判断文件是否存在static Future<bool> isFileExists(String path) async {return File(path).exists();}// 删除文件static Future<void> deleteFile(String path) async {final file = File(path);if (await file.exists()) {await file.delete();}}
}

7. 网络工具类

用于检查网络状态、发送网络请求等。

实现代码
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:dio/dio.dart';class NetworkUtil {// 检查网络是否连接static Future<bool> isConnected() async {var connectivityResult = await Connectivity().checkConnectivity();return connectivityResult != ConnectivityResult.none;}// 发送 GET 请求static Future<String> fetchData(String url) async {final response = await Dio().get(url);if (response.statusCode == 200) {return response.data.toString();} else {throw Exception('Failed to load data');}}// 发送 POST 请求static Future<String> postData(String url, Map<String, dynamic> data) async {final response = await Dio().post(url, data: data);if (response.statusCode == 200) {return response.data.toString();} else {throw Exception('Failed to post data');}}
}

8. 颜色工具类

用于颜色转换、生成随机颜色等。

实现代码
import 'dart:math';
import 'package:flutter/material.dart';class ColorUtil {// 将十六进制字符串转换为颜色static Color hexToColor(String hex) {hex = hex.replaceAll('#', '');if (hex.length == 6) {hex = 'FF$hex'; // 添加透明度}return Color(int.parse(hex, radix: 16));}// 将颜色转换为十六进制字符串static String colorToHex(Color color) {return '#${color.value.toRadixString(16).substring(2)}';}// 生成随机颜色static Color getRandomColor() {return Color.fromARGB(255,Random().nextInt(256),Random().nextInt(256),Random().nextInt(256),);}// 调整颜色亮度static Color adjustBrightness(Color color, double factor) {return Color.fromARGB(color.alpha,(color.red * factor).clamp(0, 255).toInt(),(color.green * factor).clamp(0, 255).toInt(),(color.blue * factor).clamp(0, 255).toInt(),);}
}

9. 日志工具类

用于统一管理日志输出。

实现代码
class LogUtil {// 调试日志static void debug(String message) {print('[DEBUG] $message');}// 信息日志static void info(String message) {print('[INFO] $message');}// 错误日志static void error(String message, {dynamic error}) {print('[ERROR] $message');if (error != null) {print(error);}}
}

10. SharedPreferences 工具类

用于简化本地存储操作。

实现代码
import 'package:shared_preferences/shared_preferences.dart';class SharedPreferencesUtil {// 保存字符串static Future<void> saveString(String key, String value) async {final prefs = await SharedPreferences.getInstance();await prefs.setString(key, value);}// 获取字符串static Future<String?> getString(String key) async {final prefs = await SharedPreferences.getInstance();return prefs.getString(key);}// 删除键值对static Future<void> remove(String key) async {final prefs = await SharedPreferences.getInstance();await prefs.remove(key);}// 保存布尔值static Future<void> saveBool(String key, bool value) async {final prefs = await SharedPreferences.getInstance();await prefs.setBool(key, value);}// 获取布尔值static Future<bool?> getBool(String key) async {final prefs = await SharedPreferences.getInstance();return prefs.getBool(key);}
}

总结

本文整理了 Flutter 开发中常用的工具类,包括路由、加密、日期、字符串、文件、网络、颜色、日志和本地存储等功能。通过封装这些工具类,开发者可以显著提高代码的复用性和开发效率。希望本文对您的 Flutter 开发有所帮助!

文章来源:https://blog.csdn.net/tangweiguo03051987/article/details/146247831
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ppmy.cn/news/1579440.html

相关文章

鸿蒙 Next 实现单例

鸿蒙 Next 实现单例 在鸿蒙 Next 开发中&#xff0c;单例模式是一种常用的设计模式&#xff0c;用于确保一个类只有一个实例&#xff0c;并提供一个全局访问点。本文将详细介绍如何在鸿蒙 Next 中实现单例模式&#xff0c;并提供几种常见的实现方式。 一、单例模式的实现方式…

Spring 框架面试题集:常见问题解析

Spring 是一款流行的开源框架&#xff0c;广泛应用于企业级 Java 开发。作为一个多功能的框架&#xff0c;Spring 提供了 IoC&#xff08;控制反转&#xff09;、AOP&#xff08;面向切面编程&#xff09;以及与各种企业服务的集成。无论你是 Spring 的新手还是经验丰富的开发者…

列表动态列处理

1、在initialize()方法里&#xff0c;获取列表控件&#xff0c;添加CreateListColumnsListener监听 public void initialize(){ BillList billlist(BillList)this.getControl("billlistap"); billlist.addCreateListColumnsListener(this::beforeCreateListColumns)…

从零开始用AI开发游戏(三)背景故事

《迷域回响》背景故事 第一章&#xff1a;失落的符文纪元 在远古的“艾瑟兰”大陆&#xff0c;掌握空间魔法的「筑界者文明」曾建造了连通万界的回响迷宫——这座迷宫既是试炼场&#xff0c;也是囚笼。文明巅峰时期&#xff0c;筑界者将禁忌知识刻入虚空符文&#xff0c;嵌于…

metersphere接口测试(1)使用MeterSphere进行接口测试

文章目录 前言接口文档单接口测试环境配置梳理接口测试场景测试接口 接口自动化怎么写复用性高的自动化测试用例 总结 前言 大汉堡工作第203天&#xff0c;本篇记录我第一次接触接口测试任务&#xff0c;最近有些懈怠啊~ 接口文档 首先就是接口地址&#xff0c;接口测试时用…

Java泛型是什么?有什么作用?

Java泛型&#xff08;Generics&#xff09;是Java语言中一种类型参数化的机制&#xff0c;允许在类、接口、方法中使用类型参数&#xff0c;使代码能够处理多种数据类型&#xff0c;同时保证类型安全。泛型的主要目的是增强代码的复用性和安全性&#xff0c;避免类型转换错误。…

DeepSeek API 客户端使用文档

1. 简介 deep.py 是一个用于与 DeepSeek API 交互的 Python 客户端封装。它提供了简单易用的接口&#xff0c;支持对话历史管理、日志记录等功能&#xff0c;使得与 DeepSeek API 的交互更加便捷和可靠。 2. 功能特点 简单的接口设计自动管理对话历史完整的日志记录灵活的配…

《C#上位机开发从门外到门内》3-1:串口调试助手

文章目录 **1. 项目概述****2. 功能需求****2.1 核心功能****2.2 扩展功能** **3. 技术选型****3.1 开发语言****3.2 GUI 框架****3.3 串口通信库****3.4 数据解析****3.5 日志记录** **4. 系统设计****4.1 模块划分****4.2 数据流设计** **5. 详细设计****5.1 串口通信模块***…