【问题标题】:Flutter conditional widget but {} not equal {}Flutter 条件小部件但 {} 不等于 {}
【发布时间】:2020-02-20 06:10:51
【问题描述】:

我正在尝试有条件地在 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
}

这是以某种方式得出的结果:

我做错了什么?

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    不建议在 build 方法中使用 provider。 Check this guide for help

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

    也就是说,您在哪里(以及何时)调用用户的设置器?

    【讨论】:

    • 在build方法里面使用provider没有错
    【解决方案2】:

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

    有一个包可以解决这个问题:https://pub.dev/packages/collection

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

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

    【讨论】:

      猜你喜欢
      • 2021-07-07
      • 1970-01-01
      • 2021-07-24
      • 2021-01-28
      • 2016-06-18
      • 2011-08-25
      • 1970-01-01
      • 2019-11-26
      • 2018-11-11
      相关资源
      最近更新 更多