Flutter未定义功能插件dartpip的使用

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

Flutter未定义功能插件dartpip的使用

dartpip

pub package

类似于 pip,但用于Dart,大量灵感来自于 pub 命令。

将Python模块(包)添加到您的Dart或Flutter项目中。然后通过 python_ffipython_ffi_dart 在Dart代码中使用它们。

目录

  1. 开始使用
    1. 安装
    2. 使用
      1. 声明Python依赖
      2. 为所有Python依赖添加源
      3. 捆绑Python依赖
  2. 命令
    1. 捆绑
    2. 捆绑模块
    3. 下载
    4. 安装

开始使用

安装

安装 dartpip 作为全局包 通过 pub.dev 以便可以从系统上的任何位置使用:

$ dart pub global activate dartpip

或者仅将 dartpip 添加为当前项目的开发依赖项:

$ dart pub add --dev dartpip
$ flutter pub add --dev dartpip

使用

要将Python依赖项添加到您的Dart / Flutter项目中,请执行以下命令:

$ dartpip install <package>

如果您将 dartpip 安装为开发依赖项,可以通过 dart run / flutter run 运行它:

$ dart run dartpip install <package>
$ flutter run dartpip install <package>

您可以一次指定多个依赖项:

$ dartpip install <package1> <package2> <package3>

或者不指定任何包,将会安装在 pubspec.yaml 中指定的所有依赖项:

$ dartpip install

请参阅下文如何在 pubspec.yaml 中手动声明Python依赖项。

手动声明Python依赖项

pubspec.yaml 中将任何纯Python模块作为依赖项添加。为此,请创建一个新的顶级键 python_ffi 并包含子键 modules

python_ffi:
  modules:
    json_parser: any

您无需单独声明子模块。dartpip 将自动检测它们。

注意: 当前指定版本没有效果。您可以指定 any 或其他任何值。建议使用 any,因为它将与未来的 dartpip 版本兼容。

使用未上传到PyPI的本地依赖项

除了按名称和版本约束(或 any)声明模块外,您还可以指定对本地目录的依赖项。这称为路径依赖项。

python_ffi:
  modules:
    my_module:
      path: /path/to/my/module

您可以指定相对路径或绝对路径。如果路径包含特殊字符,则将其用引号括起来会更有利。

为所有Python依赖项添加源

注意: 当使用 dartpip install 时,此步骤不是必需的。

点击展开详细信息 将您在 pubspec.yaml 中指定的所有Python模块的源文件放在一个目录中。您可以为包含多个源文件的Python模块创建子目录。在捆绑Python模块时,目录结构将被保留。

确保还添加了您在 pubspec.yaml 中指定的所有Python模块的源文件。如果这些文件在这个目录中,dartpip 将自动检测它们。

例如,这样的源目录可能如下所示:

python-modules/
├── json_parser/
│   ├── __init__.py
│   ├── json_parser.py
│   ├── json_parser_test.py
│   └── LICENSE.TXT
├── liblax/
│   ├── __init__.py
│   ├── lexer.py
│   ├── LICENSE.TXT
│   └── parser/
│       ├── __init__.py
│       └── src.py
└── structs.py

这里 liblax.parser 是一个自动包含的子模块。

捆绑Python依赖项

注意: 当使用 dartpip install 时,此步骤不是必需的。

点击展开详细信息 运行 bundle 命令来捆绑当前Dart / Flutter项目的所有Python依赖项:

$ dartpip bundle -r <app-root> -m <python-modules-root>

<app-root> 是Dart / Flutter应用程序的根目录,即包含 pubspec.yaml 文件的目录。<python-modules-root> 是Python模块源文件的根目录。指定上一步中的目录。

注意: bundle 命令和上述步骤已被 install 命令所取代。

命令

bundle

捆绑所有在 pubspec.yaml 中指定的Python模块以供Dart / Flutter应用程序使用。

会发生什么?

  1. pubspec.yaml 文件将被解析,并收集所有Python模块。Python模块在 python_ffi 部分中指定。
  2. 收集来自 python-modules-root 选项指定的目录中的Python模块。
  3. 对于Flutter项目,Python模块将被复制到 python-modules 目录,并添加到 pubspec.yaml 文件的 assets 部分。对于Dart项目,Python模块将嵌入到单个 python_modules.g.dart 文件中,并添加到 lib 目录。
  4. 对于Flutter项目,所有添加的Python模块将注册到 python-modules 目录内的 modules.json 文件中,并添加到 pubspec.yaml 文件的 assets 部分。这允许与 python_ffi 包无缝集成。对于Dart项目,所有添加的Python模块将注册到 lib 目录内的 python_modules.g.dart 文件。该文件包括一个包含所有Python模块及其源的 Map,编码为Dart常量,可由 python_ffi_dart 包无缝使用。

使用

$ dartpip bundle [arguments]
-h, --help                               打印此使用信息。
-r, --app-root (mandatory)               
-m, --python-modules-root (mandatory)    

运行 dartpip help 查看全局选项。

选项

选项 缩写 描述
--app-root -r Dart / Flutter应用程序的根目录。
--python-modules-root -m Python模块源文件的根目录。

bundle-module

捆绑Python模块到Dart应用程序中。

会发生什么?

bundle,但仅针对单个Python模块。

使用

$ dartpip bundle-module [arguments]
-h, --help                         打印此使用信息。
-r, --app-root (mandatory)         
-m, --python-module (mandatory)    
-t, --app-type                     [flutter (默认), console]

运行 dartpip help 查看全局选项。

选项

选项 缩写 描述
--app-root -r Dart / Flutter应用程序的根目录。
--python-modules-root -m Python模块源文件的根目录。
--app-type -t Dart / Flutter应用程序的类型。 可能的值是 consoleflutter

download

从PyPI下载Python模块。

会发生什么?

  1. pubspec.yaml 文件将被解析,并收集所有Python模块。Python模块在 python_ffi 部分中指定。
  2. Python模块将从PyPI中收集。

使用

$ dartpip download [arguments]
-h, --help    打印此使用信息。

运行 dartpip help 查看全局选项。

install

别名:add

将Python模块添加到当前Dart / Flutter项目中。它们将在 pubspec.yaml 中指定并捆绑到Dart应用程序中。

注意: 此命令替代了 bundle 命令。

会发生什么?

  1. pubspec.yaml 文件将被解析,并收集所有Python模块。Python模块在 python_ffi 部分中指定。
  2. 命令中指定的Python模块将添加到 pubspec.yaml 文件。
  3. 传递依赖项将被解析并添加到 pubspec.yaml 文件。(注意: 当前实现非常简单。忽略版本约束。)
  4. 所有Python模块将从PyPI或路径依赖项的源目录中收集。
  5. 对于Flutter项目,Python模块将被复制到 python-modules 目录,并添加到 pubspec.yaml 文件的 assets 部分。对于Dart项目,Python模块将嵌入到单个 python_modules.g.dart 文件中,并添加到 lib 目录。
  6. 对于Flutter项目,所有添加的Python模块将注册到 python-modules 目录内的 modules.json 文件中,并添加到 pubspec.yaml 文件的 assets 部分。这允许与 python_ffi 包无缝集成。对于Dart项目,所有添加的Python模块将注册到 lib 目录内的 python_modules.g.dart 文件。该文件包括一个包含所有Python模块及其源的 Map,编码为Dart常量,可由 python_ffi_dart 包无缝使用。

使用

$ dartpip install [arguments]
-h, --help    打印此使用信息。

运行 dartpip help 查看全局选项。

完整示例

import "package:dartpip/dartpip.dart";

Future<void> main(List<String> arguments) async {
  await DartpipCommandRunner().run(arguments);
}

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

1 回复

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


在Flutter中,如果你尝试使用一个未定义或未发布的插件(如你提到的 dartpip),你通常会遇到编译错误,因为Flutter工具链无法识别这个插件。由于 dartpip 并不是一个广为人知的Flutter插件,我假设它可能是一个自定义插件或你误写了插件名称。

不过,为了展示如何正确集成和使用一个Flutter插件(假设它存在并且已经发布到pub.dev),我可以提供一个标准的集成步骤和示例代码。

1. 查找并添加插件

首先,你需要确保插件存在于 pub.dev 上。由于 dartpip 不是一个真实存在的插件,这里我们将使用 path_provider 作为示例,这是一个常用的Flutter插件,用于访问文件系统路径。

pubspec.yaml 文件中添加依赖:

dependencies:
  flutter:
    sdk: flutter
  path_provider: ^2.0.0  # 使用最新版本

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

2. 使用插件

接下来,在你的Flutter项目中导入并使用这个插件。以下是一个简单的示例,展示如何使用 path_provider 插件来获取并打印应用程序的文档目录路径:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Path Provider Example'),
        ),
        body: Center(
          child: FutureBuilder<String>(
            future: _getApplicationDocumentsDirectory(),
            builder: (context, snapshot) {
              if (snapshot.connectionState == ConnectionState.done) {
                if (snapshot.hasError) {
                  return Text('Error: ${snapshot.error}');
                } else {
                  final directory = snapshot.data;
                  return Text('Application documents directory: $directory');
                }
              } else {
                return Text('Loading...');
              }
            },
          ),
        ),
      ),
    );
  }

  Future<String> _getApplicationDocumentsDirectory() async {
    final directory = await getApplicationDocumentsDirectory();
    return directory.path;
  }
}

3. 运行应用

确保你的开发环境设置正确,然后运行 flutter run 来启动应用。你应该能看到应用程序的文档目录路径被打印在屏幕上。

注意

  • 如果你确实在寻找一个名为 dartpip 的插件,但它在pub.dev上不存在,你可能需要检查你的信息来源或确认插件名称是否正确。
  • 如果你是在尝试开发一个自定义插件,你需要遵循Flutter插件开发的官方文档来创建和发布你的插件。
  • 对于未定义或自定义的插件,你需要手动编写Dart代码和原生代码(如Android的Kotlin/Java和iOS的Swift/Objective-C),并确保它们正确集成到你的Flutter项目中。

希望这能帮助你理解如何在Flutter中集成和使用插件!如果你有更具体的问题或需要进一步的帮助,请随时提问。

回到顶部