如何在另一个Flutter应用程序中使用本地的Flutter包?

173

如何在另一个Flutter应用程序中使用本地Flutter包?

我使用以下命令创建了一个包:

flutter create --template=package my_new_package

然后在我的应用程序源代码中 => main.dart

import "package:my_new_package/my_new_package.dart" // can not find the package

1
我也遇到了同样的问题。虽然应用程序运行了,但是出现了“URI不存在”的错误。我执行了“flutter packages get”,但结果仍然相同。 - hrsma2i
4个回答

287

在你的Flutter应用程序中找到此文件 => pubspec.yaml

使用本地依赖

    dependencies:
       flutter:
         sdk: flutter
       my_new_package:
         path: ./my_new_package
注意: 上面的./my_new_package表示包含pubspec.yamlmy_new_package目录是应用程序的子目录。 如果您将软件包作为与应用程序相同级别的目录,换句话说,在目录树中更高的一个级别,您可以使用../my_new_package(注意双点)或软件包目录的完整路径。

99
注意:这里有一个陷阱,我想提醒大家。不要在Flutter根目录下创建名为packages的文件夹并将软件包放在其中。构建时会删除packages文件夹。 - TheGwa
3
@SacWebDeveloper 上面的答案是正确且没有错误的。我的评论只是一个警告。如果你有项目特定的包,朴素的做法是将它们放在一个 /packages 目录下,该目录位于你的项目根目录,与 /android/ios/tests 等目录处于同一级别。在撰写本文时,/packages 目录在构建过程中被覆盖,并会清除你的包。已经有一段时间没有测试过了。 - TheGwa
2
官方文档链接在这里,用于包和插件:点击此处 - Tokenyet
4
哦,这是有用的信息。谢谢。也许可以把它称为“插件”,或者将它们添加到“lib/packages”中?也许社区应该想出一个惯例。 - SacWebDeveloper
11
似乎在构建过程中不再覆盖 /packages,而官方文档中也没有提及将文件放在该名称目录中存在任何限制。我认为警告已经不再适用了。 - Rob
显示剩余2条评论

37

路径依赖:Flutter 应用程序可以通过文件系统路径(dependency)依赖于插件。路径可以是相对的或绝对的。例如,要依赖于位于与应用程序相邻目录中的插件 plugin1,请使用以下语法:

dependencies:
  plugin1:
    path: ../your_package/

当我想要将一个插件依赖于同一路径下的另一个插件时,这对我非常有用。 - RaSha
再次强调,您的应用程序和包应该在同一个目录中。 - Mahesh Jamdade

19
完整的流程如下:
  1. 下载你想要使用的插件代码,并将其放置在与你的Flutter项目目录的"同级"位置
  2.  -- 插件名称  
     -- 你的Flutter目录 -- lib
                        -- android
                        -- ios 等等
    
  3. 将插件路径添加到pubspec.yaml文件中。*如果你不确定要使用的正确插件名称,请查看插件的pubspec.yaml文件中的name:属性。插件目录也必须使用相同的name:保存
  4. dependencies:
     插件名称:
       path: ../插件名称
    
  5. 运行Pub get,然后你可以像导入其他插件一样导入它。唯一的区别是,在开发过程中,当你点击任何插件类时,它将指向本地文件。
*注意:还要删除附带包中的“example”文件夹。你不需要它,并且在项目升级过程中会很麻烦维护。

3

嘿,我在开始使用flutter之后也遇到了同样的问题。我在我的应用程序中实现了pdf_view插件的示例,以便将其更改为闪烁效果而不是CircularProgressIndicator()

一些知识

您可以编辑通过 flutter pub get 获取的插件,但当您使用flutter创建应用程序包时,它们可能会被替换。

现在来看一个样本插件,假设以advance_pdf_viewer为例:

GitHub链接
  1. 下载zip文件并将其提取到pdf_viewer/中。

  2. 确保pdf_viewer/具有包括libAndroidiOS和所有相关文件在内的所有文件。

  3. 将您的pdf_viewer文件夹复制到项目目录中,例如,我的项目为invoice_viewer,因此其根目录具有所有文件夹,例如lib、Android、iOS等,在其中复制它以及libAndroidiOS

  4. 现在打开您的pubsec.yaml文件并编写如下代码:

dependencies:
  flutter:
    sdk: flutter

  #  advance_pdf_viewer: ^2.0.0
  advance_pdf_viewer:
    path: ./pdf_viewer
  1. 在注释中,我已经将服务器版本替换为本地版本,并更改了插件的viewer.dart文件以实现所需的更改。

希望您和其他人从这个发现中获得一些信息!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接