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