类型 'String' 不是类型 'bool' 的子类型
type 'String' is not a subtype of type 'bool'
我在尝试构建包含聊天功能的应用程序时收到一条错误消息,消息是:
type 'String' is not a subtype of type 'bool'
错误信息截图:
我的代码:
class Messages extends StatelessWidget {
@override
Widget build(BuildContext context) {
User user2= FirebaseAuth.instance.currentUser;
return FutureBuilder(
// future: Future<String>.delayed(
// Duration(seconds: 2),
// () => 'Data Loaded',
// ),
//future: FirebaseAuth.instance.currentUser,
builder:(ctx, futureSnapshot){
if(futureSnapshot.connectionState==ConnectionState.waiting){
return Center(child: CircularProgressIndicator());}
return StreamBuilder(
stream: FirebaseFirestore.instance.collection('chat').orderBy('createdAt',descending: true).snapshots(),
builder: (ctx, chatSnapshot){
if(chatSnapshot.connectionState== ConnectionState.waiting){
return Center(child: CircularProgressIndicator(),);
}
if(chatSnapshot.hasData){
final chatDocs= chatSnapshot.data.docs;
return ListView.builder(
//key: ValueKey(chatDocs[index].docsID),
reverse: true,
itemCount:chatDocs.length,
itemBuilder: (ctx, index)=> MessageBubble(
chatDocs[index]['text'],
chatDocs[index]['userId'],
//chatDocs[index]['userId'] ==futureSnapshot.data.udi,
ValueKey(chatDocs[index].docsID),
)
);}
else{
return Text('عذرًا, هناك مشكلة');
}
},
);
},
);
}
任何人都可以提出解决方案并告诉我应该怎么做吗?
@MansiBhatt
MessageBubble class:
class MessageBubble extends StatelessWidget {
final String messsage;
final userID;
final bool isMe;
final Key key;
MessageBubble(this.messsage,this.userID, this.isMe,this.key);
@override
Widget build(BuildContext context) {
return Row(
mainAxisAlignment: isMe? MainAxisAlignment.start: MainAxisAlignment.end,
children: [
Container(
decoration: BoxDecoration(
color: isMe? Colors.grey[300]: nave,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(12),
topRight: Radius.circular(12),
bottomLeft: !isMe ? Radius.circular(12) : Radius.circular(0),
bottomRight: isMe ? Radius.circular(12) : Radius.circular(0),
),
),
width: 140,
padding: EdgeInsets.symmetric(vertical: 10,horizontal: 16),
margin: EdgeInsets.symmetric(vertical: 4, horizontal: 8),
child: Column(
children: [
Column(
children: [
FutureBuilder(
future: FirebaseFirestore.instance.collection('users').doc(userID).get(),
builder: (context, snapshot) {
if(snapshot.connectionState== ConnectionState.waiting){
return Text('جاري التحميل...');}
return Text(snapshot.data['username'], style: TextStyle(fontWeight: FontWeight.bold),);
}
),
],
),
Text(messsage, style: TextStyle(color: isMe? white : Colors.black,),),
],
) ,
),
],
);
}
}
问题是您在此处评论的这一行:
MessageBubble(
chatDocs[index]['text'],
chatDocs[index]['userId'],
// chatDocs[index]['userId'] ==futureSnapshot.data.udi,
ValueKey(chatDocs[index].docsID),
)
为什么?您的对象 MessageBubble 有 4 个位置参数。其中第三个是 isMe
并期望 boolean
。但是,您传递了 ValueKey(因为它们是位置性的)。
此外,您没有提供 required
的 4º 参数,因为所有位置参数都是 required
class MessageBubble extends StatelessWidget {
final String messsage;
final userID;
final bool isMe;
final Key key;
MessageBubble(this.messsage,this.userID, this.isMe,this.key);
你可以:
- 取消注释此行
chatDocs[index]['userId'] ==futureSnapshot.data.udi
或向其传递另一个布尔值(真或假)
我在尝试构建包含聊天功能的应用程序时收到一条错误消息,消息是:
type 'String' is not a subtype of type 'bool'
错误信息截图:
class Messages extends StatelessWidget {
@override
Widget build(BuildContext context) {
User user2= FirebaseAuth.instance.currentUser;
return FutureBuilder(
// future: Future<String>.delayed(
// Duration(seconds: 2),
// () => 'Data Loaded',
// ),
//future: FirebaseAuth.instance.currentUser,
builder:(ctx, futureSnapshot){
if(futureSnapshot.connectionState==ConnectionState.waiting){
return Center(child: CircularProgressIndicator());}
return StreamBuilder(
stream: FirebaseFirestore.instance.collection('chat').orderBy('createdAt',descending: true).snapshots(),
builder: (ctx, chatSnapshot){
if(chatSnapshot.connectionState== ConnectionState.waiting){
return Center(child: CircularProgressIndicator(),);
}
if(chatSnapshot.hasData){
final chatDocs= chatSnapshot.data.docs;
return ListView.builder(
//key: ValueKey(chatDocs[index].docsID),
reverse: true,
itemCount:chatDocs.length,
itemBuilder: (ctx, index)=> MessageBubble(
chatDocs[index]['text'],
chatDocs[index]['userId'],
//chatDocs[index]['userId'] ==futureSnapshot.data.udi,
ValueKey(chatDocs[index].docsID),
)
);}
else{
return Text('عذرًا, هناك مشكلة');
}
},
);
},
);
}
任何人都可以提出解决方案并告诉我应该怎么做吗?
@MansiBhatt
MessageBubble class:
class MessageBubble extends StatelessWidget {
final String messsage;
final userID;
final bool isMe;
final Key key;
MessageBubble(this.messsage,this.userID, this.isMe,this.key);
@override
Widget build(BuildContext context) {
return Row(
mainAxisAlignment: isMe? MainAxisAlignment.start: MainAxisAlignment.end,
children: [
Container(
decoration: BoxDecoration(
color: isMe? Colors.grey[300]: nave,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(12),
topRight: Radius.circular(12),
bottomLeft: !isMe ? Radius.circular(12) : Radius.circular(0),
bottomRight: isMe ? Radius.circular(12) : Radius.circular(0),
),
),
width: 140,
padding: EdgeInsets.symmetric(vertical: 10,horizontal: 16),
margin: EdgeInsets.symmetric(vertical: 4, horizontal: 8),
child: Column(
children: [
Column(
children: [
FutureBuilder(
future: FirebaseFirestore.instance.collection('users').doc(userID).get(),
builder: (context, snapshot) {
if(snapshot.connectionState== ConnectionState.waiting){
return Text('جاري التحميل...');}
return Text(snapshot.data['username'], style: TextStyle(fontWeight: FontWeight.bold),);
}
),
],
),
Text(messsage, style: TextStyle(color: isMe? white : Colors.black,),),
],
) ,
),
],
);
}
}
问题是您在此处评论的这一行:
MessageBubble(
chatDocs[index]['text'],
chatDocs[index]['userId'],
// chatDocs[index]['userId'] ==futureSnapshot.data.udi,
ValueKey(chatDocs[index].docsID),
)
为什么?您的对象 MessageBubble 有 4 个位置参数。其中第三个是 isMe
并期望 boolean
。但是,您传递了 ValueKey(因为它们是位置性的)。
此外,您没有提供 required
的 4º 参数,因为所有位置参数都是 required
class MessageBubble extends StatelessWidget {
final String messsage;
final userID;
final bool isMe;
final Key key;
MessageBubble(this.messsage,this.userID, this.isMe,this.key);
你可以:
- 取消注释此行
chatDocs[index]['userId'] ==futureSnapshot.data.udi
或向其传递另一个布尔值(真或假)