【发布时间】:2021-10-27 21:37:03
【问题描述】:
以下代码给了我错误:
小部件库捕获的异常以下 LateError 在构建 Conversations(dirty, state: _ConversationsState#77d8c) 时引发: LateInitializationError: 字段 'chatRoomStream' 尚未初始化。
import 'package:flutter/material.dart';
import 'package:meet_up/screens/authenticate/helperfunctions.dart';
import 'package:meet_up/screens/home/conversationdm.dart';
import 'package:meet_up/screens/home/searchusers.dart';
import 'package:meet_up/services/auth.dart';
import 'package:meet_up/services/database.dart';
import 'package:meet_up/shared/constants.dart';
class Conversations extends StatefulWidget {
@override
_ConversationsState createState() => _ConversationsState();
}
class _ConversationsState extends State<Conversations> {
AuthService authService = AuthService();
DatabaseServices databaseServices = DatabaseServices();
late Stream chatRoomStream;
Widget chatRoomList() {
return StreamBuilder(
stream: chatRoomStream,
builder: (context, snapshot) {
return snapshot.hasData
? ListView.builder(
itemCount: (snapshot.data as QuerySnapshot).docs.length,
itemBuilder: (context, index) {
return ChatRoomTile(
(snapshot.data as QuerySnapshot)
.docs[index]["chatroomId"]
.toString()
.replaceAll("_", "")
.replaceAll(Constants.myName, ""),
((snapshot.data as QuerySnapshot).docs[index]
["chatroomId"]));
})
: Container();
});
}
@override
void initState() {
super.initState();
getUserInfo();
databaseServices.getChatRooms(Constants.myName).then((value) {
setState(() {
chatRoomStream = value;
});
});
}
getUserInfo() async {
Constants.myName = (await HelperFunctions.getUserNameSharedPreference())!;
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Colors.green,
elevation: 0,
title: Text(
'Conversations',
),
),
body: chatRoomList(),
floatingActionButton: FloatingActionButton(
backgroundColor: Color(0xFF25D55F),
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => SearchScr(),
));
},
child: Icon(Icons.search),
),
);
}
}
class ChatRoomTile extends StatelessWidget {
final String userName;
final String chatRoomId;
ChatRoomTile(this.userName, this.chatRoomId);
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => UserConversationDM(chatRoomId)));
},
child: Container(
color: Color(0xff2d2828),
padding: EdgeInsets.symmetric(horizontal: 20, vertical: 16),
child: Row(
children: [
Container(
height: 40,
width: 40,
alignment: Alignment.center,
decoration: BoxDecoration(
color: Colors.green, borderRadius: BorderRadius.circular(40)),
child: Text(
"${userName.substring(0, 1).toUpperCase()}",
style: TextStyle(
fontSize: 15,
fontWeight: FontWeight.bold,
),
),
),
SizedBox(
width: 8,
),
Text(
userName,
style: TextStyle(
fontSize: 15,
fontWeight: FontWeight.bold,
),
)
],
),
),
);
}
}
我真的是 Flutter 新手,如果能得到一点指导,我们将不胜感激。谢谢你:)
【问题讨论】: