[英]3 positional argument(s) expected, but 2 found
请帮忙。 代码是使用用户 ID 从一个屏幕移动到另一个屏幕。 这是一个聊天应用程序。
我收到的错误是:预期 3 个位置参数,但找到了 2 个。
我试图看看问题出在哪里,但似乎找不到。
这是代码。
Future<void> _moveToChat(selectedUserID) async {
try {
String chatID;
SharedPreferences prefs = await SharedPreferences.getInstance();
String myID = (prefs.get('userID') ?? 'userID');
if(myID.hashCode > selectedUserID.hashCode) {
chatID = '${selectedUserID.hashCode} - ${myID.hashCode}';
}else{
chatID = '${myID.hashCode} - ${selectedUserID.hashCode}';
}
FirebaseFirestore.instance.collection('chat').doc(chatID).set({});
Navigator.push(
context,
MaterialPageRoute(builder: (context) => Chat(myID, selectedUserID))
);
}catch(e){
print(e.message);
}
}
这是聊天 class 代码。
class Chat extends StatefulWidget {
Chat(this.myID, this.selectedUserID, this.chatID);
String myID;
String selectedUserID;
String chatID;
@override
_ChatState createState() => _ChatState();
}
class _ChatState extends State<Chat> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
centerTitle: true,
title: Container(
height: 60.0,
decoration: BoxDecoration(
image: DecorationImage(
fit: BoxFit.scaleDown,
image: AssetImage('assets/images/logo.png'),
),
),
),
),
body: StreamBuilder<QuerySnapshot>(
stream: FirebaseFirestore.instance
.collection('Chats')
.orderBy('createdAt', descending: true)
.snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData) return Container(
child: Center(
child: CircularProgressIndicator(),
),
color: kAccentColor,
);
return Text('dd');
},
),
);
}
}
在这里你必须通过 3 arguments:
MaterialPageRoute(builder: (context) => Chat(myID, selectedUserID));
字符串我的ID;
字符串选择用户ID;
字符串聊天ID; <- 这个没有作为第三个位置参数传递给 Chat class。
检查Chat
的构造函数:
Chat(this.myID, this.selectedUserID, this.chatID)
如您所见,共有三个 arguments。 但现在让我们检查您的实例化:
MaterialPageRoute(builder: (context) => Chat(myID, selectedUserID))
你能发现缺少什么吗? 第三个参数, chatID
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.