Flutter功能扩展插件pure_extensions的使用

Flutter功能扩展插件pure_extensions的使用

Dart Extensions

Adds several extensions

描述
GeoPoint 定义一个地理点。
GeoBounds 一个经纬度对齐的矩形。
CompositeMapSubscription 作为一个可以一次性取消多个订阅的地图。
ReadableFile 实现一个多平台接口以读取文件。
DurationBuilder [Duration] 的构建器。
DateTimeBuilder [DateTime] 的构建器。
UriBuilder [Uri] 的构建器。

Color

Extensions color code we thank “TinyColor”

String

See recase for many other extensions

命令 描述
ifEmpty 如果字符串为空,则返回’text’,否则返回字符串。
isBlank 如果字符串为空或只包含空格,则返回true,否则返回false。
ifBlank(() => ‘text’) 如果字符串为空或只包含空格,则返回’text’,否则返回字符串。
更多方法…请完善此列表…

num

它们扩展了’math’包中的方法。

Iterable<T>

See collection for many other extensions

命令 描述
nullIfEmpty 返回null或如果它是空的则返回true。
replaces 用新元素替换旧元素。
whereNotContains 返回没有不良元素的可迭代对象。
joinBy 按函数连接元素。
joinElement 连接元素。
containsEvery 检查此可迭代对象中的每个元素是否都在[other]可迭代对象中。
containsAny 检查此可迭代对象中的任何元素是否在[other]可迭代对象中。
groupBy 根据结果将列表拆分为存储在对象中的子列表。
generateMap 通过集合生成映射。
elementAtOrNull 返回[index]th元素或如果不存在则返回null。

Iterable<num/int/double/BigInt/Rational>

命令 描述
sum 计算集合中所有数字的总和。
average 计算集合中所有数字的平均值。
subtract 计算集合中所有数字的减法。
divide 计算集合中所有数字的除法。
multiply 计算集合中所有数字的乘法。
sumAllBy 将[number]加到集合中的所有项目上。
subtractAllBy 从集合中的所有项目中减去[number]。
divideAllBy 将[number]除以集合中的所有项目。
multiplyAllBy 将[number]乘以集合中的所有项目。

Iterable<MapEntry<K,V>>

命令 描述
toMap 将条目的集合转换为[Map]。
toMapList 根据键分组结果。
keys 只返回键。
values 只返回值。

Iterable<Future<T>>

命令 描述
waitFutures 与[Future.wait]方法相同。
anyFutures 与[Future.any]方法相同。

Iterable<GeoPoint>

命令 描述
center 计算中心。
northeast 计算东北角。
southwest 计算西南角。
internalBounds 计算内部角。
externalBounds 计算外部角。

Map<K,V>

命令 描述
whereNotNull 返回不包含null键和值的[Map]。
generateIterable<K,V>(T Function(K key, V value) generator) 从条目返回一个列表。
where 返回满足[test]的所有条目的新映射。
firstWhere 返回满足[test]的第一个条目。
lastWhere 返回满足[test]的最后一个条目。
singleWhere 返回满足[test]的唯一元素。
firstOrNull 如果存在返回第一个条目,否则返回null。
lastOrNull 如果存在返回最后一个条目,否则返回null。
singleOrNull 如果存在返回唯一条目,否则返回null。
reduce 通过迭代地组合条目来减少一个映射到单个值。
every 检查此映射中的每个条目是否满足[test]。
any 检查此映射中的任何条目是否满足[test]。
fold 通过迭代地组合条目来减少一个映射到单个值。
get 返回[key]的值。
getOrNull 返回[key]的值或如果不存在则返回null。

DateTime (DateTimeBuilder)

命令 描述
DateTime.copyWithPosition

Duration (DurationBuilder)

命令 描述
days 人类天数表示(0 -> …)
hours 人类小时表示(0 -> 24)
minutes 人类分钟表示(0 -> 59)
seconds 人类秒数表示(0 -> 59)
milliseconds 人类毫秒表示(0 -> 999)
microseconds 人类微秒表示(0 -> 999)
copyWith 使用新值复制此对象。
toBuilder 将此对象转换为构建器。
rebuild 通过[DurationBuilder]更新此对象。

Stream<T>

命令 描述
asStream 返回自身并带有[Stream]类型。
asBroadcast 返回一个广播流而不必不必要的包装它。
onTrackedErrorResume 类似于[Rx.OnErrorExtensions.onErrorResume]但带有[StackTrace]。
onTrackedErrorReturnWith 类似于[Rx.OnErrorExtensions.onErrorReturnWith]但带有[StackTrace]。
distinctRuntimeType Stream.distinct] by [T.runtimeType]。
whereNotNull

示例代码

import 'package:pure_extensions/pure_extensions.dart';

void main() {
  // 使用String扩展
  String str = "";
  print(str.ifEmpty("Default Text")); // 输出: Default Text

  // 使用Iterable<num>扩展
  List<int> numbers = [1, 2, 3, 4, 5];
  int sum = numbers.sum;
  print(sum); // 输出: 15

  // 使用Map<K,V>扩展
  Map<String, int> map = {'a': 1, 'b': 2};
  var filteredMap = map.whereNotNull();
  print(filteredMap); // 输出: {a: 1, b: 2}

  // 使用DateTimeBuilder扩展
  DateTime now = DateTime.now();
  var dateTimeBuilder = now.copyWithPosition(hour: 12, minute: 30);
  print(dateTimeBuilder); // 输出: 当前日期时间,时钟设置为12:30

  // 使用DurationBuilder扩展
  Duration duration = Duration(days: 1, hours: 2, minutes: 30);
  print(duration.days); // 输出: 1
  print(duration.hours); // 输出: 2
  print(duration.minutes); // 输出: 30

  // 使用Iterable<Future<T>>扩展
  List<Future<int>> futures = [
    Future.delayed(Duration(seconds: 1), () => 1),
    Future.delayed(Duration(seconds: 2), () => 2),
  ];
  var results = await Future.wait(futures);
  print(results); // 输出: [1, 2]
}

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

1 回复

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


当然,pure_extensions 是一个用于 Flutter 的功能扩展插件,它提供了一些实用的扩展函数来增强 Dart 语言的功能。下面是一些关于如何使用 pure_extensions 插件的代码示例。

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

dependencies:
  flutter:
    sdk: flutter
  pure_extensions: ^最新版本号

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

示例代码

1. 使用 String 扩展函数

pure_extensionsString 类提供了一些实用的扩展函数,比如 capitalizepluralize 等。

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('pure_extensions Demo'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text(
                'Hello World'.capitalize, // 将字符串首字母大写
                style: TextStyle(fontSize: 24),
              ),
              SizedBox(height: 20),
              Text(
                '1 apple'.pluralize(2), // 将字符串进行复数化处理
                style: TextStyle(fontSize: 24),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

2. 使用 List 扩展函数

pure_extensions 也为 List 类提供了一些扩展函数,比如 chunkflatten 等。

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    List<int> numbers = List.generate(10, (index) => index + 1);

    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('pure_extensions List Demo'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text(
                'Chunk Demo:',
                style: TextStyle(fontSize: 20),
              ),
              SizedBox(height: 10),
              // 将列表分成每组3个元素的子列表
              Expanded(
                child: ListView.builder(
                  itemCount: numbers.chunk(3).length,
                  itemBuilder: (context, index) {
                    return Column(
                      children: numbers.chunk(3)[index].map((e) => Text('$e')).toList(),
                    );
                  },
                ),
              ),
              SizedBox(height: 20),
              Text(
                'Flatten Demo:',
                style: TextStyle(fontSize: 20),
              ),
              SizedBox(height: 10),
              // 将嵌套的列表展平成一个列表
              ListTile(
                title: Text(
                  '[[1, 2], [3, 4], [5, 6]]'.replaceAll('[', '').replaceAll(']', '') ==
                      numbers.take(6).chunk(2).map((e) => [e]).toList().flatten().join(', '),
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

注意

  • 上述示例中,capitalizepluralizeString 的扩展函数。
  • chunkflattenList 的扩展函数。
  • 在实际使用中,你可能需要根据 pure_extensions 的文档来查看最新的扩展函数列表和用法。

这些示例展示了如何使用 pure_extensions 来增强 Dart 的基本类型,使其更易于使用。希望这些示例对你有帮助!

回到顶部