Flutter 在不使用BuildContext的情况下预加载图像

Flutter 在不使用BuildContext的情况下预加载图像,flutter,dart,Flutter,Dart,有没有一种方法可以在不访问BuildContext的情况下在函数中加载flift中的图像 颤振可以使用precacheImage()预加载图像,这需要BuildContext,不方便使用 我想在StatefulWidget的initState()方法中加载图像,而precacheImage()不支持该方法 关于预加载图像存在一个公开问题,即当前不支持在没有BuildContext的情况下加载图像 我知道两种解决方法,第一种是initstate“delayed”,如下所示: import 'pac

有没有一种方法可以在不访问BuildContext的情况下在函数中加载flift中的图像

颤振可以使用
precacheImage()
预加载图像,这需要BuildContext,不方便使用

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

关于预加载图像存在一个公开问题,即当前不支持在没有BuildContext的情况下加载图像


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

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();
  }
}
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();
  }
}
导入“包装:颤振/材料.省道”;
类主页扩展了StatefulWidget{
@凌驾
_HomePageState createState()=>\u HomePageState();
}
类_HomePageState扩展状态{
var图像;
@凌驾
void initState(){
super.initState();
Future.delayed(Duration.zero)。然后((){
//你的代码在这里
});
}
@凌驾
小部件构建(构建上下文){
返回容器();
}
}
第二种方法是使用didChangeDependencies,如下所示:

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();
  }
}
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();
  }
}
导入“包装:颤振/材料.省道”;
类主页扩展了StatefulWidget{
@凌驾
_HomePageState createState()=>\u HomePageState();
}
类_HomePageState扩展状态{
var图像;
bool init=true;
@凌驾
void didChangeDependencies(){
if(init){
init=false;
//你的代码在这里
}
super.didChangeDependencies();
}
@凌驾
小部件构建(构建上下文){
返回容器();
}
}
init boolean是为了防止didChangeDependecies在多次重新运行时运行相同的代码


希望这有帮助。

谢谢您的回答!预加载图像是我多年来遇到的一个问题。预加载/预切显然是一个尚未解决的问题。我将继续讨论这个问题,看看是否还有其他人有更多的想法。如果你想在
initState
中缓存图像,那么你就有
BuildContext
-它是
State.context
属性,所以创建一个类似于:
precache()async{await precacheImage(AssetImage('images/bg.jpg'),context);print的方法('precacheImage done');}
并通过调用
Future(precache);