You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中如何实现两张本地图片资源同步加载、同时显示?

实现Flutter本地图片同时显示的方案

针对两张本地图片加载不同步的问题,可以通过预加载图片的方式确保它们同时渲染,以下是两种可行方案:

方法一:在初始化阶段预加载后渲染

在Widget的初始化生命周期中提前加载两张图片,等待全部加载完成后再显示布局:

class _YourWidgetState extends State<YourWidget> {
  bool _imagesReady = false;
  final double size = 40; // 自定义尺寸
  int giftCount = 1; // 自定义giftCount值

  @override
  void initState() {
    super.initState();
    _preloadImages();
  }

  Future<void> _preloadImages() async {
    // 并行预加载两张图片
    await Future.wait([
      precacheImage(AssetImage('assets/images/ic_x.png'), context),
      precacheImage(AssetImage('assets/images/ic_$giftCount.png'), context),
    ]);
    // 加载完成后更新状态,触发布局渲染
    setState(() => _imagesReady = true);
  }

  @override
  Widget build(BuildContext context) {
    return _imagesReady
        ? Row(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Image.asset('assets/images/ic_x.png', height: size),
              Image.asset('assets/images/ic_$giftCount.png', height: size),
            ],
          )
        : SizedBox.shrink(); // 加载中可替换为CircularProgressIndicator()
  }
}

方法二:用FutureBuilder异步监听加载状态

直接在build方法中通过FutureBuilder监听两张图片的预加载进度,完成后再渲染图片:

Widget build(BuildContext context) {
  final double size = 40;
  int giftCount = 1;

  return FutureBuilder(
    future: Future.wait([
      precacheImage(AssetImage('assets/images/ic_x.png'), context),
      precacheImage(AssetImage('assets/images/ic_$giftCount.png'), context),
    ]),
    builder: (context, snapshot) {
      if (snapshot.connectionState == ConnectionState.done) {
        return Row(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Image.asset('assets/images/ic_x.png', height: size),
            Image.asset('assets/images/ic_$giftCount.png', height: size),
          ],
        );
      }
      // 加载过程中可显示加载动画
      return CircularProgressIndicator();
    },
  );
}

说明

  • precacheImage会将图片提前缓存到内存,后续Image.asset会直接读取缓存资源,避免先后加载的差异。
  • 加载过程中的占位Widget可根据需求替换,比如空白容器、加载指示器等。

内容的提问来源于stack exchange,提问作者GHH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 19:03:13