Man*_*ath 13 static const dart flutter
什么是最佳编程实践
在Flutter中创建一个常量类
保留所有应用程序常数以便于参考。我知道constDart中有一个用于创建常量字段的关键字,但是可以static与const一起使用,还是会在运行时创建内存问题。
class Constants {
static const String SUCCESS_MESSAGE=" You will be contacted by us very soon.";
}
Run Code Online (Sandbox Code Playgroud)
Rém*_*let 21
尽管方面没有技术问题static const,但从体系结构上来说,您可能希望采用其他方法。
Flutter往往没有任何全局/静态变量,而是使用InheritedWidget。
这意味着您可以编写:
class MyConstants extends InheritedWidget {
static MyConstants of(BuildContext context) => context.inheritFromWidgetOfExactType(MyConstants);
const MyConstants({Widget child, Key key}): super(key: key, child: child);
final String successMessage = 'Some message';
@override
bool updateShouldNotify() => false;
}
Run Code Online (Sandbox Code Playgroud)
然后插入到应用程序的根目录:
void main() {
runApp(
MyConstants(
child: MyApp(),
),
);
}
Run Code Online (Sandbox Code Playgroud)
并这样使用:
@override
Widget build(BuilContext context) {
return Text(MyConstants.of(context).successMessage);
}
Run Code Online (Sandbox Code Playgroud)
它比的代码多一点static const,但具有许多优点:
但同时:
Ani*_*udh 13
我首选的解决方案是制作自己的Dart库。
制作一个名为的新dart文件constants.dart,并添加以下代码:
library Constants;
const String SUCCESS_MESSAGE=" You will be contacted by us very soon.";
Run Code Online (Sandbox Code Playgroud)
然后将以下import语句添加到需要访问常量的任何dart文件的顶部:
import 'constants.dart' as Constants;
Run Code Online (Sandbox Code Playgroud)
现在,您可以使用以下语法轻松访问常量:
String a = Constants.SUCCESS_MESSAGE;
Run Code Online (Sandbox Code Playgroud)
Lee*_*ee3 10
我注意到这里的答案有些混乱,所以我想我会尝试澄清一些事情。
Dart/Flutter 指南建议不要创建只包含静态成员的类,即因为它不是必需的。某些语言(例如 Java 或 C#)不允许您在类之外定义函数、变量或常量,但 Dart 可以。因此,您可以简单地创建一个文件,例如constants.dart,其中包含您要定义的常量。
正如@Abhishek Jain 所指出的library,此方法不需要关键字。该library关键字用于将发布以供其他项目使用的库,尽管它可以与单个库一起使用part并part of跨多个文件分解单个库。但是,如果您需要它,那么您的需求可能超出了 OP 问题的范围。
正如@ChinLoong 所指出的,创建一个将相关常量和类枚举类型分组的类在技术上是可以接受的。然而,应该注意的是,这表明该指南是一个例外,因为它不是硬性规定。虽然这是可能的,但在 Dart 中,定义一个从未实例化的类是不受欢迎的。您会注意到,定义 Color 常量的 Dart Color 类有一个构造函数,它不包括整数值,允许实例化不是由常量定义的颜色。
总之,最符合 Dart 指南的方法是创建一个constants.dart文件或一个包含多个文件的常量文件夹(strings.dart、styles.dart等)。在constants.dart文件中,在顶层定义常量。
// constants.dart
const String SUCCESS_MESSAGE=" You will be contacted by us very soon.";
...
Run Code Online (Sandbox Code Playgroud)
然后,import该文件在需要使用常量的任何地方都可以通过常量的名称直接访问。
这完全取决于你。
使用静态没有缺点。
实际上const对于类中的字段是必需的。
对于所有常量,只需在 lib 文件夹或 lib/util 文件夹下创建 constants.dart 文件,然后将所有常量变量保存如下:
const SUCCESS_MESSAGE=" You will be contacted by us very soon.";
// Api related
const apiBaseURL = "https://baseurl.com";
const userLoginApi = "login";
const userSignupApi = "signup";
// Shared Preference keys
const kDeviceName = "device_name";
const kDeviceUDID = "device_id";
// Asset Constants
const navBarLogoImage = "assets/images/home_images/sample.png
Run Code Online (Sandbox Code Playgroud)
然后在需要的类中导入constants.dart文件,直接使用。
参考https://dart.dev/guides/language/effective-dart/design
在如下所示的类中对常量和类枚举类型进行分组是一个很好的做法:
与投票最多的答案相比,它的一个小优势是在 Android Studio 中,您可以在代码中键入类名Color,Android Studio 将能够建议自动导入Color类。这对于投票最多的答案是不可能的。
| 归档时间: |
|
| 查看次数: |
5178 次 |
| 最近记录: |