我正在为从DatabaseHelper和Sqflite返回数据而苦苦挣扎。
这就是我查询数据的方式:
Future<List<Message>> getMessages() async {
final Database db = await database;
final List<Map<String, dynamic>> maps = await db.query(table);
return List.generate(maps.length, (i) {
return Message(
sender: maps[i]['sender'],
message: maps[i]['message'],
date: maps[i]['date']
);
});
}在我的主要代码中,我希望能够迭代它,因为我调用了另一个类来格式化我的消息。
class MessageBubble extends StatelessWidget {
MessageBubble({this.sender, this.message, this.date, this.picture, this.isMe});
final String message;
final String sender;
final String date;
final Uint8List picture;
final bool isMe;
....
}所以我需要能够构建我的ListView生成器,但是我不知道在这里要做什么。如何在为每个返回的行调用MessageBubble的同时遍历Future?
class ChatScreen extends StatefulWidget {
@override
_ChatScreenState createState() => _ChatScreenState();
}
class _ChatScreenState extends State<ChatScreen> {
var dbhelper = DatabaseHelper.instance;
@override
Widget build(BuildContext context) {
return new MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Chat Screen'),
),
body: new Container(
padding: new EdgeInsets.all(16.0),
child: new FutureBuilder<List<Message>>(
future: dbhelper.getMessages(),
builder: (context, snapshot) {
if (snapshot.hasData) {
return new ListView.builder(
itemCount: snapshot.data.length,
itemBuilder: (context, index) {
//this is the section I dont' know how to handle
for (var m in snapshot.data){
MessageBubble(sender: m['sender']),
}
);
});
}
return new Container(alignment: AlignmentDirectional.center
,);
},
),
)
)
);
}
}发布于 2021-01-23 22:48:43
我通过这样做得到了答案:
if (snapshot.hasData) {
new ListView.builder(
itemCount: snapshot.data.length,
itemBuilder: (context, index) {
bubs.add(MessageBubble(
sender: snapshot.data[index].sender,
message: snapshot.data[index].message,
date: snapshot.data[index].date));
return ListView(
children:
bubs,
);
},
);https://stackoverflow.com/questions/65859094
复制相似问题