如何预加载Image.network

时间:2019-11-09 04:29:49

标签: flutter dart google-cloud-firestore

我多次从Firestore获取不同的imageURLs并将它们显示在屏幕上,但是加载起来感觉有点慢。所以我想预加载图像,有办法吗?

具体来说,在下面的代码中,当counter == 0时,我想在counter == 1、2时读取imageURL。(Flutter随后将缓存图像,因此当计数器达到1或2时,图像将加载速度更快。)

我也尝试了CachedImageNetwork,但不知道如何适应这种情况

class TestScreen extends StatefulWidget {
  @override
  _TestScreenState createState() => _TestScreenState();
}

class _TestScreenState extends State<TestScreen> {

  int counter=0;
  List imageURLList=['url1','url2','url3'];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Image.network(imageURLList[counter]),
            RaisedButton(
              onPressed: (){
                setState(() {
                  counter++;
                });
              },
              child: Text('push'),
            ),
          ],
        ),
      ),
    );
  }
}

1 个答案:

答案 0 :(得分:0)

如果我的理解正确,即使您的网络映像没有显示,您也要加载它们。 测试后编辑:我不是使用URL列表,而是使用包含NetworkImage对象并使用方法for (auto i = a.begin(); i != a.end();) { auto current = i++; if (p(*current)) { // moving is probably unnecessary b.insert(a.extract(std::move(current))); } } 的列表。

precacheImage