Метод memory
Метод memory виджета
Image создаёт
Image
с провайдером MemoryImage.
Сырые байты PNG, JPEG или другого формата передают в bytes
типа Uint8List.
Синтаксис
Image.memory(
bytes,
width: 120,
height: 80,
fit: BoxFit.contain,
)
Параметры
| Параметр | Описание |
|---|---|
bytes |
Закодированная картинка в памяти. Обязательный аргумент. |
width |
Ширина в логических пикселях. |
height |
Высота в логических пикселях. |
fit |
Вписывание в рамку. Принимает
BoxFit.
|
scale |
Масштаб декодированных пикселей. |
gaplessPlayback |
Если true, старая картинка остаётся на экране,
пока не готова новая при смене bytes.
|
Пример
Давайте декодируем картинку из активов и покажем через память:
import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
void main()
{
runApp(const MaterialApp(home: MemoryImageDemo()));
}
class MemoryImageDemo extends StatefulWidget
{
const MemoryImageDemo({super.key});
@override
State<MemoryImageDemo> createState() => _MemoryImageDemoState();
}
class _MemoryImageDemoState extends State<MemoryImageDemo>
{
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.memory(bytes!, width: 160, fit: BoxFit.contain),
),
);
}
}
На экране после загрузки байтов появится та же картинка,
что лежит в assets/pic.png, но через Image.memory.
Пример
Давайте передадим готовый список байтов в виджет:
import 'dart:typed_data';
import 'package:flutter/material.dart';
void main()
{
final bytes = Uint8List.fromList([137, 80, 78, 71, 13, 10, 26, 10]);
runApp(
MaterialApp(
home: Scaffold(
body: Center(
child: Image.memory(
bytes,
width: 80,
errorBuilder: (context, error, stack) {
return const Text('12345');
},
),
),
),
),
);
}
На экране при неполных байтах сработает errorBuilder
и вместо картинки покажется текст '12345'.
Смотрите также
-
класс
MemoryImage,
который описывает провайдер для байтов в памяти -
метод
memoryNetwork,
который использует байты как заглушку для сетевой картинки -
метод
file,
который читает картинку с диска -
метод
load,
который читает файл активов вByteData