Я показываю всех пользователей из firebase в listview.builder на экране моего сообщения, когда я нажимаю на пользователя в списке, которого я хочу отправить на экран чата, который отображает изображение и имя профиля этого пользователя на панели приложения. .
Код на этом исключении приостанавливается:
backgroundImage: widget.receiver.profileImageUrl.isEmpty
? AssetImage(
'assets/images/default_profile_picture.png')
: CachedNetworkImageProvider(
widget.receiver.profileImageUrl)),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
widget.receiver.name
Соответствующий просмотр списка:
body: ListView.builder(
itemCount: usersList.length,
itemBuilder: ((context, index) {
return Padding(
padding: const EdgeInsets.all(4.0),
child: InkWell(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: ((context) => ChatScreen(
profileImageUrl: usersList[index].profileImageUrl,
name: usersList[index].name,
receiverUid: usersList[index].uid,
// receiverUid: widget.currentUserId,
userId: widget.currentUserId,
receiver: user,
)
)
));
},
child: ListTile(
leading: CircleAvatar(
backgroundImage: usersList[index].profileImageUrl.isEmpty
? AssetImage(
'assets/images/default_profile_picture.png')
: CachedNetworkImageProvider(
usersList[index].profileImageUrl)),
title: Text(usersList[index].name),
),
),
);
}),
)
Конструктор экрана чата:
class ChatScreen extends StatefulWidget {
final String profileImageUrl;
final String name;
final String receiverUid;
final User sender;
final User receiver;
final String userId;
ChatScreen(
{this.profileImageUrl,
this.name,
this.receiverUid,
this.sender,
this.receiver,
this.userId});
@override
_ChatScreenState createState() => _ChatScreenState();
}
Экран чата initstate:
@override
void initState() {
super.initState();
_repository.getCurrentUser().then((user) {
_currentUserId = user.uid;
setState(() {
sender = User(
id: user.uid,
name: user.displayName,
profileImageUrl: user.photoUrl);
});
});
_repository.getUserWithId(widget.userId).then((user) {
setState(() {
receiver = User(
id: user.id,
profileImageUrl: user.profileImageUrl,
name: user.name);
});
});
}
Конструктор экрана сообщений:
class MessagesScreen extends StatefulWidget {
final String userId;
final User receiver;
final String currentUserId;
final String receiverUid;
MessagesScreen(
{this.userId, this.receiver, this.currentUserId, this.receiverUid});
@override
_MessagesScreenState createState() => _MessagesScreenState();
}