条件微件颤抖,但{}不等于{}

时间:2019-10-23 23:41:52

标签: flutter dart

我试图有条件地在Flutter中构建一个小部件,但是我的情况在某种程度上不符合我的想法。怎么不一样呢?

提供商

class User with ChangeNotifier {
  Map _user = {};

  Map get user {
    return _user;
  }

  void setUser() {
    // Set _user and notify listeners
  }
}

进行构建的小部件

Widget build(BuildContext context) {
    final user = Provider.of<User>(context);

    if (user.user == {}) {
      print('It equals it');
      print(user.user);
    } else {
      print('It DOES NOT equals it');
      print(user.user);
    }

    ...

    bottomNavigationBar: user.user == {} ? BottomNavBar() : null
}

这是某种原因导致的结果: enter image description here

我在做什么错了?

2 个答案:

答案 0 :(得分:2)

简而言之,您认为这些是相等的,但事实并非如此。 Dart中的集合没有固有的平等性。即使两组包含与元素完全相同的对象,两组也不相等。

有一个用于处理此问题的软件包:https://pub.dev/packages/collection

它迫使您指定要应用于键和值的相等类型。

示例:const MapEquality(const IdentityEquality(), const ListEquality());

答案 1 :(得分:-1)

不建议在build方法内使用提供程序。 Check this guide for help

此外,您还应该阐明该小部件是有状态的还是无状态的,并且应该发布setUser()方法的代码。

也就是说,您在哪里(什么时候)呼叫用户的设置者?