不带BuildContext的预加载映像
有没有一种方法可以在不访问BuildContext的情况下在Flutter中加载图像?
Is there a way to load images in Flutter in a function without access to a BuildContext?
Flutter可以使用 precacheImage()
预加载图像,该图像需要BuildContext并且使用起来不方便.
Flutter can preload images with precacheImage()
which requires a BuildContext and is inconvenient to use.
我想在 precacheImage()
不支持的StatefulWidget的 initState()
方法中加载图像.
I would like to load images in the initState()
method of a StatefulWidget which precacheImage()
does not support.
关于预加载图像存在一个未解决的问题,建议当前不支持在不使用BuildContext的情况下加载图像.
There is an open issue about preloading images that suggests loading images without a BuildContext is not currently supported.
我知道两种解决方法,第一种是初始化状态"delayed",像这样:
I know two workarounds, first one is initstate "delayed" like so :
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();
}
}
第二种方法是像这样使用didChangeDependencies:
Second way is to use didChangeDependencies like so :
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();
}
}
init boolean是为了防止didChangeDependecies在多次重新运行时运行相同的代码
init boolean is to prevent didChangeDependecies from running same code so many time as it reruns alot
希望这会有所帮助.