如何在VSCode / flutter中升级软件包?

时间:2018-12-11 20:11:48

标签: visual-studio-code flutter

我正在Flutter项目上使用VS Code。我只是编辑pubspec.yaml以指向软件包的更高版本,它会自动运行“ flutter软件包获取”。在我的“ /development//flutter/.pub-cache/hosted/pub.dartlang.org”目录中,可以看到两个版本。但是当我编译时,看起来它仍在使用旧版本。我尝试了各种方法,例如“升级Flutter软件包”,“ Flutter清理”等,但都无济于事。查看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软件包升级已解决”收益:

[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

5 个答案:

答案 0 :(得分:4)

您只需在项目中运行flutter packages upgrade即可升级所有软件包。从flutter 1.17版开始可以使用此功能

答案 1 :(得分:1)

我为此创建了一个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}')

答案 2 :(得分:0)

好的,没关系。这是我的错我将声明的“ {type:variablename,。..}”解释为map / hash。实际上,它们是Dart的可选命名参数。只需使用其中任何一个,而无需将括号括起来即可将其编译干净。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

flutter pub upgrade --major-versions