如何从资产中预加载图像?

时间:2018-11-12 15:53:08

标签: flutter

我试图像这样预加载一些在PageView中使用的资产。

// ...
r := bufio.NewScanner(d.conn)
r.Split(func(data []byte, atEOF bool) (advance int, token []byte, err error) {
    if atEOF && len(data) == 0 {
        return 0, nil, nil
    }
    if i := bytes.IndexByte(data, '\n'); i >= 0 {
        // We have a full newline-terminated line.
        return i + 1, data[0 : i+1], nil
    }
    // If we're at EOF, we have a final, non-terminated line. Return it.
    if atEOF {
        return len(data), data, nil
    }
    // Request more data.
    return 0, nil, nil
})

for r.Scan() {
    line := r.Text()
    len(line) // now gets the line length WITH the newline
}

预期结果:then()中的结果值将返回预加载的图像 实际结果:结果值为空

有人知道preloadCache()是如何工作的,因为它的文档非常差。

1 个答案:

答案 0 :(得分:1)

precacheImage的返回值为Future<void>,因此在结果上使用then不会返回图像本身。

一种更简单的使用方法是在您要显示图像的窗口小部件的父窗口小部件的build方法中使用

class ImagePage extends StatelessWidget{   
  @override
  Widget build(BuildContext context) {
    return Image.network("https://upload.wikimedia.org/wikipedia/commons/3/39/Periodic_table_large.png");
  }
}

然后,您可以在小部件中调用precacheImage,然后再导航至ImagePage,如下所示:

class TestWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    precacheImage(NetworkImage("https://upload.wikimedia.org/wikipedia/commons/3/39/Periodic_table_large.png"), context);
    return Center(
          child: RaisedButton(
        child: Text('Launch screen'),
        onPressed: () {
          Navigator.push(
            context,
            MaterialPageRoute(builder: (context) => ImagePage()),
          );
        },
      ));
  }
}

这样,当您按下按钮启动ImagePage时,图像将已经加载。