Flutter实用扩展功能插件handy_extensions的使用
Flutter实用扩展功能插件handy_extensions的使用
简介
HandyExtensions
是一个由 Ngonidzashe Mangudya 开发的 Flutter 插件,它为 Flutter 的核心库提供了许多便捷的扩展方法,使开发更加高效和简洁。
特性
- BuildContext 扩展:导航、显示 SnackBar、获取屏幕尺寸等。
- String 扩展:转换为大写、小写、首字母大写、获取国家 emoji 等。
- int 扩展:生成 Duration 对象。
- List 扩展:分区、随机选择、分组、交换元素等。
- Map 扩展:交换键值对、复制、移除空值等。
- Nullable 扩展:检查变量是否为空、转换为字符串等。
安装
在 pubspec.yaml
文件中添加依赖:
dependencies:
handy_extensions: ^<version>
使用示例
BuildContext 扩展
导航到新页面
context.goTo(page: const Home());
替换当前页面并导航
context.goTo(page: const Home(), replace: true);
返回上一页
context.goBack();
导航并清除历史记录
context.goToRefresh(page: const Login());
显示 SnackBar
context.notify(message: 'Hello World', isError: false);
获取屏幕尺寸
double screenHeight = context.height;
double screenWidth = context.width;
String 扩展
获取国家 emoji
String country = 'ZW';
String emoji = country.countryEmoji; // 🇿🇼
转换为标题格式
String title = 'hello world';
String titleCase = title.titleCase; // Hello world
转换为标题格式(每个单词首字母大写)
String heading = 'hello world';
String headingCase = heading.headingCase; // Hello World
转换为 double 或 null
String? number = '1';
double? doubleNumber = number.doubleOrNull; // 1.0
转换为 int 或 null
String? number = '1';
int? intNumber = number.intOrNull; // 1
Map 扩展
交换键值对
Map<String, int> map = {'a': 1, 'b': 2};
Map<int, String> swappedMap = map.swap; // {1: 'a', 2: 'b'}
复制 Map
Map<String, int> map = {'a': 1, 'b': 2};
Map<String, int> copiedMap = map.copy; // {'a': 1, 'b': 2}
移除空值
Map<String, int?> map = {'a': 1, 'b': null};
Map<String, int?> cleanedMap = map.removeNulls; // {'a': 1}
调整顺序
Map<String, int> map = {'a': 1, 'b': 2};
Map<String, int> adjustedMap = map.adjustOrder(1, 0); // {'b': 2, 'a': 1}
List 扩展
分区
List<List<int>> partitioned = [1, 2, 3, 4, 5, 6].partition(chunkSize: 3); // [[1, 2, 3], [4, 5, 6]]
随机选择一个元素
String randomItem = ["Hello", "World", "iAMNGONI"].randomItem(); // 随机返回一个元素
随机选择多个元素
List<String> randomItems = ["Hello", "World", "iAMNGONI"].randomItems(count: 2); // 随机返回两个元素
查找第一个符合条件的元素
List<String> list = ['a', 'b', 'c'];
String? character = list.firstWhereOrNull((String item) => item == 'a'); // 'a'
按条件分组
Map<bool, List<int>> grouped = [1, 2, 3, 4, 5, 6].groupBy((i) => i % 2 == 0); // {true: [2, 4, 6], false: [1, 3, 5]}
交换元素
List<int> list = [1, 2, 3, 4, 5];
list.swap(0, 4); // [5, 2, 3, 4, 1]
交换范围内的元素
List<int> list = [1, 2, 3, 4, 5];
list.swapRange(0, 2, 3); // [4, 5, 3, 1, 2]
检查是否有重复元素
List<int> list = [1, 2, 3, 4, 5, 1];
bool hasDuplicates = list.hasDuplicates; // true
插入分隔符
List<int> list = [1, 2, 3, 4, 5, 1];
List<int> interspersed = list.intersperse(100); // [1, 100, 2, 100, 3, 100, 4, 100, 5, 100, 1]
更新符合条件的元素
List<int> numbers = [1, 2, 3, 4, 5];
numbers.updateWhere(
(n) => n.isEven, // 条件
(n) => n * 2, // 更新函数
);
// [1, 4, 3, 8, 5]
// 适用于任何类型
List<String> words = ['hello', 'world', 'dart'];
words.updateWhere(
(s) => s.length <= 4,
(s) => s.toUpperCase(),
);
// ['HELLO', 'world', 'DART']
Int 扩展
生成微秒 Duration
Duration microsecond = 1.microsecond; // 1 微秒
生成毫秒 Duration
Duration milliseconds = 1.milliseconds; // 1 毫秒
生成秒 Duration
Duration seconds = 1.seconds; // 1 秒
生成分钟 Duration
Duration minutes = 1.minutes; // 1 分钟
生成小时 Duration
Duration hours = 1.hours; // 1 小时
生成天数 Duration
Duration days = 1.days; // 1 天
生成周数 Duration
Duration weeks = 1.weeks; // 1 周
组合使用 Duration
Duration duration = 1.weeks + 2.days + 3.hours + 4.minutes + 5.seconds + 6.milliseconds + 7.microseconds;
通用扩展
检查变量是否为空
String? name = null;
bool isNull = name.isNull; // true
Nullable Int 扩展
检查是否为整数
int? number = 1;
bool isInt = number.isInt; // true
int? number = null;
bool isInt = number.isInt; // false
Nullable String 扩展
检查是否为字符串
String? name = 'Ngoni';
bool isString = name.isString; // true
String? name = null;
bool isString = name.isString; // false
如果为空则返回空字符串
String? name = null;
String emptyName = name.orEmpty; // ''
String? name = 'Ngoni';
String nonEmptyName = name.orEmpty; // 'Ngoni'
检查是否真的不为空
String? name = null;
bool isNotReallyEmpty = name.isNotReallyEmpty; // false
String? name = ' ';
bool isNotReallyEmpty = name.isNotReallyEmpty; // false
String? name = 'Ngoni';
bool isNotReallyEmpty = name.isNotReallyEmpty; // true
其他信息
你可以根据需要添加更多的扩展方法,并与社区分享。
希望这些示例能帮助你更好地理解和使用 handy_extensions
插件。如果你有任何问题或建议,欢迎随时提出!
更多关于Flutter实用扩展功能插件handy_extensions的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter实用扩展功能插件handy_extensions的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中使用handy_extensions
插件的示例代码。handy_extensions
是一个提供多种实用功能的Flutter插件,可以帮助开发者快速实现一些常见的功能,比如字符串操作、日期时间处理、集合操作等。
首先,你需要在你的pubspec.yaml
文件中添加handy_extensions
依赖:
dependencies:
flutter:
sdk: flutter
handy_extensions: ^最新版本号 # 请替换为最新版本号
然后运行flutter pub get
来安装依赖。
下面是一些使用handy_extensions
插件的示例代码:
1. 字符串操作
import 'package:flutter/material.dart';
import 'package:handy_extensions/handy_extensions.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Handy Extensions Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Original String: Hello, World!',
style: TextStyle(fontSize: 20),
),
SizedBox(height: 20),
Text(
'Reversed String: ${"Hello, World!".reverse()}',
style: TextStyle(fontSize: 20),
),
SizedBox(height: 20),
Text(
'Camel Case String: ${"hello_world!".toCamelCase()}',
style: TextStyle(fontSize: 20),
),
],
),
),
),
);
}
}
2. 日期时间处理
import 'package:flutter/material.dart';
import 'package:handy_extensions/handy_extensions.dart';
import 'package:intl/intl.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
DateTime now = DateTime.now();
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Handy Extensions DateTime Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Current Date: ${DateFormat('yyyy-MM-dd').format(now)}',
style: TextStyle(fontSize: 20),
),
SizedBox(height: 20),
Text(
'Days in Month: ${now.daysInMonth}',
style: TextStyle(fontSize: 20),
),
SizedBox(height: 20),
Text(
'Is Leap Year: ${now.isLeapYear}',
style: TextStyle(fontSize: 20),
),
],
),
),
),
);
}
}
3. 集合操作
import 'package:flutter/material.dart';
import 'package:handy_extensions/handy_extensions.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
List<int> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Handy Extensions List Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Original List: $numbers',
style: TextStyle(fontSize: 20),
),
SizedBox(height: 20),
Text(
'Reversed List: ${numbers.reversed()}',
style: TextStyle(fontSize: 20),
),
SizedBox(height: 20),
Text(
'Chunk List (size 3): ${numbers.chunk(3)}',
style: TextStyle(fontSize: 20),
),
],
),
),
),
);
}
}
请注意,这些代码示例仅展示了handy_extensions
插件的一部分功能。你可以查阅该插件的官方文档来获取更多信息和功能示例。