Flutter未知功能插件derry的使用(注意:由于插件介绍为undefined,以下基于插件名称进行合理推测)

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

Flutter未知功能插件derry的使用(注意:由于插件介绍为undefined,以下基于插件名称进行合理推测)

Derry

Derry 是一个用于 Dart 的脚本管理器。

Overview

Derry 可以帮助您定义快捷脚本,使您不必一遍又一遍地输入冗长且容易忘记的命令行脚本。例如,您可以将以下命令:

dart run build_runner build --delete-conflicting-outputs

pubspec.yaml 中定义为:

scripts:
  build: dart run build_runner build --delete-conflicting-outputs

然后只需运行:

derry build

Installation

通过 pub.dev 安装 derry 作为全局依赖:

dart pub global activate derry

然后可以使用 derry 在当前 Dart/Flutter 项目中运行命令:

derry [script]

Usage

当调用时,derry 会在当前目录中查找 pubspec.yaml 文件,如果不存在则会抛出错误。可以在 pubspec.yaml 文件中的 scripts 节点下声明脚本。

scripts:
  build: dart run build_runner build

运行:

derry build
# 或者带附加参数
derry build -- --delete-conflicting-outputs

API Documentation

使用定义文件

脚本可以在 pubspec.yaml 文件内配置,也可以在单独的文件中配置。如果使用单独的文件来配置脚本,则将文件名作为 pubspec.yaml 文件中 scripts 节点的值传递。

# pubspec.yaml
scripts: derry.yaml
# derry.yaml
build: dart run build_runner build

将脚本作为列表使用

脚本可以是一个字符串或字符串列表。如果是列表,列表中的字符串将按给定顺序同步执行。

build:
  - dart test
  - echo "test completed"
  - dart run build_runner build

嵌套脚本

脚本可以根据需要嵌套。例如,可以根据操作系统使用不同的构建脚本实现。

build:
  windows:
    - echo 0 # do something
  mac:
    - echo 1 # do something else

可以通过 derry build windows 在 Windows 上调用,通过 derry build mac 在 macOS 上调用。

预处理和后处理脚本

使用预处理和后处理脚本,可以轻松定义在特定脚本前后运行的脚本,而无需担心引用问题。Derry 自动从名称中理解它们。

prepublish:
  - cargo build && copy target blob
  - dart test
publish:
  - dart pub publish
postpublish:
  - rm -rf blob

配置脚本描述

可以通过添加 (description) 选项来添加描述字符串,这对于通过 derry ls -d 命令查看可用脚本列表时非常有用。如果使用 (description) 字段,则必须使用 (scripts) 字段定义脚本。

build:
  (description): script to be called after every update to x.dart file
  (scripts):
    - cat generated.txt
    - dart run build_runner build

配置多行脚本

注意,在脚本列表中,执行将在单独的进程中发生。可以使用 && 在同一进程中执行多个脚本。

# > 或 | 可以用来定义多行字符串,这是标准的 YAML 语法
build: >
  cat generated.txt &&
  dart run build_runner build

# 如果 generated.txt 不存在,第二行不会被调用

使用引用

定义脚本时,可以通过 $ 语法引用其他脚本。这些引用不会使用单独的 derry 进程执行。例如,

test:
  - dart run test
  - echo "test completed"
build:
  - $test # instead of using derry test
  - $test --ignored # even with arguments
  - flutter build
generate:
  env:
    - echo env
release:
  - $generate:env # use nested references via :
  - $build

derry test 将启动一个新的 derry 进程来执行,而引用不会,减少了运行 Dart 代码所需的时间,并启动该进程。 但请注意,引用将占用整行脚本。例如,必须为子命令提供单独的一行,不能与其他脚本一起使用或将它们夹在字符串中间。

列出可用脚本

使用此命令查看当前配置中可用的脚本。

derry ls # --description 或 -d 输出描述

检查 derry 脚本的位置

使用此命令查看 derry 脚本文件的位置(绝对路径和相对路径)。还可以使用此命令检查脚本是否正确格式化或位置是否正确。

derry source # --absolute 或 -a 显示绝对路径

升级 derry

dart pub global activate derry # 或
derry upgrade # 将运行 `dart pub global activate derry`

Why & How

说实话,我需要它。虽然制作起来很容易,但在实现脚本执行方面遇到了一些困难。由于 Dart 的 Process 不擅长执行系统命令,因此使用了 Rust 并借助 Foreign Function Interfaces。对于执行,目前在 Windows 上使用 cmd,在 Linux 和 Mac 上使用 bash

Currently Supported Platforms

目前支持 64 位 Linux、Windows 和 Mac。

示例代码

// 查看仓库中的 [derry.yaml] 文件以获取更多详细示例

void main() {
  print('Derry.');
}

希望以上信息对您有帮助!如果您有任何问题或需要进一步的帮助,请随时提问。


更多关于Flutter未知功能插件derry的使用(注意:由于插件介绍为undefined,以下基于插件名称进行合理推测)的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter未知功能插件derry的使用(注意:由于插件介绍为undefined,以下基于插件名称进行合理推测)的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter社区中,尽管某些插件可能还未被广泛认知或文档不够详尽,但基于插件名称“derry”进行合理推测,我们可以尝试展示如何集成和使用一个假想的Flutter插件。请注意,以下代码示例是基于假设构建的,因为实际的“derry”插件功能和API在现实中可能是未知的。

假设的“derry”插件功能

假设“derry”插件提供了一些与设备硬件交互或数据处理相关的功能,比如读取设备传感器数据、执行某些计算任务等。以下是一个如何集成和使用这样一个假设插件的示例。

1. 添加依赖

首先,在pubspec.yaml文件中添加对“derry”插件的依赖(请注意,这里的版本号^x.x.x是假设的,实际使用时需要替换为真实版本号):

dependencies:
  flutter:
    sdk: flutter
  derry: ^x.x.x  # 假设的版本号

然后运行flutter pub get来安装依赖。

2. 导入插件

在需要使用“derry”插件的Dart文件中导入它:

import 'package:derry/derry.dart';

3. 使用插件功能

假设“derry”插件提供了一个readSensorData方法来读取设备传感器数据,以及一个performCalculation方法来执行某些计算。以下是如何使用这些假设方法的示例代码:

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

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String sensorData = 'No data';
  String calculationResult = 'No result';

  @override
  void initState() {
    super.initState();
    // 假设的读取传感器数据方法,这里使用Future来模拟异步操作
    _readSensorData();
    // 假设的执行计算方法,这里传递一些示例参数
    _performCalculation(10, 20);
  }

  Future<void> _readSensorData() async {
    try {
      // 假设的readSensorData方法返回Future<String>
      String data = await Derry.readSensorData();
      setState(() {
        sensorData = data;
      });
    } catch (e) {
      print('Error reading sensor data: $e');
    }
  }

  Future<void> _performCalculation(int a, int b) async {
    try {
      // 假设的performCalculation方法返回Future<int>,执行加法运算
      int result = await Derry.performCalculation(a, b);
      setState(() {
        calculationResult = 'Result: $result';
      });
    } catch (e) {
      print('Error performing calculation: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Derry Plugin Demo'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text('Sensor Data: $sensorData'),
              SizedBox(height: 20),
              Text(calculationResult),
            ],
          ),
        ),
      ),
    );
  }
}

注意事项

  • 由于“derry”插件是假设的,上述代码中的Derry.readSensorData()Derry.performCalculation(int a, int b)方法及其返回类型也是基于假设的。
  • 在实际使用中,你需要查阅“derry”插件的官方文档来了解其真实的功能和API。
  • 如果“derry”插件确实存在但文档不够详尽,你可以尝试在其GitHub仓库的README.md文件、示例代码或issue区寻找更多信息。
  • 如果“derry”插件不存在或功能与你的假设不符,上述代码将无法正常工作。此时,你需要根据实际需求寻找或开发合适的插件。
回到顶部