前言
項(xiàng)目數(shù)據(jù)轉(zhuǎn)模型采用FlutterJsonBeanFactory進(jìn)行處理,其中一個(gè)模型根據(jù)后臺(tái)返回的字段要處理文本中有[br] [wave]標(biāo)簽的內(nèi)容霸奕,如:
"[br][wave]閱讀是一種環(huán)境上的孤獨(dú)[/wave]溜宽。當(dāng)我們捧讀一本書,徜徉在字里行間時(shí)质帅,我們與文本對(duì)話适揉,與書中人物對(duì)話留攒,與作者對(duì)話,這時(shí)我們需要環(huán)境的清幽嘈雜的環(huán)境固然也能讀進(jìn)去嫉嘀,但很難走出來閱讀需要一個(gè)寧?kù)o溫馨的氛圍炼邀,一個(gè)無人打擾的“世外桃源”,[wave]曾記否剪侮,夜深人靜拭宁、細(xì)雨如絲的夜晚,我們坐在椅上瓣俯,品一杯香茗杰标,與書相擁,思緒在文字間游走彩匕,情感在文字間跌宕腔剂,這樣的夜晚是何等愜意!曾記否驼仪,在孤燈相伴的夜晚桶蝎,讀孔孟言、悟李杜詩(shī)谅畅、品劉墉文、賞清玄章噪服,積智慧之沙建文學(xué)之寶塔毡泻,感悟文學(xué)之純美,悟得人生之真諦的思路過程粘优![/wave][br][wave]"
根據(jù)后臺(tái)字段替換掉文本中[br]
標(biāo)簽轉(zhuǎn)為換行符號(hào)\n
標(biāo)簽[wave]
包裹的內(nèi)容轉(zhuǎn)為波浪線仇味,因多個(gè)地方
使用文本字段
,考慮的思路類似iOS
中監(jiān)聽Set
方法的時(shí)候使用自定義的字段進(jìn)行替換雹顺,下面是實(shí)現(xiàn)過程:
思路1:
在模型內(nèi)使用一個(gè)自定義的字段在轉(zhuǎn)模型的時(shí)候丹墨,進(jìn)行處理賦值
代碼:
模型類代碼,其中contentHandling
為自定義的字段嬉愧,接收處理后的文本
class ArticleLibraryModelData {
int? createTime = 0;
int? updateTime = 0;
int? id = 0;
String? title = '';
String? content = '';
//
String? contentHandling = "";
factory ArticleLibraryModelData.fromJson(Map<String, dynamic> json) => $ArticleLibraryModelDataFromJson(json);
Map<String, dynamic> toJson() => $ArticleLibraryModelDataToJson(this);
@override
String toString() {
return jsonEncode(this);
}
}
模型轉(zhuǎn)換方法內(nèi)處理
ArticleLibraryModelData $ArticleLibraryModelDataFromJson(
Map<String, dynamic> json) {
final ArticleLibraryModelData articleLibraryModelData = ArticleLibraryModelData();
if (content != null) {
articleLibraryModelData.content = content;
// 在此處進(jìn)行自定義的處理
articleLibraryModelData.contentHandling = content.replaceAll(RegExp(r'\[/?wave\]'), '').replaceAll('[br]', '\n');
}
}
結(jié)果:使用這種方式能夠?qū)崿F(xiàn)想要的效果贩挣,但因是自動(dòng)化生成的數(shù)據(jù)轉(zhuǎn)模型代碼,再次使用自動(dòng)化轉(zhuǎn)換没酣,自定義的處理會(huì)被覆蓋 方案無效
思路2:
在模型內(nèi)使用一個(gè)自定義的字段王财,重寫get方法,使用計(jì)算屬性并緩存替換后的結(jié)果
class ArticleLibraryModelData {
int? createTime = 0;
int? updateTime = 0;
int? id = 0;
String? title = '';
String? content = '';
String? _contentHandling;
String? get contentHandling {
_contentHandling ??= content?.replaceAll(RegExp(r'\[/?wave\]'), '').replaceAll('[br]', '\n');
return _contentHandling;
}
}