如何在 VSCode/flutter 中升级包?

Posted

技术标签:

【中文标题】如何在 VSCode/flutter 中升级包?【英文标题】:How to upgrade packages in VSCode/flutter? 【发布时间】:2019-05-12 21:16:42 【问题描述】:

我在颤振项目中使用 VS Code。我刚刚编辑了 pubspec.yaml 以指向更高版本的包,它会自动运行“flutter packages get”。在我的“/development//flutter/.pub-cache/hosted/pub.dartlang.org”目录中,我可以看到这两个版本。但是当我编译时,它看起来仍在使用旧版本。我尝试了各种方法,例如“flutter packages upgrade”、“flutter clean”等,但无济于事。查看 2 个包版本的源代码,我可以在较新的版本中看到我想要的更改。我如何指向新包?谢谢。

更新:

这是没有更新的“以太坊”包。我使用的是 3.0.0 版本(方法需要 2 个参数),然后切换到 3.1.0 版本(方法需要 3 个参数)。但是使用 3 arg 调用编译时参数计数不正确:

client.admin.personalSendTransaction(BigInt.parse(currentAddress), currentPassword,);

[dart] Too many positional arguments: 2 expected, but 3 found. [extra_positional_arguments_could_be_named]

然而,将鼠标悬停在方法调用上确实表明它需要 3 个参数:

personalSendTransaction(BigInt address, String passphrase, BigInt to, BigInt data, int gas, int gasPrice, int value, int nonce, int condition, bool conditionIsTimestamp: false) → Future<BigInt>

pubspec.yaml:

    dependencies:
  flutter:
    sdk: flutter

  # The following adds the Cupertino Icons font to your application.
  # Use with the CupertinoIcons class for ios style icons.
  cupertino_icons: ^0.1.2

  # Get package(s) for talking to ethereum node
  # web3dart: '>=0.3.0'
  ethereum: ^3.1.0

  # read barcodes and QR codes
  barcode_scan: ^0.0.3

  # Generate a QR code
  qr: ^1.0.1

  # Display as actual symbol
  qr_flutter: ^1.1.5

dev_dependencies:
  flutter_test:
    sdk: flutter

在 pubspec.lock 中:

  ethereum:
    dependency: "direct main"
    description:
      name: ethereum
      url: "https://pub.dartlang.org"
    source: hosted
    version: "3.1.0"

版本 3.1.0 是我想要使用的。

运行 'flutter packages upgrade resolved' 产量:

[Gregorys-iMac]:(gkd) ~/Programs/wine_track $ flutter packages upgrade resolved
Running "flutter packages upgrade" in ....                   2.7s

在包缓存中,我两者都有:

/Users/gkd/development//flutter/.pub-cache/hosted/pub.dartlang.org/ethereum-3.0.0/lib/src/api/ethereum_api_admin.dart

/Users/gkd/development//flutter/.pub-cache/hosted/pub.dartlang.org/ethereum-3.1.0/lib/src/api/ethereum_api_admin.dart

【问题讨论】:

您能在问题中添加您的 pubspec 文件吗?什么包没有更新? 查看pubspec.lock文件是什么版本flutter packages upgrade resolved. What exactly does the dependency looks like that you added to pubspec.yaml`? 【参考方案1】:

flutter pub 升级 --major-versions

【讨论】:

【参考方案2】:

我为此创建了一个 python3 脚本,你可以使用。此脚本仅生成最新的包名称和版本,您必须复制并粘贴到 pubspec.yaml 文件中。

import yaml
import requests
from lxml import etree
from io import StringIO


def getNewVersion(pkg_name):
    url = f'https://pub.dev/packages/pkg_name'
    with requests.get(url) as req:
        doc = etree.parse(StringIO(req.text), etree.htmlParser()).getroot()
        title = doc.xpath('//h2[@class="title"]')[0].text.strip()
        return '^' + (title.split(' ')[1])


if __name__ == "__main__":
    filename = 'pubspec.yaml'
    new_map = None
    with open(filename, 'r') as _f:
        docs = yaml.load(_f, Loader=yaml.FullLoader)
        deps = docs['dependencies']
        for package_name, old_version in deps.items():
            if package_name == 'flutter':
                continue
            last_version = getNewVersion(package_name)
            print(f'package_name: last_version')

【讨论】:

【参考方案3】:

您可以简单地在您的项目中运行flutter packages upgrade 来升级所有包。 Flutter 1.17 版本提供此功能

【讨论】:

它会检查和升级包flutter.dev/docs/development/packages-and-plugins/…【参考方案4】:

转到 https://pub.dartlang.org/packages 并从那里找到最新的包。 在那里您可以看到一个安装标签。点击那个。 现在您可以将依赖项添加到您的 Flutter 项目中的 pubspec.ymal 文件中。 然后你可以在 VS Code 中按 ctrl+s 或在终端中输入 flutter packages get。 现在您可以导入到任何页面。

【讨论】:

【参考方案5】:

好吧,没关系。这是我的错误。我将声明的“ type:variablename, . . .”解释为映射/哈希。实际上,它们是 Dart 的可选命名参数。只需使用它们中的任何一个而不使用包装大括号即可编译干净。

【讨论】:

以上是关于如何在 VSCode/flutter 中升级包?的主要内容,如果未能解决你的问题,请参考以下文章

VSCode、Flutter SDK 版本错误?

如何安装和升级一个RPM软件包

如何使用 pip 升级所有 Python 包

vscode flutter 环境搭建

如何对所有依赖项进行版本升级?

是否可以从 Flutter 修复 vscode 上的所有问题