#android #flutter
#Android #флаттер
Вопрос:
Мне нужно отобразить изображение предварительного просмотра в ListTile, я использую Uint8List. Вот мой код в ListTile, который получает данные Uint8List:
ConstrainedBox(
constraints: BoxConstraints(
minWidth: 44,
minHeight: 44,
maxWidth: 64,
maxHeight: 64,
),
child: Image.memory(loadAsset(paths[position].fileName)),
)
Тот самый фрагмент кода, который получает Uint8List:
loadAsset(name) async {
Uint8List data = (await clientNextCloud.preview.getPreview(name, 10, 10))
.buffer
.asUint8List();
setState(() {});
return data;
}
await clientNextCloud.preview.getPreview(name, 10, 10)
— Эта часть получает Uint8List из пакета nextcloud dart.
Я получаю следующую ошибку — type 'Future<dynamic>' is not a subtype of type 'Uint8List'
Может кто-нибудь сказать мне, в чем проблема? Спасибо!
Ответ №1:
Проблема в том, что ваш loadAsset
является асинхронным методом, что означает, что он вернет Future<T>
. Вы не можете изменить это, поскольку getPreview также является асинхронным.
Чтобы исправить это, вам нужно адаптировать свой пользовательский интерфейс для отображения чего-либо, пока метод async не завершен. Для достижения этого вы можете использовать FutureBuilder.
Комментарии:
1.
child: FutureBuilder( future: listFiles(clientNextCloud), builder: (context, snapshot) { return snapshot.data != null ? listViewWidget(snapshot.data) : Center(child: CircularProgressIndicator()); } ),
Да, я использую FutureBuilder)2. Большое вам спасибо, благодаря вам я просто добавил еще одну строку с предварительным просмотром в свою модель и добавил значение в список объектов, а затем взял значения оттуда, большое вам спасибо за то, что правильно меня направили, не совсем то, что сказал yt, но вы помогли мне!!!!
Ответ №2:
Попробуйте использовать следующий подход —
loadAsset(paths[position].fileName).then((value) => {
Image.memory(value),
});
Метод loadAsset возвращает значение Future.
Комментарии:
1.
type 'Future<dynamic>' is not a subtype of type 'Widget'
🙁