Flutter 省道尝试/捕捉-捕捉块不工作

Flutter 省道尝试/捕捉-捕捉块不工作,flutter,dart,try-catch,flutter-assetimage,Flutter,Dart,Try Catch,Flutter Assetimage,在我的flatter应用程序中,我想根据条件加载资源:我的代码是作为导入包运行还是作为我当前开发的应用程序运行 问题是,此try/catch块在try部分总是失败: AssetImage _getBackgroundImage() { try { return AssetImage( 'lib/assets/images/menu_background.png', package: 'my_package', ); } ca

在我的flatter应用程序中,我想根据条件加载资源:我的代码是作为导入包运行还是作为我当前开发的应用程序运行

问题是,此try/catch块在try部分总是失败:

AssetImage _getBackgroundImage() {
    try {
      return AssetImage(
        'lib/assets/images/menu_background.png',
        package: 'my_package',
      );
    } catch (e) {
      return AssetImage('lib/assets/images/menu_background.png');
    }
  }
运行输出:

======== Exception caught by image resource service ================================================
The following assertion was thrown resolving an image codec:
Unable to load asset: packages/my_package/lib/assets/images/menu_background.png

When the exception was thrown, this was the stack: 
#0      PlatformAssetBundle.load (package:flutter/src/services/asset_bundle.dart:227:7)
<asynchronous suspension>
#1      AssetBundleImageProvider._loadAsync (package:flutter/src/painting/image_provider.dart:667:14)
<asynchronous suspension>
Image provider: AssetImage(bundle: null, name: "packages/my_package/lib/assets/images/menu_background.png")
Image key: AssetBundleImageKey(bundle: PlatformAssetBundle#e01ff(), name: "packages/my_package/lib/assets/images/menu_background.png", scale: 1.0)
====================================================================================================

=======图像资源服务捕获异常================================================
解析图像编解码器时引发了以下断言:
无法加载资产:packages/my_package/lib/assets/images/menu_background.png
引发异常时,这是堆栈:
#0平台组装包.load(包:颤振/src/services/asset_bundle.dart:227:7)
#1个AssetBundleImageProvider.\u loadAsync(包:flatter/src/painting/image\u provider.dart:667:14)
图像提供程序:AssetImage(bundle:null,名称:“packages/my\u package/lib/assets/images/menu\u background.png”)
图像键:AssetBundleImageKey(bundle:PlatformAssetBundle#e01ff(),名称:“packages/my_package/lib/assets/images/menu_background.png”,比例:1.0)
====================================================================================================

AssetImage稍后将异步加载映像,如堆栈跟踪中所示。因此,在颤振绘制图像之前,创建AssetImageObject不会引发异常。这导致您的catch子句永远不会被调用


要解决此问题,最好事先检查图像是否存在。下面介绍如何执行此操作。

Try&Catch块用于捕获软件运行时环境中的一些错误。 作为你的问题,你在catch块中做了一些代码,因为try总是失败的。这不是一个标准。始终尝试使用编码标准编写代码


第二件事是我在项目文件夹中的代码生成资源文件夹中看到的,而不是在lib文件中看到的。

谢谢您的回答。我需要将我的资产放在lib中,因为a希望在我的包中使用它们。谢谢你的回答)不客气:)