搜索插件、代码仓与 APP 分类

screwdriver 封面
插件详情v5.12.0

screwdriver

一个 Dart 包,旨在提供有用的扩展和辅助函数,以简化和加速开发。

AndroidiOSWebmacOSWindowsLinux
近 30 天下载
1030
喜欢数
114
Pub 分数
160

安装插件

flutter pub add screwdriver

插件介绍

基于插件公开信息、社区数据与项目使用情况整理的选型参考。

Screwdriver 是一个 Dart 包,提供了一组有用的扩展和辅助函数,以简化和加速跨多个平台的开发。它提供了用于字符串操作、日期处理和空安全等常见任务的实用方法,减少了样板代码。该包旨在提升开发者生产力,增强了 Flutter 和 Dart 项目的可读性和一致性。该包支持 Android、iOS、Web、macOS、Windows 和 Linux,适用于跨平台应用开发。

适合场景

  • 快速的字符串和日期工具
  • 减少重复代码
  • 跨平台开发
  • 增强空安全
  • 提高代码可读性
  • 加速原型开发

主要特点

  • 丰富的 Dart 扩展集
  • 空安全的实用函数
  • 跨平台兼容性
  • 最小依赖开销
  • 通过 pub 实现轻松集成
  • 文档齐全的辅助工具

适合对象

  • 寻求生产力提升的Flutter开发者
  • 致力于标准化实用代码的团队
  • 需要快速开发的项目
  • 仅 Dart 或跨平台应用
  • 重视简洁明了语法的开发者

使用建议

  • 如果在跨团队使用,可能会引入细微的 API 变更
  • 仅限于实用程序增强,而非完整框架
  • 升级版本时需仔细审查
  • 不适合复杂的业务逻辑
  • 最好与已建立的编码标准配合使用

原始 README

以下为关联源码仓库的 README 原文快照,最新内容请访问源码仓库。

banner

Screwdriver

A dart package aiming to provide useful extensions and helper functions to ease and speed up development.

Tests Code Quality Codecov Pub Version Docs

  • 📋 Well Documented
  • ⚔️ Fully Tested
  • 👌 Follows Code Quality Guidelines
  • 🦾 Production Ready
  • collection included for extra extensions.

Stats

Check out EXTENSIONS.md for a complete list of all the available extensions.

Extensions:                    322
Extension Types:               4
Helper Classes:                5
Helper Functions & Getters:    29
Typedefs:                      10
Mixins:                        2

Last Updated: Fri, Aug 28, 2026 - 04:14 PM

Stats auto generated using Github Workflow.


To checkout all the available extensions, helper functions & classes, see documentation.

Installation

  1. Add as a dependency in your project's pub spec.yaml.
dependencies:
  screwdriver: <latest_version>

Note: Screwdriver exports collection package as well. So, you don't need to add collection as a dependency in your project.

  1. Import library into your code.
import 'package:screwdriver/screwdriver.dart';
  1. Use this import for using IO extensions.
import 'package:screwdriver/screwdriver_io.dart';

A Glimpse of Screwdriver

String
'hello'.capitalized; // Hello
'   '.isBlankl // true;
'45'.toIntOrNull(); // 45
'html'.wrap('<','>'); // <html>
'1010111010001'.isBinary; // true
'test@example.com'.isEmail; // true
'abcd'.reversed; // dcba
'This is a test'.words; // ['this', 'is', 'a', 'test']
'{"name":"John"}'.parseJson(); // map: {name:John}
'#hello'.removePrefix('#'); // hello
Map
final Map<String, dynamic> map = {
  'name': 'John',
  'age': 24,
};

for(final (key, value) in map.records) {
  print('$key: $value');
}
Int
20.isDivisibleBy(5); // true
0.asBool; // false
6.twoDigits; // '06'
2020.isLeapYear; // true
10.repeat((count) => print(count));
DateTime & Duration
now().isMonday;
final DateTime fiveDaysAgo = 5.daysAgo;
final Duration nineMinutes = 9.minutes;
45.minutes.isInHours; // false
15.daysAgo < 5.days.ago; // true
20.minutes.ago >= 50.minutes.ago; // true
now().previousDay; // yesterday
10.days.ago.isBetween(15.days.ago, now()); // true
Double and Bool
randomDouble(max: 50); // random double value between 0 and 50
56.0.isWhole; // true
true.toggled; // false
false.toInt(); // 0

Scope Functions
final User user = User(name: 'John').apply((user){
  user.age = 24;
  user.email = 'john@doe.com';
});
final String age = user.run((u)=> (u.age + 20).toString());
Collections
users << User(name: 'John'); // appends user to users list
users.firstOrNull;
users.drop(5);
users.takeLast(3);
user.all((u) => u.age > 18); // returns bool
cars.groupBy((car) => car.color);
cars.count((car) => car.isPorsche);
cars.random();
cars.maxBy((car) => car.price);
cars.intersect(otherCars);
{'name': 'John'} << Pair('email','john@doe.com');
Future
postDelayed(2000,(){
  print('after 2 seconds');
});
IO
file.onModified(() => print('file modified'));
file.clear(); // flushes all the data of file
file.isEmpty;
file.appendString('hello');
file << 'some text';
file1 + file2; // appends file2 content at the end of file1
Some More
check(divider != 0);
runCaching((){
  count / 0;
});
TODO('find a way to implement this properly'); // throws UnimplementedError on invocation
Triple(45,true, 'Hello World');
user.takeIf((u) => u.age > 18)?.allowAccess();
person.takeUnless((p) => p > 18)?.areTeenagers();
final DateTime date = tomorrow;
yesterday.isInDecember;

Check out EXTENSIONS.md for a complete list of all the available extensions.

Checkout documentation for more details.

Features and bugs

Please file feature requests and bugs at the issue tracker.

Liked Screwdriver?

Show some love and support by starring the repository.

Or You can

Buy Me A Coffee

License

Copyright (c) 2020, Birju Vachhani
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this
   list of conditions and the following disclaimer.

2. Redistributions in binary form must reproduce the above copyright notice,
   this list of conditions and the following disclaimer in the documentation
   and/or other materials provided with the distribution.

3. Neither the name of the copyright holder nor the names of its
   contributors may be used to endorse or promote products derived from
   this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

所属分类

依赖

依赖清单 7 项

源码仓库

使用此插件的项目

暂无相关数据。