The method 'initState' isn't defined in a superclass of 'ChatRoom'

Issue

Im creating a chat using flutter + firebase. I want to record audio audio when I click the "mic" icon. but I’m getting these errors in my code. message sending is already working. now I want send voice messages and store them in firebase. I refer this video for the implementation. for your reference you can find my full code files. voice recording codes are highlighted. >> methods.dart , chatRoom.dart , serach.dart. think Im placing the code incorrectly. apriciate your hep on this.

.

The method 'initState' isn't defined in a superclass of 'ChatRoom'.
The method 'dispose' isn't defined in a superclass of 'ChatRoom'
The method 'setState' isn't defined for the type 'ChatRoom'.

.

chatRoom.dart
     bool show = false;
      FocusNode forcusNode = FocusNode();
      **final recorder = SoundRecorder();
    
      @override
      void initState(){
        super.initState();
        recorder.init();
      }
    
      @override
      void dispose(){
        super.dispose();
        recorder.dispose();
      }**
    
      @override
      Widget build(BuildContext context) {
        final size = MediaQuery.of(context).size;
    
    
        **final isRecording = recorder.isRecording;
        final icon = isRecording ? Icons.stop: Icons.mic;
        final text = isRecording? 'STOP': 'START';
        final primary= isRecording? Colors.red : Colors.white;
        final onPrimary = isRecording ? Colors.white : Colors.black;**
    
    
        return Scaffold(
          resizeToAvoidBottomInset: false,
          appBar: AppBar(
            title: StreamBuilder<DocumentSnapshot<Map<String ,dynamic>>>(
              stream: _firestore.collection('Users').doc(userMap['uid']).snapshots(),
              builder:(context ,snapshot){
               // print(snapshot.data!['name']);
                if(snapshot.data!.exists){
                  // print(snapshot.data!['status']);
                  return Container(
                    child: Column(
                      children: [
                             Text(userMap['name']),
                            // Text(snapshot.data!['status']),
                      ],
                    ),
                  );
                  }else{
                    return Container(child: Text(userMap['name']),);
                  }
                
                
              } ,)
            
           
          ),
          body: SingleChildScrollView(
            child: Column(children: [
              Container(
                  height: size.height / 1.25,
                  width: size.width,
                  child: StreamBuilder<QuerySnapshot>(
                    stream: _firestore
                        .collection('chatroom')
                        .doc(ChatRoomID)
                        .collection('chats')
                        .orderBy("time", descending: false)
                        .snapshots(),
                    builder: ((BuildContext context,
                        AsyncSnapshot<QuerySnapshot> snapshot) {
                      if (snapshot.data != null) {
                        return ListView.builder(
                            itemCount: snapshot.data!.docs.length,
                            itemBuilder: (context, index) {
                              Map<String, dynamic>? map = snapshot.data!.docs[index]
                                  .data() as Map<String, dynamic>?;
                              return message(size, map!);
                            });
                      }
                      return Container();
                    }),
                  )),
              Container(
                height: size.height / 10,
                width: size.width,
                alignment: Alignment.center,
                child: Center(
                  child: Row(
                      mainAxisAlignment: MainAxisAlignment.spaceAround,
                      children: [
                        Padding(
                          padding: const EdgeInsets.all(5.0),
                          child: SizedBox(
                            height: size.height / 10,
                            width: size.width / 1.5,
                            child: Card(
                              margin: EdgeInsets.only(left: 2, right: 2, bottom: 8),
                              shape: RoundedRectangleBorder(
                                  borderRadius: BorderRadius.circular(25)),
                              child: TextField(
                                focusNode: forcusNode,
                                controller: _message,
                                keyboardType: TextInputType.multiline,
                                maxLines: 5,
                                minLines: 1,
                                textAlignVertical: TextAlignVertical.center,
                                decoration: InputDecoration(
                                  border: InputBorder.none,
                                  prefixIcon: IconButton(
                                      onPressed: () {
                                        forcusNode.unfocus();
                                        forcusNode.canRequestFocus = false;
                                        show = !show;
                                      },
                                      icon: Icon(
                                        Icons.emoji_emotions,
                                        color: textGrey,
                                      )),
                                  suffixIcon: Row(
                                      mainAxisSize: MainAxisSize.min,
                                      children: [
                                        IconButton(
                                            onPressed: () {
                                              getImage();
                                            },
                                            icon: Icon(
                                              Icons.attach_file,
                                              color: textGrey,
                                            )),
                                        IconButton(
                                            onPressed: () {},
                                            icon: Icon(
                                              Icons.camera_alt,
                                              color: textGrey,
                                            )),
    
                                      ]),
                                  hintText: 'Type Message',
                                ),
                              ),
                            ),
                          ),
                        ),
    
                        **IconButton(
                              onPressed: () async{
                               final isRecording = await recorder.toggleRecording();
                               setState((){});
                              },
                              icon: Icon(
                                Icons.mic,
                                color: mainGreen,
                              )),**
    
                        IconButton(
                            onPressed: () {
                              onSendMessage();
                              print(_message.text);
                            },
                            icon: Icon(
                              Icons.send,
                              color: mainGreen,
                            )),
    
    
                      ]),
                ),
              ),
            ]),
          ),
        );
      }

  @override
  void dispose(){
    super.dispose();
    recorder.dispose();
  }

IconButton(
                          onPressed: () async{
                           final isRecording = await recorder.toggleRecording();
                           setState((){});
                          },
                          icon: Icon(
                            Icons.mic,
                            color: mainGreen,
                          )),

Solution

Are you sure your ChatRoom component is a StatefulWidget?

Answered By – Tim Jacobs

Answer Checked By – Katrina (FlutterFixes Volunteer)

Leave a Reply

Your email address will not be published. Required fields are marked *