【发布时间】:2020-11-20 18:05:52
【问题描述】:
我需要创建一个名为 GeneralAppAndDeviceDetails 的类,其中包含以下字段:
import 'package:flutter/material.dart';
class GeneralAppAndDeviceDetails {
final bool isDarkModeEnabled;
final double deviceWidth;
final double deviceHeight;
final Color primaryColor;
final Color secondaryColor;
}
它基本上在程序开始时存储通用设备和应用程序信息,因此我无需在我想访问这些详细信息时创建Theme 或MediaQuery 类的新实例。
我面临的问题是如何编写此类,以便在分配字段的值后,它们将不可修改? (这样就不会改变字段值)
(我尝试创建一个单例类,但我需要将值传递给构造函数,并且通过使用工厂和私有构造函数,用户可以创建具有传递给工厂的不同参数的新类。)
我需要的是静态字段可以接收一次值,然后变得不可修改。我怎样才能实现类似的目标?
谢谢
更新:
我写的类如下:
import 'package:flutter/material.dart';
class GeneralAppAndDeviceDetails {
final bool isDarkModeEnabled;
final double deviceWidth;
final double deviceHeight;
final Color primaryColor;
final Color secondaryColor;
static bool _isAlreadyCreated = false;
static GeneralAppAndDeviceDetails _instance;
factory GeneralAppAndDeviceDetails(bool isDarkModeEnabled, double deviceWidth,
double deviceHeight, Color primaryColor, Color secondaryColor) {
if (_isAlreadyCreated == false) {
_isAlreadyCreated = true;
_instance = GeneralAppAndDeviceDetails._(isDarkModeEnabled, deviceWidth,
deviceHeight, primaryColor, secondaryColor);
}
return _instance;
}
const GeneralAppAndDeviceDetails._(this.isDarkModeEnabled, this.deviceWidth,
this.deviceHeight, this.primaryColor, this.secondaryColor);
}
我使用一个标志来检查之前是否在此处创建了一个实例,并且使用此代码,每次都会返回一个类似的实例,但这是实现此目的的最佳方法吗?
【问题讨论】:
-
您能否准确指定哪些内容不可修改以及何时不可修改。是否应该使用可能不同的值构造类的每个实例,但在构造后字段值不应更改->具有最终字段值的构造函数。应该只有这个类的1个实例->单例。分配字段时是否存在不同的时间点,但它们应该是最终的->我想您需要布尔值来跟踪各个字段或类似的解决方案。
-
我需要访问整个应用程序中的字段数据,因此我决定创建一个类,而不是创建全局变量。这些字段值在收到值后不应更改(例如,因为 deviceWidth 无法更改)。出于这个原因,我需要使类字段不可修改。我不想在整个应用程序中创建不同的实例,所以我需要像单例这样的东西,而接受的答案正是我所需要的