Предварительная загрузка изображения без BuildContext - PullRequest
0 голосов
/ 20 июня 2020

Есть ли способ загружать изображения во Flutter в функции без доступа к BuildContext?

Flutter может предварительно загружать изображения с помощью precacheImage(), для чего требуется BuildContext, и его неудобно использовать.

Я хотел бы загружать изображения в методе initState() StatefulWidget, который precacheImage() не поддерживает.

Существует открытая проблема с предварительной загрузкой изображений, предполагающая, что загрузка изображений без BuildContext в настоящее время не поддерживается.

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

1 Ответ

1 голос
/ 20 июня 2020

Я знаю два обходных пути, первый - 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();
  }
}

Второй способ - использовать 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 от запуска одного и того же кода столько раз, сколько он запускается много раз

Надеюсь, это поможет.

...