Flutter迷你扩展功能插件mini_extension的使用

Flutter迷你扩展功能插件mini_extension的使用

mini_extension 提供了常用数据类型的扩展方法,特别是对 DateTime 类型的扩展。

DateTimeExtension

DateTimeExtension 提供了一些实用的方法来操作和格式化 DateTime 对象。

import 'package:mini_extension/mini_extension.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
  test('time', () {
    // 将字符串转换为 DateTime 对象
    String _dayStr = "2021-12-09 12:12:21.233";
    DateTime _day = _dayStr.toDateTime ?? DateTime.now();
    
    // 输出日期字符串
    print(_day.getDateTimeStr());
    print(_day.getDateTimeStr(
        format: 'yyyy-MM-dd HH:mm:ss.SSS EEEE', localType: MiniLocalType.en));
    
    // 当前日期输出
    _day = DateTime.now();
    print(_day.getDateTimeStr(format: 'yyyy年MM月dd日 HH时mm分ss秒 EEEE'));
    print(_day.getDateTimeStr(
        format: 'yyyy-MM-dd HH:mm:ss.SSS EEEE', localType: MiniLocalType.en));
    print(_day.getDateTimeStr());
    print(_day.getDateTimeStr(format: 'MM-dd HH:mm EE'));
    print(_day.getDateTimeStr(format: 'MM-dd HH:mm'));
    
    // 比较两个日期
    DateTime _one = "2020-02-12 01:12:11".toDateTime ?? DateTime.now();
    DateTime _two = "2020-02-12 01:12:12".toDateTime ?? DateTime.now();

    expect(_two > _one, true);
    expect(_two >= _one, true);
    expect(_one < _two, true);
    expect(_one <= _two, true);
  });

  test("month", () {
    // 生成月份列表
    StringBuffer buffer = StringBuffer();
    StringBuffer title = StringBuffer();
    DateTime _start = DateTime(2021, 1, 31);
    List.generate(28, (firstDay) {
      firstDay += 1;
      DateTime _month = _start.copyWith();
      buffer.write("${firstDay.twoDigits} | ");
      List.generate(12, (_) {
        buffer
          ..write(_month.firstDayInMonth(firstDay).getDateStr(format: "MM-dd"))
          ..write('~')
          ..write(_month.lastDayInMonth(firstDay).getDateStr(format: "MM-dd"))
          ..write('  ');
        _month = _month.firstDayInNextMonth(firstDay);
      });
      buffer.write("\n");
    });
    print(buffer);
  });

  test("weekday", () {
    // 获取当前日期及其相关信息
    DateTime _time = "2021-01-10".toDateTime ?? DateTime.now();
    StringBuffer buffer = StringBuffer("当前时间: ")
      ..write(_time.getDateStr(format: 'yyyy-MM-dd EEEE'))
      ..write(",全年")
      ..write(_time.daysOfYear)
      ..write('天,现在是第')
      ..write(_time.dayIndexOfYear)
      ..write('天。\n')
      ..write("=======" * 7 + " 获取当前所在周  " + "=======" * 7)
      ..write('\n');
    for (int i = 1; i < 8; i++) {
      buffer
        ..write("| ")
        ..write(_time.firstDayInWeek(i).getDateStr(format: 'EEEE'))
        ..write("作为每周的第一天。")
        ..write('\n');
      List<DateTime> _weekdays = _time.getWeekdays(i);
      buffer
        ..write("| 本周包含:")
        ..write(_weekdays.map((e) => e.getDateStr(format: 'MM-dd EE')))
        ..write('\n')
        ..write("| 本年第一周:")
        ..write(_time
            .getFirstWeekdaysInYear(i)
            .map((e) => e.getDateStr(format: 'MM-dd EE')))
        ..write('\n')
        ..write("| 当前日期:")
        ..write(_time.getDateStr(format: 'yyyy-MM-dd EEEE'))
        ..write(
            "处在第 ${_time.weekIndexOfYear(i)} 周第 ${_time.dayIndexOfWeek(i)} 天。")
        ..write('\n')
        ..write("------" * 18)
        ..write('\n');
    }
    print(buffer);
  });
}

StringExtension

StringExtension 提供了一些实用的方法来检查和操作字符串。

import 'package:flutter_test/flutter_test.dart';
import 'package:mini_extension/mini_extension.dart';

void main() {
  test('string_extension', () {
    // 验证手机号码
    String str = "18516634912";
    assert(str.isPhone);
    
    // 验证非手机号码
    str = "tel12121";
    assert(!str.isPhone);
    
    // 验证邮箱
    str = "1212@12.com";
    assert(str.isEmail);
    
    // 验证数字
    str = "-1212";
    assert(str.isAllNumber);
    
    // 验证身份证号码
    str = "342921201002032133";
    assert(str.isIdCard18);
    
    // 验证正数
    str = "1234";
    assert(str.isPositiveNumber);
    
    // 验证URL
    str = "http://123.com";
    assert(str.isUrl);
    str = "https://123.com";
    assert(str.isUrl);
    str = "ftp://123.com";
    assert(str.isUrl);
    
    // 验证字符串包含子串
    str = "121-swaa-21";
    assert(str.containsList(['12', 'aa']));
    
    // 验证字符串截取
    str = "AA" * 5 + "BBB" * 7;
    print(str.ellipsis(12));
    print(str.isIncludeIndex(10, 12));
    assert(str.isIncludeIndex(10, 31));
    
    // 验证字符串是否包含中文
    str = "JsonYe叶";
    assert(str.hasZh);
    
    // 验证IP地址
    str = "127.0.0.1";
    assert(str.isIp);
    str = "12.0.0";
    assert(!str.isIp);
  });
}

示例代码

以下是一个完整的示例代码,展示了如何在 Flutter 应用程序中使用 mini_extension 插件。

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headlineMedium,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ),
    );
  }
}

更多关于Flutter迷你扩展功能插件mini_extension的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter迷你扩展功能插件mini_extension的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,关于Flutter迷你扩展功能插件 mini_extension 的使用,以下是一个简要的代码案例展示,以帮助你理解如何在Flutter项目中集成和使用该插件。请注意,实际使用时,你需要确保已经正确安装并配置了 mini_extension 插件。

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

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

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

接下来,在你的 Flutter 项目中,你可以按照以下方式使用 mini_extension 插件。假设 mini_extension 提供了一些简单的功能,比如显示一个自定义的Toast消息(这只是一个假设,具体功能请参考插件的官方文档)。

示例代码

  1. 导入插件

在你的 Dart 文件中导入 mini_extension 插件:

import 'package:mini_extension/mini_extension.dart';
  1. 使用插件功能

假设 mini_extension 提供了一个 showToast 方法来显示Toast消息,你可以这样使用它:

import 'package:flutter/material.dart';
import 'package:mini_extension/mini_extension.dart'; // 导入插件

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Mini Extension Demo'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () {
              // 使用插件提供的showToast方法
              MiniExtension.showToast('Hello, this is a toast message!');
            },
            child: Text('Show Toast'),
          ),
        ),
      ),
    );
  }
}

注意事项

  • 插件方法调用:上面的 MiniExtension.showToast 是一个假设的方法调用。实际使用时,请查阅 mini_extension 的官方文档,了解具体的方法和用法。
  • 错误处理:在实际应用中,添加适当的错误处理逻辑,以确保插件方法调用失败时的用户体验。
  • 插件版本:确保你使用的是最新版本的插件,以获取最新的功能和修复。

由于 mini_extension 是一个假设的插件名称,实际使用时请替换为具体的插件名称和对应的方法。如果 mini_extension 是你自定义的插件或者某个具体存在的插件但名称不同,请根据实际情况调整代码。如果插件提供了更复杂的功能,比如与原生代码交互,你可能还需要配置原生(Android和iOS)代码。

回到顶部