【发布时间】:2021-10-18 04:46:12
【问题描述】:
我正在制作一个聊天应用程序,当我尝试发送消息时出现此错误: 小部件库捕获的异常 'Future' 类型不是 '(() => void)?' 类型的子类型 相关的导致错误的小部件是 新消息 lib\screens\chatscreen.dart:42 这是聊天屏幕文件:
class Chatscreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('flutter chat'),
actions: [
DropdownButton(
icon: Icon(
Icons.more_vert,
color: Theme.of(context).primaryIconTheme.color,
),
items: [
DropdownMenuItem(
child: Row(
children: [
Icon(Icons.exit_to_app),
SizedBox(width: 10),
Text('Logout'),
],
),
value: 'logout',
),
],
onChanged: (itemidentifier) {
if (itemidentifier == 'logout') {
FirebaseAuth.instance.signOut();
}
},
)
],
),
body: Container(
child: Column(
children: [
Expanded(child: Messages()),
NewMessages(),
],
),
),
);
}
}
这是新消息文件:
class NewMessages extends StatefulWidget {
@override
NewMessagesState createState() => NewMessagesState();
}
class NewMessagesState extends State<NewMessages> {
final controller = TextEditingController();
String enteredmessage = '';
sendmessage() async {
FocusScope.of(context).unfocus();
final user = FirebaseAuth.instance.currentUser;
final userdata = await FirebaseFirestore.instance
.collection('users')
.doc(user!.uid)
.get();
FirebaseFirestore.instance.collection('chat').add({
'text': enteredmessage,
'created at': Timestamp.now(),
'username': userdata['username'],
'userid': user.uid,
});
controller.clear();
}
@override
Widget build(BuildContext context) {
return Container(
margin: EdgeInsets.only(top: 8),
padding: EdgeInsets.all(8),
child: Row(
children: [
Expanded(
child: TextField(
controller: controller,
decoration: InputDecoration(labelText: "send a message..."),
onChanged: (val) {
setState(() {
enteredmessage = val;
});
},
)),
IconButton(
color: Theme.of(context).primaryColor,
onPressed: enteredmessage.trim().isEmpty ? null : sendmessage(),
icon: Icon(Icons.send))
],
));
}
}
【问题讨论】:
标签: firebase flutter dart google-cloud-firestore