在嵌套组件中使用用户身份验证提供程序

时间:2020-06-15 08:12:54

标签: flutter flutter-provider

我是新手,我正在开发一些类似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内,但后来意识到这样做会使其失去反应。

它可以工作,但似乎根本不是一个好的设计。 很想听听建议!

0 个答案:

没有答案