gpt4 book ai didi

android - Flutter Listview 在使用 FutureBuilder 加载缩略图时卡住

转载 作者:IT王子 更新时间:2023-10-29 06:46:23 26 4
gpt4 key购买 nike

出于学习目的,我正在 flutter 中创建一个文件管理器。我刚开始学习 flutter,所以我对它了解不多。

我的问题是我想显示文件夹中图像的缩略图,为此我在 ListView 中使用 FutureBuilder 调用用 android native 代码编写的函数。它工作正常,但每当我打开一个包含大量图像的目录时,它会卡住 UI 一段时间,即使异步调用缩略图,我也无法在这段时间内滚动它。

我的Listview代码:-

@override
Widget build(BuildContext context) {
return new ListView.builder(
itemBuilder: (itemContext, i) {
if (_filesList != null && i < _filesList.length) {
String currDir = _filesList[i]['path'];
return new ListTile(
title: new Text(_filesList[i]['name']),
leading: (_filesList[i]['isDir'] == "false")
? new FutureBuilder<Uint8List>(
future: _getThumbnail(currDir),
builder: (BuildContext context,
AsyncSnapshot<Uint8List> snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.waiting:
return new Container(
decoration: new BoxDecoration(
color: Colors.brown,
borderRadius: new BorderRadius.circular(20.0),
),
width: 30.0,
height: 30.0,
);
default:
if (snapshot.hasError)
return new Container(
decoration: new BoxDecoration(
color: Colors.brown,
borderRadius: new BorderRadius.circular(20.0),
),
width: 30.0,
height: 30.0,
);
else {
return new Image.memory(snapshot.data);
}
}
},
)
: new Container(
decoration: new BoxDecoration(
color: (_filesList[i]['isDir'] == "true")
? Colors.yellow
: Colors.brown,
borderRadius: new BorderRadius.circular(20.0),
),
width: 30.0,
height: 30.0),
onTap: () {
setState(() {
_currentDir = currDir;
});
_getFilesList(currDir);
},
);
} else {
return null;
}
},
);
}

_getThumbnail() 的代码:-

Future <Uint8List> _getThumbnail(path) async {
try {
String thumbnailString =
await channel.invokeMethod("getThumbnail", {"path": path});
thumbnailString = thumbnailString.replaceAll('\n', '');
Uint8List bytes = BASE64.decode(thumbnailString);
return bytes;
} on PlatformException catch (e) {
print("Files Not Found $e{e.message}");
return null;
}
}

最佳答案

尽管在 Flutter 中调用是异步的,但 Android 上处理 getThumbnail 的代码可能会阻塞 UI 线程,从而导致加载卡住或滚动不稳定。一种解决方案是使用 AsyncTaskdoInBackground 中构建/获取缩略图并在 onPostExecute 中返回结果。

关于android - Flutter Listview 在使用 FutureBuilder 加载缩略图时卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49124644/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com