Flutter辅助工具插件easy_helpers的使用

发布于 1周前 作者 eggper 来自 Flutter

Flutter辅助工具插件easy_helpers的使用

easy_helpers 是一个帮助开发者快速开始应用开发的库工具。它提供了许多有用的函数、扩展和类,使你的日常 Flutter 编码更加便捷。

DateTime 扩展

该包提供了一些与 DateTime 相关的实用扩展方法。

使用

导入后,你可以在任何 DateTime 对象上使用这些扩展方法:

final now = DateTime.now();
print(now.short);  // 输出短格式日期
print(now.isToday);  // 输出是否为今天
print(now.isSameWeek(now.add(Duration(days: 2))));  // 检查两个日期是否在同一周

可用方法

格式化方法

  • short: 返回 “HH:mm” 格式的字符串,如果是今天的日期,则返回小时和分钟;否则返回 “yy.MM.dd”。
  • yMd: 返回本地化的月/日/年格式。
  • jm: 返回本地化的小时/分钟格式。

日期比较方法

  • isToday: 如果日期是今天,则返回 true。
  • isYesterday: 如果日期是昨天,则返回 true。
  • isTomorrow: 如果日期是明天,则返回 true。
  • isPast: 如果日期在当前时间之前,则返回 true。
  • isFuture: 如果日期在当前时间之后,则返回 true。
  • isSameDay(DateTime other): 如果日期与另一个日期相同,则返回 true。
  • isSameMonth(DateTime other): 如果日期与另一个日期在同一个月份,则返回 true。
  • isSameYear(DateTime other): 如果日期与另一个日期在同一年,则返回 true。
  • isSameWeek(DateTime other): 如果日期与另一个日期在同一个周(以周日为一周的开始)则返回 true。

日期导航方法

  • nextDay: 返回此 DateTime 的下一天。
  • previousDay: 返回此 DateTime 的前一天。
  • firstDayOfMonth: 返回此 DateTime 所属月份的第一天。
  • lastDayOfMonth: 返回此 DateTime 所属月份的最后一天。
  • previousMonth: 返回当前日期的前一个月。
  • nextMonth: 返回当前日期的下一个月。
  • previousWeek: 返回当前日期的前一周的 DateTime
  • nextWeek: 返回当前日期的后一周的 DateTime

布尔检查

  • isFirstDayOfMonth: 如果日期是月份的第一天,则返回 true。
  • isLastDayOfMonth: 如果日期是月份的最后一天,则返回 true。

详细示例

格式化方法

void main() {
  final now = DateTime.now();
  final futureDate = DateTime(2024, 7, 24);

  print('Short format (today): ${now.short}');
  print('Short format (future date): ${futureDate.short}');
  print('yMd format: ${now.yMd}');
  print('jm format: ${now.jm}');
}

// 假设当前日期为 2023-07-24
// 输出:
// Short format (today): 14:30
// Short format (future date): 24.07.24
// yMd format: 7/24/2023
// jm format: 2:30 PM

日期比较方法

void main() {
  final now = DateTime.now();
  final yesterday = now.subtract(Duration(days: 1));
  final tomorrow = now.add(Duration(days: 1));
  final lastWeek = now.subtract(Duration(days: 7));
  final nextWeek = now.add(Duration(days: 7));

  print('Is today: ${now.isToday}');
  print('Is yesterday: ${yesterday.isYesterday}');
  print('Is tomorrow: ${tomorrow.isTomorrow}');
  print('Is in the past: ${yesterday.isPast}');
  print('Is in the future: ${tomorrow.isFuture}');
  print('Is same day: ${now.isSameDay(now)}');
  print('Is same month: ${now.isSameMonth(lastWeek)}');
  print('Is same year: ${now.isSameYear(nextWeek)}');
  print('Is same week: ${now.isSameWeek(tomorrow)}');
  print('Is same week (next week): ${now.isSameWeek(nextWeek)}');
}

// 输出:
// Is today: true
// Is yesterday: true
// Is tomorrow: true
// Is in the past: true
// Is in the future: true
// Is same day: true
// Is same month: true
// Is same year: true
// Is same week: true
// Is same week (next week): false

日期导航方法

void main() {
  final now = DateTime(2023, 7, 24);  // 一个周一

  print('Next day: ${now.nextDay}');
  print('Previous day: ${now.previousDay}');
  print('First day of month: ${now.firstDayOfMonth}');
  print('Last day of month: ${now.lastDayOfMonth}');
  print('Previous month: ${now.previousMonth}');
  print('Next month: ${now.nextMonth}');
  print('Previous week: ${now.previousWeek}');
  print('Next week: ${now.nextWeek}');
}

// 输出:
// Next day: 2023-07-25 00:00:00.000
// Previous day: 2023-07-23 00:00:00.000
// First day of month: 2023-07-01 00:00:00.000
// Last day of month: 2023-07-31 00:00:00.000
// Previous month: 2023-06-01 00:00:00.000
// Next month: 2023-08-01 00:00:00.000
// Previous week: 2023-07-17 00:00:00.000
// Next week: 2023-07-31 00:00:00.000

布尔检查

void main() {
  final firstDay = DateTime(2023, 7, 1);
  final lastDay = DateTime(2023, 7, 31);
  final middleDay = DateTime(2023, 7, 15);

  print('Is first day of month: ${firstDay.isFirstDayOfMonth}');
  print('Is last day of month: ${lastDay.isLastDayOfMonth}');
  print('Middle day - Is first day of month: ${middleDay.isFirstDayOfMonth}');
  print('Middle day - Is last day of month: ${middleDay.isLastDayOfMonth}');
}

// 输出:
// Is first day of month: true
// Is last day of month: true
// Middle day - Is first day of month: false
// Middle day - Is last day of month: false

String 扩展方法

该包提供了一组有用的 String 类的扩展方法,以提高 Dart 和 Flutter 项目的开发效率。

使用

导入后,你可以在任何 String 对象上使用这些扩展方法:

void main() {
  String email = 'user@example.com';
  print(email.isEmail);  // 输出: true

  String number = '42';
  print(number.tryInt());  // 输出: 42

  String longText = 'This is a very long text that needs to be cut';
  print(longText.cut(20, suffix: '...'));  // 输出: "This is a very long..."
}

可用方法

转换方法

  • tryInt(): 将字符串转换为整数。如果转换失败则返回 0。
  • tryDouble(): 将字符串转换为双精度浮点数。如果转换失败则返回 0.0。

验证方法

  • isEmail: 如果字符串是有效的电子邮件地址,则返回 true。
  • isAlphabet: 检查字符串是否只包含字母(不含空格)。
  • isAlphanumeric: 检查字符串是否只包含字母和数字。
  • isBool: 检查字符串是否是一个布尔值。
  • isInt: 检查字符串是否是一个整数。
  • isNumeric: 检查字符串是否是数字。
  • hasUrl: 如果字符串包含 URL,则返回 true。
  • isURL: 检查字符串是否是一个 URL。

字符串操作方法

  • isEmpty: 如果字符串为空或 null,则返回 true。
  • or(String value): 如果字符串为空或 null,则返回给定的值。

URL 相关方法

  • hasUrl: 如果字符串包含 URL,则返回 true。

日期和时间方法

  • isValidDateTime: 如果字符串可以解析为 DateTime 或者已经是 DateTime 格式,则返回 true。
  • dateTime: 将字符串转换为 DateTime 对象。

文本格式化方法

  • capitalizeFirstLetter(): 将字符串的第一个字母大写。
  • ucFirst: capitalizeFirstLetter() 的别名。

可空字符串扩展

提供了一个额外的可空字符串扩展:

  • isEmpty: 如果字符串为空或 null,则返回 true。
  • or(newString): 如果字符串为空或 null,则返回新的字符串。

正则表达式

hasMatch

检查字符串是否匹配正则表达式:

void main() {
  // 定义一个包含 "hello" 和 "world" 的字符串
  const input = 'hello world';
  
  // 检查字符串是否包含单词 "world"
  final hasWorld = input.hasMatch('world');
  print(hasWorld); // 输出: true
  
  // 检查字符串是否包含单词 "universe"
  final hasUniverse = input.hasMatch('universe');
  print(hasUniverse); // 输出: false
}

Flutter 函数

该包包含一组用于 Flutter 开发的实用函数。这些函数提供了用于显示对话框、日志记录、处理字符串等功能。

Alert

提供函数来显示警告对话框:

alert(
  context,
  title: Text('Alert'),
  content: Text('This is an alert dialog'),
  onOkPressed: () {
    print('OK pressed');
  },
);

Confirm

提供函数来显示确认对话框:

final re = await confirm(
  context: context,
  title: Text('Delete'.t),
  message: Text('Are you sure you wanted to delete this post?'.t),
);
if (re == false) return;

你可以选择性地提供一个子标题小部件。它是一个小部件,而不是文本字符串。

confirm(
  context: context,
  title: Text('title'),
  subtitle: const CircleAvatar(
    child: Text('yo'),
  ),
  message: Text('message'),
);

Error

提供函数来显示错误对话框:

error(context: context, title: 'title', message: 'message');

Input

提供函数来显示输入对话框:

// 示例代码待补充

Platform

提供函数来处理平台特定的代码:

示例 1: 打印平台名称

print(platformName()); // 如果在 Web 上运行,则打印 "web",否则打印 "android" 或 "ios"

示例 2: 使用平台特定逻辑

void main() {
  if (platformName() == 'ios') {
    print('This is an iOS device');
  } else if (platformName() == 'android') {
    print('This is an Android device');
  }
}

示例 3: 检查特定平台

void main() {
  if (isIos) {
    print('This is an iOS device');
  }

  if (isAndroid) {
    print('This is an Android device');
  }
}

Toast

提供函数来显示 Toast 消息:

final re = await my?.block(chat.room.otherUserUid!);
toast(
  context: context,
  title: Text(re == true ? 'Blocked' : 'Unblocked'),
  message: Text(re == true ? 'You have blocked this user' : 'You have unblocked this user'),
);

字符串函数

sanitizeFilename

一个用于清理文件名的实用函数,替换非法字符和保留名称。

const unsafeUserInput = "~/.\u0000ssh/authorized_keys";

// "~.sshauthorized_keys"
sanitizeFilename(unsafeUserInput);

// "~-.-ssh-authorized_keys"
sanitizeFilename(unsafeUserInput, replacement: "-");

参数:

  • input: 需要清理的输入字符串。
  • replacement: 可选参数,指定替换非法字符的字符或字符串,默认为空字符串。

日志

Log

  • dog: 打印调试日志消息。
  • .dog(): 在任何对象上打印调试日志消息。
dog('this is a log message with dog emoji 🐶');

({'a': 'apple', 'b': 'banana'} as Map).dog();

更多关于Flutter辅助工具插件easy_helpers的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter辅助工具插件easy_helpers的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用easy_helpers插件的示例代码案例。easy_helpers是一个辅助工具插件,可以帮助你简化一些常见的开发任务。为了展示其使用,我们将创建一个简单的Flutter应用,演示如何利用easy_helpers中的一些功能。

首先,确保你已经在pubspec.yaml文件中添加了easy_helpers依赖:

dependencies:
  flutter:
    sdk: flutter
  easy_helpers: ^最新版本号  # 请替换为实际发布的最新版本号

然后运行flutter pub get来获取依赖。

示例代码

以下是一个简单的Flutter应用示例,展示了如何使用easy_helpers中的一些功能,比如字符串处理和设备信息获取。

main.dart

import 'package:flutter/material.dart';
import 'package:easy_helpers/easy_helpers.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Easy Helpers Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String? deviceInfo;
  String? capitalizedString;

  @override
  void initState() {
    super.initState();
    // 获取设备信息
    _getDeviceInfo();
    // 字符串处理示例
    _processString("hello world");
  }

  void _getDeviceInfo() async {
    final deviceInfoText = await EasyHelpers.deviceInfo();
    setState(() {
      deviceInfo = deviceInfoText;
    });
  }

  void _processString(String input) {
    setState(() {
      capitalizedString = EasyHelpers.capitalizeFirstLetter(input);
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Easy Helpers Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Text(
              'Device Info:',
              style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
            ),
            Text(deviceInfo ?? 'Loading...'),
            SizedBox(height: 20),
            Text(
              'String Processing:',
              style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
            ),
            Text(capitalizedString ?? 'Processing...'),
          ],
        ),
      ),
    );
  }
}

解释

  1. 依赖添加:在pubspec.yaml文件中添加easy_helpers依赖。
  2. 获取设备信息:使用EasyHelpers.deviceInfo()方法获取设备信息,并在UI中显示。
  3. 字符串处理:使用EasyHelpers.capitalizeFirstLetter(String input)方法将输入字符串的首字母大写,并在UI中显示处理后的字符串。

运行应用

确保你已经正确添加了依赖并导入了必要的包,然后运行flutter run来启动应用。你应该能够在应用界面上看到设备信息和处理后的字符串。

这个示例展示了如何使用easy_helpers插件简化一些常见的开发任务。根据easy_helpers提供的具体功能,你可以进一步探索并集成到你的项目中。

回到顶部