我是新手,我正在开发一些类似whatsapp的基本聊天应用程序。 我已经将我的应用包裹在身份验证提供程序中:
void main() {
runApp(
ChangeNotifierProvider<LoggedUser>(
create: (context) => LoggedUser(),
child: MyApp(),
),
);
}
现在,我需要在显示最近聊天记录的聊天组件中使用提供的用户详细信息。事实是,我在弄清楚应该放在哪里时遇到了麻烦,最终我做了这样的事情:
//
// chats.dart
//
class _UserChatsState extends State<UserChats> {
List<...> chats = [];
User $user;
DateTime from, to;
void getChats() async {
List<...> chats = await fetchChats($user, from: from, to: to);
setState(() {
this.chats = chats;
});
}
Widget build(BuildContext context) {
int n = chats.length;
return Consumer<LoggedUser>(builder: (context, loggedUser, child) {
var user = loggedUser.user;
if (user != $user) {
$user = user;
getChats();
}
return ListView.builder(
padding: EdgeInsets.only(
right: 12,
),
itemCount: chats.length,
itemBuilder: (BuildContext context, int index) {
var chat = chats[index];
var contact = chat.contact, lastMessage = chat.lastMessage;
.....
}
}
基本上,我检查是否在build方法中是否有用户登录。我最初将此逻辑放在initState内,但后来意识到这样做会使其失去反应。
它可以工作,但似乎根本不是一个好的设计。 很想听听建议!