flutter - 我正在将颤振用于聊天应用程序,并且在用户区分接收方和发送方时出现错误
问题描述
class Messages extends StatelessWidget {
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: FirebaseAuth.instance.currentUser,// here is the error " The argument type 'User' can't be assigned to the parameter type 'Future<dynamic>'.dart(argument_type_not_assignable)"
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(),
);
}
final chatDocs = chatSnapshot.data.docs;
return ListView.builder(
reverse: true,
itemCount: chatSnapshot.data.docs.length,
itemBuilder: (ctx, index) => MessageBubble(
chatDocs[index]['text'],
chatDocs[index]['userId'] == futureSnapshot.data.uid,
key: ValueKey(chatDocs[index].documentID),
),
);
});
},
);
}
}
解决方案
'FirebaseAuth.instance.currentUser' 不是获取当前用户 uid 的未来,您可以这样做。
class Messages extends StatelessWidget {
final User user = FirebaseAuth.instance.currentUser;
@override
Widget build(BuildContext context) {
final uid = user.uid; // set the function here
return StreamBuilder(
stream: FirebaseFirestore.instance
.collection('chat')
.orderBy('createdAt', descending: true)
.snapshots(),
builder: (ctx, chatSnapshot) {
if (chatSnapshot.connectionState == ConnectionState.waiting) {
return Center(
child: CircularProgressIndicator(),
);
}
final chatDocs = chatSnapshot.data.docs;
return ListView.builder(
reverse: true,
itemCount: chatSnapshot.data.docs.length,
itemBuilder: (ctx, index) => MessageBubble(
chatDocs[index]['text'],
chatDocs[index]['userId'] == uid, // Use it here
key: ValueKey(chatDocs[index].documentID),
),
);
});
}
}
推荐阅读
- angular - 如何将任何类型数组转换为自定义对象列表
- javascript - 如何使用 @HostListener 的捕获阶段
- mysql - InnoDB:无法创建 ./ib_logfile101
- php - DocuSign PHP SDK - 如何以编程方式填充现有的文本选项卡?
- android - 时间同时影响 textview android studio
- python - 如何使自定义 YAML 标记与 pyyaml 中的序列别名一起使用
- unity3d - 在 Unity 中尚未实例化的其他场景中访问 GameObject
- react-native - 如何通过 React Native 在 3rd 方应用程序中打开 pdf 文件?
- pagination - 在颤动中使用 ListView 进行分页
- variables - 启动进程时如何为Activiti设置瞬态变量