【问题标题】:flutter: type 'Future<dynamic>' is not a subtype of type '(() => void)?' [duplicate]颤振:类型'Future<dynamic>'不是类型'(()=> void)的子类型? [复制]
【发布时间】: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


    【解决方案1】:

    您正在调用sendmessage 方法,当onPressed 期望一个函数时返回一个Future。你可以

    1. 删除方法调用(首选):
    onPressed: enteredmessage.trim().isEmpty ? null : sendmessage
    
    1. onPressed 使用 lambda:
    onPressed: () => enteredmessage.trim().isEmpty ? null : sendmessage()
    

    【讨论】:

      猜你喜欢
      • 2020-01-01
      • 2021-10-21
      • 2020-01-14
      • 1970-01-01
      • 2019-04-05
      • 1970-01-01
      • 1970-01-01
      • 2021-02-06
      • 2020-09-24
      相关资源
      最近更新 更多