我想知道 getx 和 Riverpod 之间有什么区别。我很困惑我将在实际项目中使用这两个状态管理工具中的哪一个。
这是一个关于该主题的精彩且最新的 YouTube 视频: https://www.youtube.com/watch?v=mxkhUYC5yF8
但是,我建议您查看 BLoC,尤其是使用它的肘节。
在我看来,Riverpod 不是一个好的选择,因为他们决定完全重新发明轮子,不使用 InheritedWidget,而是实现自己的解决方案。我永远不想与框架对抗,而是与它一起工作。
不同之处在于Riverpod遵循单向数据流,而getx则不然。
对于大型产品,请选择 Riverpod, 对于小型应用程序,请选择 GetX。
GetX不仅仅是一个状态管理工具,它更像是一个flutter的框架。如果您只需要一个状态管理器,您将获得所有您不需要的额外功能和实用程序。如果您使用 GetX 提供的所有功能,那么您的整个路由、materialApp、本地化、api 等都依赖于一个包。在我看来,让您的应用程序同时依赖 Flutter 和 GetX 进行维护是一场不必要的赌博。特别是如果它是一个生产应用程序。
第一个区别是:
Riverpod只是一个状态管理包,但是GetX可以管理 路由和依赖注入(服务定位器)也是如此。这给出了 GetX 附加功能:我们可以实例化控制器(提供者) 在服务定位器内部,我们可以将控制器绑定到路由 还有更多。
另一个巨大的区别:
GetX 非常简单,特别是对于初学者来说,而 Riverpod 非常简单 复杂,尤其是对于初学者。
考虑定义控制器/提供者的两个代码片段:
获取X:
class CounterController extends GetxController {
var count = 100.0.obs;
increment() {
count.value += 25;
if (count.value > 400){
count.value = 100;
}
}
}
final counterController = CounterController();
河波德:
class _CounterNotifier extends Notifier<double> {
@override
double build() {
return 100.0;
}
void increment() {
state += 25;
if (state > 400) {
state = 100;
}
}
}
final counterProvider =
NotifierProvider<_CounterNotifier, double>(_CounterNotifier.new);
GetX 的语法简单、清晰、易记。您只需将
.obs
(扩展方法)添加到任何类型的变量中,这就会自动使其变得可观察。
Riverpod 的语法绝对是陌生的。什么是通知者?为什么一定要曝光呢?哦,它来自Provider包。所以,要了解Riverpod必须先了解Provider。很奇怪的要求。 而且我并不是说 Provider 不应该学习。每个学习Flutter的人都应该学习Provider和Riverpod。我的意思是 GetX 在数量级上更容易学习。
我的拙见:先学GetX,再做几个应用程序。然后,学习 Provider、Riverpod 和 BLoC。