Dart try/catch - catch 块不起作用

Dart try/catch - catch block does not work

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

问题是这个 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)
====================================================================================================

AssetImage 稍后会异步加载图像,如您在堆栈跟踪中所见。因此,在 Flutter 绘制图像之前,AssetImage 对象的创建不会抛出异常。这会导致您的 catch 子句永远不会被调用。

要解决此问题,您最好事先检查图像是否存在。 如何操作。

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

第二件事是我在你的代码中看到在你的项目文件夹中创建资产文件夹而不是在 lib 文件中。