如何在Flutter中从GitHub添加一个包?

162

我需要使用一个包的最新源代码,但最新的源代码还没有发布。

我应该在pubspec.yaml中写什么来从Github上获取一个包?

下面的代码无效。 它不会下载该包,我也无法将其导入我的源代码中。

dependencies:
  flutter:
    sdk: flutter

  carousel_pro:
    git:
      url: https://github.com/jlouage/flutter-carousel-pro.git

1
你运行了 flutter packages get 吗? - Günter Zöchbauer
@GünterZöchbauer,是的。您知道github包的路径应该是什么吗?默认导入看起来像这样'import 'package:flutter_redux/flutter_redux.dart';'。也许还有另一种从github导入包的方法? - Kostya Vyrodov
.packages 文件列出了 flutter-carousel-pro 吗? - Günter Zöchbauer
让我们在聊天中继续这个讨论。 - Kostya Vyrodov
3
尝试重新启动IDE。 - Günter Zöchbauer
显示剩余2条评论
8个回答

237

pubspec.yaml 示例


具有特定分支的依赖项:

dependencies:
  flutter:
    sdk: flutter

  carousel_pro:
    git:
      url: https://github.com/jlouage/flutter-carousel-pro.git
      ref: main # branch name

特定提交的依赖关系:

dependencies:
  flutter:
    sdk: flutter

  carousel_pro:
    git:
      url: https://github.com/jlouage/flutter-carousel-pro.git
      ref: ea12e41 # commit hash

导入包的文件示例:

import 'package:carousel_pro/src/carousel_pro_widgets.dart';
import 'package:flutter/material.dart';

class NewsCarousel extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return SizedBox(
      height: 200.0,
      child: WidgetCarousel(
        autoplay: false,
        pages: [],
      ),
    );
  }
}

注意:如果您的IDE看不到该包,请尝试重新启动它。


1
有没有办法使用特定版本的库? - Sabrina
2
@Mehdico,你可以指定你所依赖的软件包的版本。如果你在询问git软件包方面的问题,那么你可以在这里阅读更多相关信息:https://dart.dev/tools/pub/dependencies#git-packages - Nickr
2
私有的 Github 存储库怎么样?假设我正在开发自己的软件包,而且不想在任何地方发布它,那也可以吗? - Adnan Alshami
1
如果您的代码库命名为master,请使用main。 - iamnabink
10
重要提示:上面使用“url: git://...”的解决方案将不再起作用,因为Git已停止支持未经身份验证的“git://”协议。详情请参见https://github.blog/2021-09-01-improving-git-protocol-security-github/。 - Alex Verbitski
显示剩余2条评论

69

以上答案是正确的,但我添加了一些例子。

所以要在不发布到 pub.dev 的情况下使用 pub/package/lib :

1. 本地 - 保存在某个本地文件夹中

dependencies:
  library_name:
   path: /path/to/library_name

2. 托管 - 放在 Github、Gitlab 等平台上。

dependencies:
  library_name:
   git: https://github.com/username/library_name

或者精确地定位到指定的分支

dependencies:
  library_name:
   git:
    url: https://github.com/username/library_name.git
    ref: dev    #branch name

或者针对特定的提交进行操作

dependencies:
  library_name:
   git:
    url: https://github.com/username/library_name.git
    ref: e234072340    #commit reference id

其中'library_name'必须与该软件包的pubspec.yaml中声明的'name'相同。


57

我将展示一个使用情况,其中您想要访问除主/主要分支之外的特定文件夹:


  amplify_flutter:
    git:
      url: git://github.com/aws-amplify/amplify-flutter.git
      ref: null-safety-master
      path: packages/amplify_flutter/

你的答案对我很有帮助。我只是好奇,如果我们想要使用“path:”参数添加多个特定文件夹,该怎么做呢?我们该如何实现? - Ulaş Kasım
@UlaşKasım 我没有尝试过,所以我不能确定。 - Mohammed Noureldin
我认为你需要多次列出这个依赖项。所以,如果你有另一个包在packages/my_other_dependency,你需要再复制和粘贴一遍所有内容,但是将依赖项名称(amplify_flutter:)更改为my_other_dependency:,然后更新path:指向packages/my_other_dependency/ - Jeff Neet

10
此外,如果需要的话,您还可以使用标签

private_view:
  git:
    url: git@github.com:xxx/private_view.git
    ref: 0.0.2 # tag

5

这里有一个例子

audio_service:
    git:
      url: https://github.com/kaushikgodhani/audio_service.git
      ref: minor #branch name
      path: audio_service  #Folder Path on Github

路径是有用的 - undefined
但这在Flutter CLI命令中不起作用。路径不是git参数的一部分。有什么建议吗?因为我需要将脚本添加到我的流水线中。 - undefined

3
上述方法对我不起作用,但将URL更改为使用https协议后成功了:
dependencies:
  flutter:
    sdk: flutter

  flutter_tflite:
      git:
        url: https://github.com/qookit/flutter_tflite.git
        ref: main

"main"是我感兴趣使用的分支名称。

第一次运行“flutter pub get”时,它打开了一个浏览器窗口要求我输入git凭据。


1
我也遇到了同样的问题,之前使用 git:// 协议时会出现找不到仓库的错误。当我将其改为 https:// 后,就可以正常工作了。我确实需要授权 VS Code 访问该仓库,然后它才能正常工作。 - BHinkson

2

添加备选列表:

从 Dart 2.15 开始,已支持认证私有存储库。

您可以使用标准 Dart CLI 工具将软件包发布到私有存储库。

Dart 允许您通过 dart pub token adddart pub token list 添加和管理身份验证令牌。

一些私有存储库要求您使用第三方工具进行发布。

对于像 OnePub(https://onepub.dev)这样的存储库,您可以按以下方式发布:

dart pub global activate onepub
onepub login // onepub adds the onepub token to the dart pub token list
cd my_package
onepub pub private // onepub adds publish_to to your pubspec.yaml
dart pub publish

你可以手动向 pubspec.yaml 文件添加 publish_to 键,其格式如下:

name: my_package
publish_to: https://onepub.dev/api/jbbxpsdavu/

显然,URL 取决于您使用的私有存储库。

要在另一个项目中使用已发布的软件包,请使用以下命令:

cd <my app>
onepub pub add my_package

这将导致onepub添加一个形式为的私有依赖项:(您也可以手动完成)
dependencies:
  my_package:
    hosted:
      url: https://onepub.dev/api/jbbxpsdavu/
      name: my_package
    version: ^0.3.2

这种方法相对于 git 引用的一个重大优势是运行以下命令:
dart pub upgrade

使用此方法将升级您到最新版本的my_package,而使用git标签dart pub upgrade则不会有任何作用。

此方法还使您的团队更容易添加私有依赖项,因为他们只需要知道包名称(即不需要知道url或git标签/引用来添加依赖项)。

以下是该过程的更详细说明。它特定于OnePub,但广泛原则适用于任何私有存储库,并已注意到异常情况。

https://onepub.dev/show/86646173-a968-4281-af39-3c37d349bcdc

声明:我与OnePub有关联。


1

如果你的软件包不是整个代码库,你可以使用路径。

geocoding:
    git:
      url: https://github.com/abdullahalamodi/flutter-geocoding.git
      path: geocoding #refers to flutter-geocoding/geocoding

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