我有一个模型类Pet
使用toMap
和fromMap
:
Map<String, dynamic> toMap() {
return {
'id': id,
'image': image,
'name': name,
'birth': birth,
'colour': colour,
'breed': breed,
'hairlength': hairLength,
'sterilized': sterilized,
'vaccinated': vaccinated
};
}
Pet.fromMap(Map<String, dynamic> map) {
id = map['id'];
image = map['image'];
name = map['name'];
birth = map['birth'];
breed = map['breed'];
colour = map['colour'];
hairLength = map['hairlength'];
sterilized = map['sterilized'];
vaccinated = map['vaccinated'];
}
我将所有内容都存储在我的数据库中,并且我想检索图像(存储为字符串),所以我使用了这个方法:
Future<List<String>> getImages() async {
var dbClient = await db;
List<Map> maps = await dbClient.rawQuery("SELECT * FROM $TABLE");
List<String> images = [];
if (maps.length > 0) {
for (int i = 0; i < maps.length; i++) {
images.add(Pet.fromMap(maps[i]).image);
}
}
return images;
}
如何使用Future<List<String>>
读取与每个图像关联的每个字符串?
问题有点含糊,假设就像提到的评论一样,您想直接在小部件中使用该函数,您可以使用 FutureBuilder 或在完成后在 initstate 和 setState 中调用该函数。
未来建造者版本
class TextFutureWidget extends StatelessWidget {
Future<List<String>> testFunction() async {
return List<String>();
}
@override
Widget build(BuildContext context) {
final imagesFuture = testFunction();
return Container(
child: FutureBuilder(
future: imagesFuture,
builder: (context, snapshot) {
if (!snapshot.hasData || snapshot.data == null) return Container();
return Column(
children: <Widget>[
for (var item in snapshot.data) Text(item),
],
);
},
));
}
}
初始状态版本
class TestWidget extends StatefulWidget {
@override
_TestWidgetState createState() => _TestWidgetState();
}
class _TestWidgetState extends State<TestWidget> {
List<String> _images;
List<String> get images => _images;
set images(List<String> images) {
if (mounted) setState(() => _images = images);
}
@override
void initState() {
super.initState();
testFunction().then((value) => images = value);
}
Future<List<String>> testFunction() async {
return List<String>();
}
@override
Widget build(BuildContext context) {
return Column(
children: <Widget>[
if(images != null)
for (var item in images)
Text(item),
],
);
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句