当前位置: 首页 > 知识库问答 >
问题:

保持所有常数为Flutter的最佳实践是什么?[闭门]

夹谷野
2023-03-14

想要改进此问题?通过编辑此帖子,更新问题,以便可以用事实和引文来回答问题。

原始关闭原因未解决

在 Flutter 中创建常量类以保留所有应用程序常量以便于参考的最佳编程实践是什么?

我知道Dart中有< code>const关键字用于创建常量字段,但是可以将< code>static与< code>const一起使用吗,还是会在运行时产生内存问题。

class Constants {
  static const String SUCCESS_MESSAGE = "You will be contacted by us very soon.";
}

共有3个答案

翁凯定
2023-03-14

指https://dart.dev/guides/language/effective-dart/design

将常量和类似枚举的类型分组为一种很好的做法,如下所示:

自动导入在Android Studio中非常简单,您可以在其中键入类名Color,Android Studio将能够建议自动导入Color类。

赵朝
2023-03-14

编辑

现在,标志 --dart-define 已添加到 Flutter 的不同命令行中,以下答案不再适用。

相反,只要在任何你想要的地方声明常量,并可能引用其他答案。

虽然< code>static const没有任何技术问题,但在架构上,您可能希望采用不同的方式。

颤振往往没有任何全局/静态变量,并使用继承的小部件。

这意味着你可以写:

class MyConstants extends InheritedWidget {
  static MyConstants of(BuildContext context) => context. dependOnInheritedWidgetOfExactType<MyConstants>();

  const MyConstants({Widget child, Key key}): super(key: key, child: child);

  final String successMessage = 'Some message';

  @override
  bool updateShouldNotify(MyConstants oldWidget) => false;
}

然后插入到应用的根目录下:

void main() {
  runApp(
    MyConstants(
      child: MyApp(),
    ),
  );
}

并且这样使用:

@override
Widget build(BuilContext context) {
  return Text(MyConstants.of(context).successMessage);
}

这比静态const有更多的代码,但提供了许多优点:

    < li >与热重装一起使用 < li >易于测试和模仿 < li >可以替换为比常量更动态的内容,而无需重写整个应用程序。

但同时它:

  1. 不会消耗更多内存(继承的小部件通常只创建一次)
  2. 是performant(获得继承的widget是O(1))
谢豪
2023-03-14

我的首选解决方案是制作自己的Dart库。

创建一个名为constants.dart的新飞镖文件,并添加以下代码:

const String SUCCESS_MESSAGE=" You will be contacted by us very soon.";

编辑:99%的时候,您不需要在文件顶部使用Librarylibrary_name;这样的语句显式命名您的dart库,您可能不应该(参考)。
即使您省略了这一行,您的文件仍然是库!它只是隐式命名。

然后将以下import语句添加到任何需要访问常量的dart文件的顶部:

import 'constants.dart' as Constants;

请注意,如果constants.dart在不同的目录中,那么您需要在导入语句中指定constants.dart的路径。

编辑:指定库前缀时,使用< code > lower case _ with _ underlines 。

在这个例子中:

您可以使用相对路径:

import '../assets/constants.dart' as constants;

或来自lib目录的绝对路径:

import 'package:<your_app_name>/assets/constants.dart' as constants;

现在,您可以使用以下语法轻松访问常量:

String a = Constants.SUCCESS_MESSAGE;
 类似资料:
  • 最好的编程实践是什么 在flatter中创建一个常量类 保存所有应用程序常量以便于参考。我知道Dart中有关键字用于创建常量字段,但是是否可以将与const一起使用,或者在运行时会产生内存问题。

  • 问题内容: 我刚开始学习Go,并通读现有代码以学习“其他人的做法”。在这种情况下,遍历使用go“工作区”,尤其是与项目依赖关系有关的地方。 在处理各种Go项目时,使用一个或多个Go工作区(即$ GOPATH的定义)的常见(或存在)最佳实践是什么?我应该期望有一个类似于我所有项目的中央代码存储库的Go工作区,还是在我处理这些项目时都明确将其分解并设置$ GOPATH(有点像python) virtu

  • 问题内容: 我正在构建一个基于expressjs的应用程序,我想在其中记录所有事件。我可以找到温斯顿,这似乎很酷。无论如何,我正在寻找一种方法将其连接到我的expressjs应用程序。 我还想要在应用程序内部登录。我的要求不是那么简单,所以我想将所有内容记录在我的应用程序中(不仅是请求)。 我目前的情况: server.js (我想在此级别记录http请求) 路线/something.js con

  • 为什么未绑定版本限制是一个坏主意? 没有上界的版本约束,如 *,>=3.4 或者 dev-master,将允许更新依赖项的任何未来版本。这包括当前向后兼容性的主要版本。 一旦你的包的发布被标记,你就不能调整它的依赖性,以防依赖性破坏 BC- 你必须做一个新的发布,但是前一个版本会被打破。 唯一好的选择是定义约束的上限,在测试了包与依赖的新主版本兼容后,可以在新版本中增加。 例如,而不是使用 >=3

  • 问题内容: 我是Swift新手。我需要类似SwiftiOS项目中Python的BeautifulSoup之类的东西。准确地说,我需要将所有这些都以结尾。我应该采取什么步骤? 问题答案: 有几个不错的 HTML解析 库,它们使用,如下所示: hpple NDHpple Kanna( old Swift-HTML-Parser) Fuzi SwiftSoup Ji 看一下上面发布的四个库中的以下示例,

  • 我在中使用,我在测试的应用程序中有很多框架。 以下是我切换帧的代码: 与它的工作原理如下: 但是在firefox中,我需要添加