第一个颤动图像显示,但不是第二个

Posted

技术标签:

【中文标题】第一个颤动图像显示,但不是第二个【英文标题】:First flutter image displays, but not the second 【发布时间】:2020-12-12 10:10:52 【问题描述】:

问题

TMORA.png 未显示。

演练

图像出现在我的代码中:

flutter 抛出的错误:

资产 images/TMORA.png 不存在。 尝试创建文件或修复文件的路径。飞镖(asset_does_not_exist)[51,8]

不过,图像确实存在。当我点击 assets/images 文件夹时,我可以看到它。

我认为问题源于我的 yaml 文件(如下所示)。

完整的代码(注释掉 TMORA.png 行以消除错误)出现在 Github。

注意:我在这个包中有两个名为 images 的文件夹。一个是项目资产文件夹,其中包含一个图像文件夹,其中包含要在应用程序屏幕上显示的 2 张图像。第二个是一个图像文件夹,其中包含我的 github 自述文件的图像。我混淆了吗?

pubspec.yaml 文件:

name: second_app_Heather
description: A new Flutter project.

# The following line prevents the package from being accidentally published to
# pub.dev using `pub publish`. This is preferred for private packages.
publish_to: 'none' # Remove this line if you wish to publish to pub.dev

# The following defines the version and build number for your application.
# A version number is three numbers separated by dots, like 1.2.43
# followed by an optional build number separated by a +.
# Both the version and the builder number may be overridden in flutter
# build by specifying --build-name and --build-number, respectively.
# In android, build-name is used as versionName while build-number used as versionCode.
# Read more about Android versioning at https://developer.android.com/studio/publish/versioning
# In ios, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
# Read more about iOS versioning at
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
version: 1.0.0+1

environment:
  sdk: ">=2.7.0 <3.0.0"

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.3

dev_dependencies:
  flutter_test:
    sdk: flutter

# For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec

# The following section is specific to Flutter.
flutter:

  # The following line ensures that the Material Icons font is
  # included with your application, so that you can use the icons in
  # the material Icons class.
  uses-material-design: true

  # To add assets to your application, add an assets section, like this:
  assets:
     - images/
     - images/museumInterior.png
     - images/TMORA.png
    #- images/TMORA.png
  #   - images/a_dot_ham.jpeg

  # An image asset can refer to one or more resolution-specific "variants", see
  # https://flutter.dev/assets-and-images/#resolution-aware.

  # For details regarding adding assets from package dependencies, see
  # https://flutter.dev/assets-and-images/#from-packages
 

  # To add custom fonts to your application, add a fonts section here,
  # in this "flutter" section. Each entry in this list should have a
  # "family" key with the font family name, and a "fonts" key with a
  # list giving the asset and other descriptors for the font. For
  # example:
  # fonts:
  #   - family: Schyler
  #     fonts:
  #       - asset: fonts/Schyler-Regular.ttf
  #       - asset: fonts/Schyler-Italic.ttf
  #         style: italic
  #   - family: Trajan Pro
  #     fonts:
  #       - asset: fonts/TrajanPro.ttf
  #       - asset: fonts/TrajanPro_Bold.ttf
  #         weight: 700
  #
  # For details regarding fonts from package dependencies,
  # see https://flutter.dev/custom-fonts/#from-packages

编辑:

为了回应@Anis R. 的建议(因为我想很多人会建议这个),我已努力实施该建议并收到以下错误:

编辑#2。回复 Anis R 的第二条有用评论。

这就是问题所在... Internet 资源对于在 iPhone/Android 按钮、背景和其他小部件上放置您想要使用的图像的位置有点不切实际。我不确定什么是常规/正确的。

一些消息来源建议将照片放在根目录内的图像文件夹中(橙色箭头Example recommendation here)。一些消息来源建议将照片放在资产文件夹中(绿色箭头 Example recommendation here- 见第 1 小时,第 43 分钟)。有些人建议将照片放在资产文件夹内的图像文件夹中(橙色箭头 - 这是我尝试的)。

所以,当我采用 Anis R 的代码建议(我认为遵循惯例)时,我收到了解释问题所在的错误消息。

现在,这对我来说似乎是一个难以克服的错误。如果 .yaml 文件找不到 assets 文件夹,那我就难住了。我是新手,我认为我无法弄清楚这一点。我以前肯定见过这个错误。

这让我想知道,“好吧,如果它看不到资产文件夹,那么它到底是如何显示museumInterior.png 照片的?”两张照片都位于同一个文件夹中。还是他们?

不。它从未从 assets\images 文件夹中提取图像。它不知道 assets\images 文件夹存在。它一直在从我为我的 github README.md 存储照片的图像文件夹中提取图片。里面有很多东西。名为museumInterior.png 的图像恰好也在其中。 我将 TMORA.png 的副本放在 images 文件夹中,它会显示在我的屏幕上。

我和 Visual Studio Code 一样,会假装包含 images 文件夹的 assets 文件夹甚至不存在。

我不认为这是惯例,但它确实运行正常。

非常感谢@Anis R. 引导我完成这一切!有时你只需要说出来。

【问题讨论】:

【参考方案1】:

在您的pubspec.yaml 中,您应该使用:

- assets/images/

而不是

- images/

编辑您的更新

我回顾了你的代码并更新了 cmets,你需要在几个地方更改一些代码。

首先,在您的Home_widget.dart 中,替换Image.asset('images/museumInterior.png')Image.asset('images/TMORA.png')

分别使用Image.asset('assets/images/museumInterior.png')Image.asset('assets/images/TMORA.png')

然后在您的pubspec.yaml 文件中,在assets: 下,仅保留条目- assets/images/ 并删除其他条目。

最后,在您的项目上运行 flutter clean 并重建。

如果这有帮助,请告诉我。

【讨论】:

我相信我尝试实现文件路径的所有可能组合,并选择了错误最少的选项。那是通过简单地使用-images/。但是,我再次将您的建议放在那里,只是为了检查并发布显示生成错误的 3 个屏幕截图。我当然希望我没有从文件夹中的文件夹构建它。 它在以下情况下显示:1.) Home_widget.dart 使用 Image.asset('images/TMORA.png') 和 2.) pubspec.yaml 在 assets: 部分使用 -images/。跨度> 嗯,很高兴你终于让它工作了。祝你有美好的一天!

以上是关于第一个颤动图像显示,但不是第二个的主要内容,如果未能解决你的问题,请参考以下文章

使用jquery一一显示进度条

从相机捕获图像并将其显示在android的另一个活动中

如何将图像 URL 链接到另一个 URL 以在颤动中显示有关第一个 URL 的一些信息?

如何确保我在颤动中的图像 url 不会显示在屏幕上而不是图像上?

将 tkinter 图像嵌入到顶层

如何在颤动中显示来自api响应的png图像?