我试图有条件地在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
}
我在做什么错了?
答案 0 :(得分:2)
简而言之,您认为这些是相等的,但事实并非如此。 Dart中的集合没有固有的平等性。即使两组包含与元素完全相同的对象,两组也不相等。
有一个用于处理此问题的软件包:https://pub.dev/packages/collection
它迫使您指定要应用于键和值的相等类型。
示例:const MapEquality(const IdentityEquality(), const ListEquality());
答案 1 :(得分:-1)
不建议在build方法内使用提供程序。 Check this guide for help
此外,您还应该阐明该小部件是有状态的还是无状态的,并且应该发布setUser()
方法的代码。
也就是说,您在哪里(什么时候)呼叫用户的设置者?