新冠追踪器
架构
新冠追踪器应用程序用于演示 MVVM 架构和整洁架构的使用。应用程序的架构如下图所示
具体来说,在该应用程序中,使用了 Provider 状态管理,因此易于实现 MVVM,因为 Provider 有一个名为 ChangeNotifierProvider 的类。
首先,我们有 View,它可以是任何屏幕或小部件,View 的唯一功能是在屏幕上显示数据。然后我们有 ViewModel 类,它可以扩展 ChangeNotifier 类或将其用作混合,这样做允许我们使用 notifyListener() 方法,该方法将通知 ChangeNotifierProviders 任何更改,因此 ViewModel 在这里无法访问 View,而是当调用 notifyListener() 时,所有订阅的对象都将收到更改通知。所以这就像观察者模式。
然后我们进入 Model 部分,但在解释它之前,在应用程序中,我还使用了 get_it 包,它是一个服务定位器,意味着您将有一个中央注册表,您可以在其中注册类,然后获取这些类的实例。因此,由于我不希望 ViewModel 类知道 Repository 中使用的实现,因此我使用了一个抽象类,并使用 get_it 包注册实现类。但是 ViewModel 类将始终依赖于抽象而不是实现,这将使以后更改实现更加容易。例如,在 VaccinationViewModel 中
final VaccinationViewRepository _repository = locator<VaccinationViewRepository>();
这里,在 service_locator.dart 中注册的类是 VaccincationViewRepositoryImpl,但 VaccinationViewModel 将依赖于 VaccinationViewRepository,从而实现了 SOLID 原则中的 'D' 部分。
因此,ViewModel 类将调用 Repository,Repository 也将调用 Service 类,在我的例子中,我使用了 retrofit,这将导致许多生成的文件,但您也可以只使用 Dio 而不是 retrofit。当数据获得后,它将通过每个层从 Service 类返回到调用 notifyListener() 以通知 View 更改的 ViewModel。
最后,我按功能分离了文件,而不是将所有 ViewModel 添加到名为 ViewModel 的文件夹中,并将所有 Services 添加到名为 Services 的文件夹中……这样导航会更容易。
应用程序使用的 API 可以在这里找到:https://disease.sh/docs/
屏幕
| 世界统计屏幕 1 | 世界统计屏幕 2 | 搜索屏幕 1 |
|---|---|---|
| 搜索屏幕 2 | 国家统计屏幕 | 疫苗屏幕 |
|---|---|---|
| 国家统计屏幕 2 |
|---|
如何运行
如果您 fork 了该项目,那么您所要做的就是首先下载依赖项,您可以通过执行以下命令来完成:
flutter pub get
然后执行
flutter pub run build_runner build
来生成所有自动生成的文件。
另外,由于使用了 Google Maps,您需要获取一个 API 密钥 并将其添加到 Android_manifest.xml 文件中。例如
<application
....
<meta-data android:name="com.google.android.geo.API_KEY"
android:value="API_KEY_HERE"/>
....
</application>
许可证
根据 MIT 许可证 许可。
有用的文章
Provider 实现指南
在 Flutter 中使用 GetIt
理解所有这些 Flutter Providers
整洁架构入门
在 Flutter 中使用 Provider
支持!
通过加入该仓库的 Stargazers 来支持该项目 ⭐
创建和维护者
如果您觉得这个项目有帮助,或者从教程中学到了东西,并想感谢我,请考虑给我买杯 ☕
