如果Image.network没有Internet连接,Flutter www.example.com()会在AnimatedList中不断崩溃

j8yoct9x  于 2023-06-24  发布在  Flutter
关注(0)|答案(1)|浏览(211)

在我的Flutter应用程序中,我使用Image.network()小部件来显示图像:

Image.network(
  url,
  errorBuilder: (context, error, stacktrace) => Container(color: Colors.red),
  width: 80,
  height: 80,
  cacheWidth: 80,
  cacheHeight: 80,
)

该小部件是AnimatedList中使用的项目的一部分。
如果我向下滚动列表,但没有互联网连接,有时我的应用程序会崩溃,告诉我它无法访问url,即使我使用errorBuilder:

The following SocketException was thrown resolving an image codec:
Failed host lookup: 'i.discogs.com' (OS Error: No address associated with hostname, errno = 7)

所以我尝试了cached_network_image包的另一种方法:

CachedNetworkImage(
  placeholder: (context, url) => Container(color: Colors.red),
  errorWidget: (context, url, error) => Container(color: Colors.red),
  imageUrl: url,
  memCacheWidth: 80,
  memCacheHeight: 80,
)

但是,我又得到了一个类似的错误:

The following _ClientSocketException was thrown resolving an image codec:
Failed host lookup: 'i.discogs.com'

我该怎么弥补?

编辑

  • 我创建了一个示例项目here,您可以很容易地看到问题所在。
  • 我报告了一个bug here
  • 我还报告了cached_network_image的一个bug here
ufj5ltwl

ufj5ltwl1#

好的,我已经测试过你的sample code了。
错误的根本原因是主函数中的这段代码,如果发生错误,该函数会将页面推到页面顶部。

FlutterError.onError = (FlutterErrorDetails details) {
      FlutterError.dumpErrorToConsole(details);
      log(details.toString());
      WidgetsBinding.instance.addPostFrameCallback((_) {
        Navigator.push(
          _navigatorKey.currentState!.context,
          MaterialPageRoute(builder: (context) => ErrorPage(error: details.toString())),
        );
      });
    };

解决方案

FlutterError.onError = (FlutterErrorDetails details) {
      FlutterError.dumpErrorToConsole(details);
      log(details.toString());
      WidgetsBinding.instance.addPostFrameCallback((_) {
        print("test is it called?");
        // Don't push this widget to stack
        // Navigator.push(
        //   _navigatorKey.currentState!.context,
        //   MaterialPageRoute(builder: (context) => ErrorPage(error: details.toString())),
        // );
      });
    };
};

相关问题