在这个 Flutter 应用程序中,我想构建一个带有缩略图的项目列表,这些缩略图作为文件名存储在数据库中。文件存储在应用程序的目录中,只有名称保存在数据库中。
当我构建列表时,我想获取应用程序的目录,然后将其与文件名一起加入。但我不知道该怎么做,因为
getApplicationDocumentsDirectory()
是异步的,当我需要它时它不返回值(在使用ListView.builder
之前)
我的代码,让它更清晰
class _ItemsWidgetState extends State<ItemsWidget> {
String? appDir;
@override
void initState() {
// this seems like the only place where I can get it
getApplicationDocumentsDirectory().then((value) => appDir = value.path);
super.initState();
}
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: widget.items,
initialData: const [],
builder: (context, snapshot) {
return snapshot.hasData && snapshot.data!.isNotEmpty
? ListView.builder(
itemCount: snapshot.data?.length,
itemBuilder: (_, int index) {
final Item item = snapshot.data![index];
// $aappDir is NULL here
return ListTile(
leading: Image.file(File('$appDir/${item.thumbnailName}')),
title: Text(item.name,),
);
})
: Center(child: Text('No items added'),),
);
});
}
}
如您所见,
appDir
为空并且 initState()
不会更改它,即使它确实获取了目录。我需要更好地理解它是如何工作的以及我怎样才能使它工作
尝试如下:
void main() async {
WidgetsFlutterBinding.ensureInitialized(); // <-- This can save your life
final Directory documentDirectory = await getApplicationDocumentsDirectory();
print (documentDirectory);
runApp(_App());
}