如何更好地理解如何阅读 Flutter 代码?

How do I get a better understanding on how to read Flutter code?

问题是我对程序的工作流程感到困惑,然后是我们导航到的页面以及我们从我们创建的不同文件导入的小部件。我如何更好地理解所有这些以及概念?

我能做的最好的就是分享我的路径,这样你就可以从某个地方开始。警告:前面的意见,不涉及实际数据或最佳实践(我不是这里的专家)。

如果您想学习 Flutter,要做的第一件事是:在 Udemy 等平台上,花费 10 美元即可获得制作精良的完整课程。我用 this course 完成了我的第一步,老实说,这对初学者来说是最好的。

  1. 务必将您的应用程序组织成越来越小的小部件,以便您真正遵循某种逻辑。无视building与返回Widgets的函数(这也是效率问题!);
  2. DO 将 UI bui 与业务逻辑 and/or 服务请求(例如 http)分开,即在模型、状态、ui 和逻辑。

这里有一个例子(即这不是经验法则,而是对我有用的东西)关于我最近一直在做的项目:

1。项目组织

+/lib  [the whole project]
|
+--/models
|  |
|  +[heres a bunch of .dart files, each representing a data model, i.e. classes]
|
+--/providers
|  |
|  + [State management. I choose Riverpod, so I use providers.]
|  + [Therefore, here you find logic and state management .dart files]
|
+--/widgets
|  |
|  + [Widgets that are REUSED across the WHOLE APPLICATION]
|  + [It doesnt happen very often, so there arent many .dart files here]
|  + [Note. It is not WIDGET<=>NEW FILE. It is: ""big"" widget <=> NEW FILE]
|  + [Note 2. I rather create private widgets within the same file to keep things organized]
|
+--/screens
|  |
|  + [In here, there are as much subfolders as screens to be rendered]
|  + [In my mind, a screen not necessarly translates in a Scaffold]
|  |
|  +--/screen1/... [list of .dart files - widgets for this screen]
|  +--/screen2/...
|  +--/screen_with_multiple_tabs_and_bottom_bar/
|     |
|     +mainScaffold.dart
|     +/tab1/... [list of .dart files - widget for this tab]
|     +/tab2/...

同样,这只是一个随机示例。我喜欢以某种方式“组织”我的项目,以便我可以轻松跟踪路由,同时分离小部件、逻辑、模型和实用程序。我相信上面的模式是不言自明的。如果没有,请告诉我。

2。状态管理

当涉及到状态管理时,我对这个框架有很多困惑。目前 Google 很容易听取社区的意见,为 public 带来最好的状态管理解决方案:目前市场上的解决方案之间没有明确的“赢家”。

如果您在选择状态管理包时感到“困惑”,我强烈推荐 Provider package, to begin with, which was made with a strong effort by a committed person in the Flutter community. This package is a wrapper around the so-called InheritedWidget, so it's very Flutterish, I totally recommend to check it out. Even Google dropped their own state management solution and adopted this one (2019),即使他们仍在寻求改进。

如果您使用其他非 flutterish 解决方案,例如 injection, or hooks, or GetIt(或其他...),没有人会讨厌您,但我(个人!)认为框架适合您,而不是反之亦然,所以为什么要逆流而上:)

我个人使用Riverpod,这是一个Provider改进,由同一个人完成。但是,如果您是 Flutter 新手,请先学习 Provider

我听说 BLOC 是一个强大的生产就绪解决方案。但这是很难的事情。很容易不知所措,先从基础开始(Provider),再多学一些再选择。

我希望这能回答一点。