不使用 BuildContext 预加载图像

Ray*_* Li 5 dart flutter

有没有办法在函数中加载 Flutter 中的图像而无需访问 BuildContext?

Flutter可以预加载图片,但precacheImage()需要BuildContext,使用起来不方便。

我想在不支持的initState()StatefulWidget 方法中加载图像。precacheImage()

关于预加载图像存在一个未解决的问题,表明当前不支持在没有 BuildContext 的情况下加载图像。

https://github.com/flutter/flutter/issues/26127

小智 1

我知道两种解决方法,第一个是 initstate“延迟”,如下所示:

import 'package:flutter/material.dart';

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  var image;

  @override
  void initState() {
    super.initState();
    Future.delayed(Duration.zero).then((_) {
      //Your code here
    });
  }

  @override
  Widget build(BuildContext context) {
    return Container();
  }
}
Run Code Online (Sandbox Code Playgroud)

第二种方法是像这样使用 didChangeDependency :

import 'package:flutter/material.dart';

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  var image;

  bool init = true;  

  @override
  void didChangeDependencies() {
    if (init) {
      init = false;
      //your code here
    }
    super.didChangeDependencies();
  }

  @override
  Widget build(BuildContext context) {
    return Container();
  }
}
Run Code Online (Sandbox Code Playgroud)

init boolean 是为了防止 didChangeDependecies 多次重复运行相同的代码

希望这可以帮助。

  • 谢谢您的回答!预加载图像是我多年来一直遇到的问题。预加载/预缓存绝对是一个尚未解决的问题。我将保留这个问题,看看其他人是否有更多的想法。 (2认同)