我正在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
答案 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