Flutter多功能工具插件utility_library的使用
Flutter多功能工具插件utility_library的使用
功能库
utility_library
是一个包含 Dart 扩展和实用程序的综合集合,可以为您的 Flutter 应用程序增加额外的功能,如高级数字、日期和字符串操作。
特性
- 颜色实用程序
- 数字格式化和验证扩展
- 日期和时间格式化及计算
- 字符串变换和检查
- 集合的唯一性和 JSON 转换功能
安装
要在项目中使用 utility_library
,请将其添加到 pubspec.yaml
文件中的依赖项:
dependencies:
utility_library: ^1.0.0
然后运行以下命令:
flutter pub get
使用
导入库
在 Dart 文件中添加以下导入语句:
import 'package:utility_library/utility_library.dart';
颜色实用程序
设置应用程序的主要和次要颜色:
AppColors.primaryColor = Color(0xff02a4ff); // 您的应用程序主要颜色
AppColors.secondaryColor = Color(0xffffffff); // 您的应用程序次要颜色
JSON 扩展
您可以使用接口或抽象类,具有实例方法 toJson
和工厂或常规方法 fromJson
。这里是一个改进的方法:
User user = User(name: 'Alice', age: 28);
String userJson = serialize(user);
print('Serialized User: $userJson');
User deserializedUser = deserialize<User>(userJson, User.fromJson);
print('Deserialized User: ${deserializedUser.name}');
数字扩展
格式化和检查数字:
double myNumber = 123.456;
print(myNumber.reFormat(formatDigits: '000', asFixedNumber: 3)); // 使用扩展方法
日期时间扩展
轻松处理日期时间格式化:
DateTime now = DateTime.now();
print('标准日期时间: ${now.format(pattern: PredefinedDateFormats.standardDateTime.pattern)}');
print('仅日期: ${now.format(pattern: PredefinedDateFormats.dateOnly.pattern)}');
print('仅时间: ${now.format(pattern: PredefinedDateFormats.timeOnly.pattern)}');
print('自定义日期时间: ${now.format(pattern: PredefinedDateFormats.customDateTime.pattern)}');
print('详细日期时间带星期几: ${now.format(pattern: PredefinedDateFormats.verboseDateTimeWithDayOfWeek.pattern)}');
print('年和完整月份: ${now.format(pattern: PredefinedDateFormats.yearAndFullMonth.pattern)}');
日期时间实用程序扩展
轻松处理日期时间格式化:
DateTime today = DateTime.now();
print('今天是 ${today.isLeapYear ? "闰年" : "非闰年"}。');
print('当前月份的天数: ${today.daysInMonth}');
print('今天是否是一年的开始? ${today.isStartOfYear}');
print('今天是否是一年的结束? ${today.isEndOfYear}');
print('距离今年结束还有多少天: ${today.daysToEndOfYear}');
print('今天是否是周末? ${today.isWeekend}');
其他实用程序
- 检查闰年、日期计算、周末检查。
- 双精度和整数的验证和格式化。
- 字符串操作,如首字母大写、回文检查和 Base64 转换。
- 列表的唯一性和 JSON 转换。
示例
以下是如何在 Flutter 应用程序中使用这些实用程序的示例:
// 示例用法
void main() {
// 初始化并使用颜色
AppColors.primaryColor = Color(0xff02a4ff);
AppColors.secondaryColor = Color(0xffffffff);
// 使用扩展
DateTime today = DateTime.now();
print('今天是 ${today.isLeapYear ? "闰年" : "非闰年"}。');
}
// 示例用法
Text(widget.title, style: TextStyle(color: AppColors.secondaryColor))
示例代码
以下是完整的示例代码,展示了如何使用 utility_library
中的各种功能:
import 'package:example/json_serializable.dart';
import 'package:flutter/material.dart';
import 'package:utility_library/utils/color_utils.dart';
import 'package:utility_library/utils/date_time_utils.dart';
import 'package:utility_library/utils/extension_utils.dart';
import 'package:utility_library/utils/num_extensions.dart';
import 'package:utility_library/utils/predefined_date_formats.dart';
import 'package:utility_library/utils/json_extensions.dart';
void main() {
runApp(const MyApp());
/// json_extensions.dart
User user = User(name: 'Alice', age: 28);
String userJson = serialize(user);
print('序列化的用户: $userJson');
User deserializedUser = deserialize<User>(userJson, User.fromJson);
print('反序列化的用户: ${deserializedUser.name}');
/// color_utils.dart
AppColors.primaryColor = Color(0xff02a4ff); /// 您的应用程序主要颜色
AppColors.secondaryColor = Color(0xffffffff); /// 您的应用程序次要颜色
/// num_extensions.dart
double myNumber = 123.456;
print(myNumber.reFormat(formatDigits: '000', asFixedNumber: 3)); // 使用扩展方法
/// predefined_date_formats.dart
DateTime nowFormats = DateTime.now();
print('标准日期时间: ${nowFormats.format(pattern: PredefinedDateFormats.standardDateTime.pattern)}');
print('仅日期: ${nowFormats.format(pattern: PredefinedDateFormats.dateOnly.pattern)}');
print('仅时间: ${nowFormats.format(pattern: PredefinedDateFormats.timeOnly.pattern)}');
print('自定义日期时间: ${nowFormats.format(pattern: PredefinedDateFormats.customDateTime.pattern)}');
print('详细日期时间带星期几: ${nowFormats.format(pattern: PredefinedDateFormats.verboseDateTimeWithDayOfWeek.pattern)}');
print('年和完整月份: ${nowFormats.format(pattern: PredefinedDateFormats.yearAndFullMonth.pattern)}');
/// date_time_utils.dart
// 对于 DateTime
print('--- 对于 DateTime'); // 分隔符,便于阅读
DateTime today = DateTime.now();
print('今天是 ${today.isLeapYear ? "闰年" : "非闰年"}。');
print('当前月份的天数: ${today.daysInMonth}');
print('今天是否是一年的开始? ${today.isStartOfYear}');
print('今天是否是一年的结束? ${today.isEndOfYear}');
print('距离今年结束还有多少天: ${today.daysToEndOfYear}');
print('今天是否是周末? ${today.isWeekend}');
/// extension_utils.dart
// 对于 double
print('--- 对于 double'); // 分隔符,便于阅读
List<double> numbersDouble = [3.14159, double.nan, double.infinity, -0.98765];
for (var number in numbersDouble) {
print('处理数字: $number');
print('字符串或空: ${number.toStringOrNull()}');
print('数字是否有效? ${number.isValid}');
print('固定到两位小数: ${number.toFixedOrNull(2)}');
print('---'); // 分隔符,便于阅读
}
// 对于 int
print('--- 对于 int'); // 分隔符,便于阅读
List<int> numbersInt = [10, -5, 0, 1, 13];
for (var number in numbersInt) {
print('处理数字: $number');
print('是否为偶数: ${number.isEven}');
print('是否为奇数: ${number.isOdd}');
print('阶乘: ${number.factorial}');
print('是否为质数: ${number.isPrime}');
print('二进制表示: ${number.toBinary}');
print('十六进制表示: ${number.toHex}');
print('---'); // 分隔符,便于阅读
}
// 对于 String
print('--- 对于 String'); // 分隔符,便于阅读
List<String> textsString = ['hello world', '123', 'A man a plan a canal panama', 'Flutter.dev'];
for (var text in textsString) {
print('处理文本: "$text"');
print('是否为纯数字: ${text.isNumeric}');
print('首字母大写: ${text.toTitleCase}');
print('反转: ${text.reversed}');
print('是否为回文: ${text.isPalindrome}');
if (text.isNumeric) {
print('Base64编码: ${text.toBase64}');
print('从Base64解码: ${text.toBase64.fromBase64()}');
}
print('---'); // 分隔符,便于阅读
}
// 对于 List<T>
print('--- 对于 List<T>'); // 分隔符,便于阅读
List<int> numbers = [1, 2, 3, 3, 4];
List<String> words = ["apple", "banana", "apple", "cherry"];
// 使用扩展
print('数字(非空): ${numbers.nonNull}');
print('单词(反转): ${words.reversed}');
print('数字是否唯一? ${numbers.isUnique}');
print('单词是否唯一? ${words.isUnique}');
print('单词的JSON字符串: ${words.toJsonString()}');
// 将数字转换为字符串
List<String> stringNumbers = numbers.transform((n) => 'Number $n');
print('转换后的数字: $stringNumbers');
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
// 这个小部件是您的应用的根。
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
// 这是您的应用的主题。
//
// 尝试这样做:运行您的应用,您会看到应用有一个蓝色的工具栏。然后,在不退出应用的情况下,
// 尝试将 colorScheme 中的 seedColor 改为 Colors.green,并触发热重载(保存更改或按 IDE 中的 "热重载" 按钮,或在控制台中按 "r")。
//
// 注意:计数器没有重置回零;应用状态在重载时不会丢失。要重置状态,使用热重启。
//
// 这对代码也适用,不仅仅是值:大多数代码更改都可以通过热重载来测试。
colorScheme: ColorScheme.fromSeed(seedColor: AppColors.primaryColor),
useMaterial3: true,
),
home: const MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
// 这个小部件是您的应用的主页。它是有状态的,这意味着它有一个 State 对象(定义在下面),该对象包含影响其外观的字段。
//
// 这个类是状态的配置。它保存了由父级(本例中为 App 小部件)提供的值(在这种情况下是标题),并在构建方法中使用这些值。
// 小部件子类中的字段总是标记为 "final"。
final String title;
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
void _incrementCounter() {
setState(() {
// 这次调用 setState 告诉 Flutter 框架某些事情已经改变,这会导致它重新运行构建方法以反映更新的值。
// 如果我们不调用 setState() 而只是改变 _counter,那么构建方法就不会再次被调用,因此看起来什么也不会发生。
_counter++;
});
}
[@override](/user/override)
Widget build(BuildContext context) {
// 每次调用 setState 方法时都会重新运行此方法。
//
// Flutter 框架已针对快速重新运行构建方法进行了优化,这样您就可以重建任何需要更新的小部件,而不是个别地改变实例。
return Scaffold(
appBar: AppBar(
// 尝试这样做:在这里更改颜色(例如,更改为 Colors.amber),并触发热重载,看看工具栏的颜色改变,而其他颜色保持不变。
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
// 这里我们从 MyHomePage 对象中获取值,该对象是由 App.build 方法创建的,并用于设置我们的应用栏标题。
title: Text(widget.title, style: TextStyle(color: AppColors.secondaryColor)),
),
body: Center(
// Center 是一个布局小部件。它接受单个子元素并将其放置在父元素的中间。
child: Column(
// Column 也是一个布局小部件。它接受一个子元素列表并垂直排列它们。
// 默认情况下,它会根据其子元素水平调整大小,并尝试与父元素一样高。
//
// Column 有许多属性可以控制其大小和子元素的位置。这里我们使用 mainAxisAlignment 来垂直居中子元素;
// 主轴在这里是垂直的(交叉轴将是水平的)。
//
// 尝试这样做:启用“调试绘制”(选择 IDE 中的“切换调试绘制”动作,或在控制台中按 “p”),可以看到每个小部件的线框图。
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Text(
'您已经按下按钮次数:',
),
Text(
'$_counter',
style: Theme.of(context).textTheme.headlineMedium,
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: '增加',
child: const Icon(Icons.add),
), // 这个逗号使得自动格式化更美观。
);
}
}
更多关于Flutter多功能工具插件utility_library的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter多功能工具插件utility_library的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
utility_library
是一个多功能的 Flutter 插件,旨在为开发者提供一系列常用的工具和功能,以简化开发过程。这个插件通常包含各种实用工具,如网络请求、本地存储、日期时间处理、字符串操作等。使用 utility_library
可以帮助你减少重复代码,提高开发效率。
安装 utility_library
首先,你需要在 pubspec.yaml
文件中添加 utility_library
依赖:
dependencies:
flutter:
sdk: flutter
utility_library: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
使用 utility_library
以下是一些常见的使用场景和示例:
1. 网络请求
utility_library
可能包含一个简化的网络请求工具,类似于 http
包,但更易于使用。
import 'package:utility_library/utility_library.dart';
void fetchData() async {
var response = await UtilityLibrary.get('https://jsonplaceholder.typicode.com/posts');
if (response.statusCode == 200) {
print('Data: ${response.body}');
} else {
print('Failed to load data');
}
}
2. 本地存储
utility_library
可能提供了简化的本地存储功能,类似于 shared_preferences
包。
import 'package:utility_library/utility_library.dart';
void saveData() async {
await UtilityLibrary.saveString('key', 'value');
}
void getData() async {
String value = await UtilityLibrary.getString('key');
print('Value: $value');
}
3. 日期时间处理
utility_library
可能包含一些日期时间处理的工具函数。
import 'package:utility_library/utility_library.dart';
void formatDate() {
DateTime now = DateTime.now();
String formattedDate = UtilityLibrary.formatDate(now, 'yyyy-MM-dd');
print('Formatted Date: $formattedDate');
}
4. 字符串操作
utility_library
可能提供了常见的字符串操作工具。
import 'package:utility_library/utility_library.dart';
void manipulateString() {
String text = 'Hello, World!';
bool contains = UtilityLibrary.contains(text, 'World');
print('Contains "World": $contains');
}
5. 其他工具
utility_library
可能还包含其他实用工具,如设备信息、权限请求、文件操作等。
import 'package:utility_library/utility_library.dart';
void getDeviceInfo() async {
String deviceModel = await UtilityLibrary.getDeviceModel();
print('Device Model: $deviceModel');
}