You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
fluffychat/lib/pangea/learning_settings/models/language_model.dart

84 lines
2.3 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:fluffychat/pangea/learning_settings/constants/language_constants.dart';
import 'package:fluffychat/pangea/learning_settings/enums/l2_support_enum.dart';
class LanguageModel {
final String langCode;
final String displayName;
final L2SupportEnum l2Support;
LanguageModel({
required this.langCode,
required this.displayName,
this.l2Support = L2SupportEnum.na,
});
factory LanguageModel.fromJson(json) {
final String code = json['language_code'] ??
codeFromNameOrCode(
json['language_name'],
json['language_flag'],
);
return LanguageModel(
langCode: code,
displayName: json['language_name'],
l2Support: json['l2_support'] != null
? L2SupportEnum.na.fromStorageString(json['l2_support'])
: L2SupportEnum.na,
);
}
toJson() => {
'language_code': langCode,
'language_name': displayName,
'l2_support': l2Support.storageString,
};
bool get l2 => l2Support != L2SupportEnum.na;
// Discuss with Jordan - adding langCode field to language objects as separate from displayName
static String codeFromNameOrCode(String codeOrName, [String? url]) {
if (codeOrName.isEmpty) return LanguageKeys.unknownLanguage;
if (codeOrName == LanguageKeys.unknownLanguage) return codeOrName;
if (url == null) return LanguageKeys.unknownLanguage;
final List<String> split = url.split('/');
return split.last.split('.').first;
}
//PTODO - add flag for unknown
static LanguageModel get unknown => LanguageModel(
langCode: LanguageKeys.unknownLanguage,
displayName: "Unknown",
);
static LanguageModel multiLingual([BuildContext? context]) => LanguageModel(
displayName: context != null
? L10n.of(context).multiLingualSpace
: "Multilingual Space",
langCode: LanguageKeys.multiLanguage,
);
String? getDisplayName(BuildContext context) {
return displayName;
}
String get langCodeShort => langCode.split('-').first;
@override
bool operator ==(Object other) {
if (other is LanguageModel) {
return langCode == other.langCode;
}
return false;
}
@override
int get hashCode => langCode.hashCode;
}