Это продолжение статьи Использование фьючерсов для асинхронной загрузки
Моя программа WebGL / Dart должна создать много данных opengl при инициализации. Все это загружается асинхронно и использует фьючерсы для обработки данных при их загрузке и для того, чтобы знать, когда загружены все необходимые данные.
Однако у меня проблемы с загрузкой текстур. У меня есть этот код -
ImageElement img = new ImageElement();
img.onLoad.listen((e) {
baseTexture = gl.createTexture();
gl.bindTexture(TEXTURE_2D, baseTexture);
gl.texImage2DImage(TEXTURE_2D, 0, RGBA, RGBA, UNSIGNED_BYTE, img);
gl.texParameteri(TEXTURE_2D, TEXTURE_MIN_FILTER, LINEAR);
gl.texParameteri(TEXTURE_2D, TEXTURE_MAG_FILTER, LINEAR);
});
img.src = "base.png";
Это прекрасно работает. Он загружает изображение и создает из него текстуру по прибытии. Однако мне нужно, чтобы моя основная программа знала, когда все мои текстуры будут доставлены. Основываясь на предыдущем вопросе, я должен использовать future для каждого и использовать Future.wait, чтобы дождаться их готовности.
Однако загрузка изображений, как указано выше, не использует фьючерсы, она использует StreamSubscription, поэтому я не могу ждать возврата от этой функции.
Как я могу получить будущий объект, который сообщит мне, когда моя текстура будет создана? Могу ли я создать свой собственный объект Future и "сигнализировать" об этом в обратном вызове? Если я могу это сделать, мне совсем не ясно из документации, как я это делаю.