没有BuildContext的预加载图像

时间:2020-06-19 21:46:01

标签: flutter dart

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

Flutter可以使用precacheImage()预加载图像,该图像需要BuildContext并且使用起来不方便。

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

关于预加载图像存在一个未解决的问题,即建议当前不支持不使用BuildContext加载图像。

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

1 个答案:

答案 0 :(得分:1)

我知道两种解决方法,第一种是像这样的“延迟”初始化状态:

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:

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在多次重新运行时运行相同的代码

希望这会有所帮助。