Класс MemoryImage
Класс MemoryImage хранит bytes типа Uint8List
и необязательный scale. Провайдер декодирует PNG, JPEG
и другие форматы без обращения к диску или сети.
Синтаксис
MemoryImage(
bytes,
scale: 1.0,
)
Параметры
| Параметр | Описание |
|---|---|
bytes |
Байты картинки в памяти. |
scale |
Масштаб: сколько пикселей файла приходится на один логический. |
Пример
Давайте загрузим актив в байты и покажем через провайдер:
import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
void main()
{
runApp(const MaterialApp(home: MemoryDemo()));
}
class MemoryDemo extends StatefulWidget
{
const MemoryDemo({super.key});
@override
State<MemoryDemo> createState() => _MemoryDemoState();
}
class _MemoryDemoState extends State<MemoryDemo>
{
Uint8List? bytes;
@override
void initState()
{
super.initState();
rootBundle.load('assets/pic.png').then((data) {
setState(() => bytes = data.buffer.asUint8List());
});
}
@override
Widget build(BuildContext context)
{
if (bytes == null) {
return const Scaffold(body: Center(child: CircularProgressIndicator()));
}
return Scaffold(
body: Center(
child: Image(image: MemoryImage(bytes!), width: 150),
),
);
}
}
На экране появится картинка, декодированная из байтов файла
assets/pic.png.
Пример
Давайте сравним длину массива у двух провайдеров:
import 'dart:typed_data';
void main()
{
final short = MemoryImage(Uint8List(4));
final long = MemoryImage(Uint8List(8));
print(short.bytes.length < long.bytes.length);
}
Результат выполнения кода
true
Смотрите также
-
метод
memory,
который строит виджет напрямую из байтов -
метод
memoryNetwork,
который использует байты как заглушку -
класс
FileImage,
который читает картинку с диска -
метод
load,
который возвращаетByteDataдляMemoryImage