Flutter 如何创建不可修改的类颤振
我需要创建一个名为Flutter 如何创建不可修改的类颤振,flutter,oop,object,dart,Flutter,Oop,Object,Dart,我需要创建一个名为GeneralAppAndDeviceDetails的类,该类具有以下字段: import 'package:flutter/material.dart'; class GeneralAppAndDeviceDetails { final bool isDarkModeEnabled; final double deviceWidth; final double deviceHeight; final Color primaryColor; final C
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);
}
我使用一个标志来检查是否在此之前创建了一个实例,使用此代码,每次都会返回一个类似的实例,但这是实现这一点的最佳方法吗?您可以将类设置为singleton,然后将这些字段设置为private,只能通过getter和setter访问,在setter内部,如果已经有一些值分配给该字段,则可以检查并丢弃新值。可以将该类设置为singleton,然后将这些字段设置为private,只能通过getter和setter访问,在setter中,如果已经有一些值分配给字段,您可以检查并放弃新值。这是您的singleton类
class Test{
final String str;
static Test _singleton;
Test._internal({this.str});
factory Test(String str) {
return _singleton ??= Test._internal(
str: str
);
}
}
供您尝试和测试的示例代码
void main() {
Test obj = Test('ABC');
print(obj.str);
Test obj1 = Test('XYZ');
print(obj1.str);
}
class Test{
final String str;
static Test _singleton;
Test._internal({this.str});
factory Test(String str) {
return _singleton ??= Test._internal(
str: str
);
}
}
试着运行这个以便更好地理解这是你的单例类
class Test{
final String str;
static Test _singleton;
Test._internal({this.str});
factory Test(String str) {
return _singleton ??= Test._internal(
str: str
);
}
}
供您尝试和测试的示例代码
void main() {
Test obj = Test('ABC');
print(obj.str);
Test obj1 = Test('XYZ');
print(obj1.str);
}
class Test{
final String str;
static Test _singleton;
Test._internal({this.str});
factory Test(String str) {
return _singleton ??= Test._internal(
str: str
);
}
}
试着运行这个以更好地理解我更新了这个问题。请让我知道您的想法。看起来不错,一旦创建,它将始终返回相同的实例,并且值只能在我第一次更新问题时修改。请让我知道您的想法。看起来不错,一旦创建,它将始终返回同一个实例,并且值只能在第一次修改。您可以准确指定什么应该是不可修改的以及何时修改。类的每个实例是否应该使用可能不同的值构造,但字段值不应该在构造->构造函数和最终字段值之后更改。这个类应该只有一个实例->单例。当字段被分配时,是否有不同的时间点,但它们应该是最终的->我想你需要布尔函数来跟踪单个字段或类似的解决方案。我需要在整个应用程序中访问字段数据,所以我决定创建一个类,而不是创建全局变量。这些字段值在收到值后不应更改(例如deviceWidth无法更改)。因此,我需要使类字段不可修改。我不想在整个应用程序中创建不同的实例,所以我需要像singleton这样的东西,而接受的答案正是我所需要的。你可以确切地指定什么是不可修改的,什么时候可以。类的每个实例是否应该使用可能不同的值构造,但字段值不应该在构造->构造函数和最终字段值之后更改。这个类应该只有一个实例->单例。当字段被分配时,是否有不同的时间点,但它们应该是最终的->我想你需要布尔函数来跟踪单个字段或类似的解决方案。我需要在整个应用程序中访问字段数据,所以我决定创建一个类,而不是创建全局变量。这些字段值在收到值后不应更改(例如deviceWidth无法更改)。因此,我需要使类字段不可修改。我不想在整个应用程序中创建不同的实例,所以我需要像singleton这样的东西,而接受的答案正是我需要的