'The method 'initState' isn't defined in a superclass of 'ChatRoom'
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 1:[1]
Are you sure your ChatRoom component is a StatefulWidget?
Solution 2:[2]
Since ChatRoom is a StatelessWidget, it does not have access to the initState method, since there is not state to initialize.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Tim Jacobs |
| Solution 2 | dor |
