在我的项目中,我试图同时使用基于Json的反序列化和基于flatBuffer的反序列化。
例如,可以使用ModelInfo
包将来自后端api的跟随Json的序列反序列化为名为freezed
的类。假设此类在freezed_model.dart
{
"model_name":"Model A","model_size": 50
}
现在从同一后端,我想使用平面缓冲区序列化将此信息作为字节数组发送。使用flatc
,我可以生成将其反序列化为具有相同名称ModelInfo
且具有相同信息的另一个类的代码。假设此类在flatbuffer_model.dart
我想在Flutter项目中的UI层,管理器或api层中使用这些类,而不会与imports
产生冲突。例如,如果我的窗口小部件使用ModelInfo
类,则我希望它在freezed_model.dart
或flatbuffer_model.dart
的编译和运行期间被动态解析。也许这是不可能的,但我相信提出要求不会有伤害。
我尝试了有条件的进口和有条件的出口,但飞镖分析仪对此并不满意,我确信我的方法是错误的。
例如我定义了一个名为environment.dart
的类,如下所示。
import 'package:scandal_view/src/config_reader.dart';
enum Environment { PROD,DEV }
class CurrentEnvironment {
static Environment _environment;
/// assigning a default _decodeMode thinking dart analyser be able to resolve classes during
///conditional export or import.
static String _decodeMode = 'flatbuffers';
static void initialize(Environment environment) {
_environment = environment;
// reassigns the _decomeMode during runTime.
_decodeMode = ConfigReader.getDecodemode();
}
static Environment get environment => _environment;
static String get decodeMode => _decodeMode;
}
此后,在我的api类中,我尝试执行以下条件导入,但不起作用。
import 'dummy_model.dart'
if(CurrentEnvironment.decodeMode == 'json')
'package:mypackage/lib/model/json/freezed_model.dart'
if(CurrentEnvironment.decodeMode == 'flatbuffer')
'package:mypackage/lib/model/flatbuffers/flatbuffer_model.dart'
到目前为止,我的dummy_model.dart
为空。之前,我用它来导出上述相同的文件,但没有帮助。我正在考虑为此使用外观模式,但这会导致过多的手写代码,并且在自动生成反序列化器且安全的情况下容易出错。