5

如何避免Flutter的5大错误

 8 months ago
source link: https://www.fly63.com/article/detial/12624
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

大家好,今天我将与大家分享 Flutter 中一些最糟糕的方法,您应该不惜一切代价避免。这些内容基于我作为 IT 软件工程师和 Flutter 爱好者的个人经验,以及我在网上找到的一些最佳实践和技巧。

1. 一切都使用setState()

Flutter 初学者最常犯的错误之一是对应用程序中的每个状态更改使用 setState ()。setState() 是一个方法,它告诉 Flutter 在 StatefulWidget 的状态发生变化时重建 widget 树。但是,过于频繁地使用 setState () 可能会导致不必要的重建并降低应用程序的性能。而且,使用 setState() 进行复杂的状态管理可能会让你的代码变得混乱且难以理解。

解决方案是使用更先进的状态管理技术,这些包可以帮助您以更高效和可扩展的方式管理应用程序的状态。它们允许您将业务逻辑与 UI 分开,并仅更新依赖于状态更改的小部件。您还可以使用 StreamBuilder 或 FutureBuilder 小部件来处理异步数据源,而无需使用 setState()。

2. 使用全局变量和单例

Flutter 中的另一个不好的做法是使用全局变量和单例来存储和访问整个应用程序中的数据。全局变量和单例是只有一个实例的变量或对象,可以从代码中的任何位置访问。它们乍一看似乎很方便,但可能会导致许多问题,例如:

  • 内存泄漏:全局变量和单例会阻止垃圾回收并消耗内存,即使不需要它们也是如此。
  • 耦合:全局变量和单例在代码的不同部分之间创建紧密耦合,使得测试、重用或修改它们变得困难。
  • 冲突:当代码的多个部分尝试同时访问或修改全局变量和单例时,它们可能会导致冲突和错误。

解决方案是使用依赖注入 (DI),这是一种允许您将依赖项(例如数据或服务)传递给小部件或类的技术,而不是直接访问它们。DI 使您的代码更加模块化、可测试和可维护。您可以使用 GetIt 或可注入之类的包在 Flutter 应用程序中实现 DI。

3. 忽略上下文

上下文是传递给 Flutter 中每个 widget 的参数。它包含有关小部件树的信息,例如父小部件、主题、媒体查询、导航器等。上下文对于访问这些信息以及在小部件树上执行各种操作非常有用。

然而,一些开发人员倾向于忽略上下文或在代码中滥用它。例如:

  • 传递错误的上下文:有时,您可能需要将一个小部件的上下文传递给另一个小部件或函数。但是,如果您传递了错误的上下文(例如子窗口小部件的上下文而不是父窗口小部件的上下文),则可能会得到意外的结果或错误。
  • 在 build() 之外使用上下文:上下文仅在小部件的 build() 方法内有效。如果尝试在 build() 之外使用它,例如在 initState() 或 dispose() 中,则可能会得到空值或异常。
  • 直接访问继承的小部件:继承的小部件是向小部件树中的后代提供数据的小部件。例如, Theme 、 MediaQuery 或 Provider 是继承的小部件。要访问它们,您需要使用 context.dependOnInheritedWidgetOfExactType<T>() ,其中 T 是继承的小部件的类型。但是,有些开发人员可能会尝试使用 context.widget 作为 T 直接访问它们,但不建议这样做,并且可能会导致错误。

解决方案是了解上下文在 Flutter 中的工作原理并在代码中正确使用它。您还可以使用 flutter_hooks 或 function_widget 等包来简化上下文的处理。

4. 使用过多的嵌套小部件

Flutter 基于小部件,小部件是 UI 的构建块。小部件可以组合在一起以创建复杂的布局和交互。然而,有时开发人员可能会过度使用嵌套小部件并创建非常深的小部件树。这可能会导致几个问题,例如:

  • 性能:拥有太多嵌套小部件会增加应用程序的渲染时间和内存使用量。
  • 可读性:拥有太多嵌套小部件可能会使您的代码难以阅读和理解。
  • 可维护性:拥有太多嵌套小部件可能会使您的代码难以修改或重构。

解决方案是使用更少的嵌套小部件并尽可能地扁平化您的小部件树。您可以通过以下方式执行此操作:

  • 提取小部件:您可以将小部件树的一部分提取到单独的小部件中,并在不同的地方重用它。这可以减少重复并提高代码的可读性和可维护性。
  • 使用自定义小部件:您可以创建自己的自定义小部件,封装特定功能或组件的逻辑和 UI。这可以降低小部件树的复杂性和深度,并使您的代码更加模块化和可重用。
  • 使用布局小部件:您可以使用布局小部件,例如 Row 、 Column 、 Flex 、 Wrap 等,以不同的方式排列您的小部件。这可以帮助您创建响应式和自适应布局,而无需使用太多嵌套小部件。

5. 不遵循最佳实践

Flutter 中最后但并非最不重要的最糟糕方法是不遵循 Flutter 团队和社区推荐的最佳实践。这些最佳实践不是强制性的,但它们可以帮助您编写更好的代码并避免 Flutter 中的常见错误和陷阱。一些最佳实践是:

  • 使用 const 构造函数:Const 构造函数允许您创建不可变且可以由 Flutter 缓存的 widget 常量实例。这可以提高应用程序的性能和内存效率。您应该尽可能使用 const 构造函数,特别是对于不依赖于任何状态或数据的小部件。
  • 使用键:键是帮助 Flutter 跟踪和更新 widget 树中的 widget 的标识符。当您需要在重建过程中保留小部件的状态或标识时(例如使用动画、列表或表单时),您应该使用键。
  • 使用 linting 和格式化工具:linting 和格式化工具可以帮助您检查和提高代码的质量、风格和一致性。您应该使用 dartfmt 、 dartanalyzer 或 pedantic 等工具根据 Dart 风格指南和有效的 Dart 规则来检查和格式化代码。
  • 使用测试工具:测试工具可以帮助您验证应用程序的功能、性能和可用性。您应该使用 flutter_test 、 flutter_driver 或integration_test 等工具为您的应用程序编写单元、小部件或集成测试。

这些是 Flutter 中一些最糟糕的方法,您在开发过程中应该避免。

链接: https://www.fly63.com/article/detial/12624


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK