dart 如何处理无效URL异常|Image.network

vlju58qv  于 2023-06-19  发布在  .NET
关注(0)|答案(2)|浏览(196)

我的应用程序有一个输入,它接收一个链接,从互联网上检索图像,但如果用户输入一个无效的链接,应用程序就会中断。
我现在使用Image.network()来请求图像。
如何处理这个异常?
child: ClipRRect( borderRadius: BorderRadius.circular(10), child: Image.network(imageController.text, fit: BoxFit.cover,) ),
生成的错误:Error generated
解决错误并处理引发的异常。

hxzsmxv2

hxzsmxv21#

可以勾选this answer,使用error builder
你也可以在你的例子中使用三进制运算符检查一个变量:

child: imageController.text.isNotEmpty ? ClipRRect( borderRadius: BorderRadius.circular(10),   child: Image.network(imageController.text, fit: BoxFit.cover,), ) : const SizedBox(),
68de4m5k

68de4m5k2#

解决方案

你必须检查URL的未来功能

try {
  Image.network('https://example.com/wrong-url.jpg');
} catch (e) {
  // Error handling code
  print('Error: $e');
  // Display a custom error message or fallback widget
  // For example:
  return Text('Invalid URL or Failed to load image');
}

并在FutureBuilder中返回它也可以使用onErrorBuilder

Image.network(
      imageUrl,
      errorBuilder: (BuildContext context, Object exception, StackTrace? stackTrace) {
        // Custom error widget to display when image loading fails
        return Text('Failed to load image');
      },
      loadingBuilder: (BuildContext context, Widget child, ImageChunkEvent? loadingProgress) {
        if (loadingProgress == null)
          return child; // Image is still loading, return default placeholder
        return CircularProgressIndicator(); // Show a loading indicator
      },
    );

如果您选择使用FutureBuilder,则可以处理函数中的所有错误

FutureBuilder<void>(
      future: yourFunction()
      builder: (BuildContext context, AsyncSnapshot<void> snapshot) {
        if (snapshot.connectionState == ConnectionState.done) {
          // Image loaded successfully
          return Image.network(imageUrl);
        } else if (snapshot.hasError) {
          // Error occurred while loading image
          return Text('Failed to load image');
        } else {
          // Image still loading
          return CircularProgressIndicator();
        }
      },
    );

相关问题