266 lines
7.7 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'dart:async';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:star_lock/login/login/entity/LoginEntity.dart';
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesSMSTemplate/valueAddedServicesAddSMSTemplate/newSMSTemplate_entity.dart';
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesSMSTemplate/valueAddedServicesAddSMSTemplate/newSMSTemplate_state.dart';
import 'package:star_lock/tools/regularExpression.dart';
import '../../../../network/api_repository.dart';
import '../../../../tools/baseGetXController.dart';
class NewSMSTemplateLogic extends BaseGetXController {
NewSMSTemplateState state = NewSMSTemplateState();
//获取默认模板-- 1:电子钥匙 2:密码
Future<void> getDefaultTemplate() async {
final NewSMSTemplateEntity entity =
await ApiRepository.to.getDefaultTemplate();
if (entity.errorCode!.codeIsSuccessful) {
state.langTemplateList.value = entity.dataList ?? <LangData>[];
state.templateList.value =
entity.dataList![state.selectedLangIndex.value].templates ??
<TemplateData>[];
if (state.templateList.isNotEmpty) {
state.currentTemplate.value = state.templateList.firstWhere(
(TemplateData element) =>
element.name ==
state.templateList[state.selectedTemplateIndex.value].name,
);
state.currentTemplate.refresh();
}
}
}
//新建模板-- 1:电子钥匙 2:密码
Future<void> addSMSTemplate() async {
if (state.templateNameTf.text.isEmpty) {
showToast('请输入模板名称');
return;
}
final LoginEntity entity = await ApiRepository.to.addTemplateService(
channelType: state.channelType.value,
name: state.templateNameTf.text,
langType: state.currentTemplate.value.langType ?? 0,
regards: state.templateOneTf.text,
tips: state.templateTwoTf.text,
templateType: state.currentTemplate.value.templateType ?? 0,
);
if (entity.errorCode!.codeIsSuccessful) {
showToast('添加成功'.tr);
Get.back(result: true);
}
}
Future<void> updateTemplateInfo() async {
final LoginEntity entity = await ApiRepository.to.updateTemplateInfo(
id: state.currentTemplate.value.id ?? 0,
name: state.templateNameTf.text,
regards: state.templateOneTf.text,
tips: state.templateTwoTf.text);
if (entity.errorCode!.codeIsSuccessful) {
showToast('修改成功'.tr);
Get.back(result: true);
}
}
// 更新短信条数的函数
int calculateSmsCost() {
final String smsText =
'${state.templateOneTf.text}\n${state.currentTemplate.value.template}\n${state.templateTwoTf.text}';
final int smsCount = smsText.length;
if (smsCount <= 70) {
return 1;
} else {
return (smsCount / 67).ceil();
}
}
//构建电子钥匙模板
List<TextSpan> buildElectronicKeySpan({required bool isPreview}) {
final List<TextSpan> textSpans = <TextSpan>[];
// 如果是预览模式,添加预览模板的文本
if (isPreview) {
textSpans.add(
TextSpan(
text: '${state.templateOneTf.text}\n',
style: state.defaultStyle,
),
);
}
if (isPreview) {
if (state.currentTemplate.value.generatePreview().isNotEmpty) {
textSpans.add(
TextSpan(
text: state.currentTemplate.value.generatePreview(),
style: state.defaultStyle,
),
);
} else {
textSpans.addAll(_buildDefaultTemplate(isPreview));
}
} else {
textSpans.addAll(_buildDefaultTemplate(isPreview));
}
if (isPreview) {
textSpans.add(
TextSpan(
text: '\n${state.templateTwoTf.text}\n',
style: state.defaultStyle,
),
);
}
return textSpans;
}
List<TextSpan> _buildDefaultTemplate(bool isPreview) {
final List<TextSpan> textSpans = <TextSpan>[];
// 将模板分割为文本片段
final List<String> textFragments = state.currentTemplate.value.template
?.split(RegularExpression.urlRegExp) ??
<String>[];
// 添加链接文本和普通文本到文本片段列表
for (int i = 0; i < textFragments.length; i++) {
final String textFragment = textFragments[i];
// 添加普通文本
textSpans.add(
TextSpan(
text: textFragment,
style: state.defaultStyle,
),
);
// 如果不是最后一个文本片段,则添加换行符
if (i < textFragments.length - 1) {
textSpans.add(
TextSpan(
text: '\n',
style: state.defaultStyle,
),
);
// 添加链接文本
textSpans.add(
TextSpan(
text: RegularExpression.urlRegExp
.stringMatch(state.currentTemplate.value.template!) ??
'',
style: state.highStyle,
),
);
}
}
return textSpans;
}
List<TextSpan> buildPasswordSpan({required bool isPreview}) {
final List<TextSpan> textSpans = <TextSpan>[];
// 如果是预览模式,添加预览模板的文本
if (isPreview) {
textSpans.add(
TextSpan(
text: '${state.templateOneTf.text}\n',
style: state.defaultStyle,
),
);
}
if (isPreview) {
if (state.currentTemplate.value.generatePreview().isNotEmpty) {
textSpans.add(
TextSpan(
text: state.currentTemplate.value.generatePreview(),
style: state.defaultStyle,
),
);
// 在预览模式下,添加预览模板的文本
if (isPreview) {
textSpans.add(
TextSpan(
text: '\n${state.templateTwoTf.text}',
style: state.defaultStyle,
),
);
}
}
return textSpans;
}
// 定义匹配 ${} 包围的变量的正则表达式
final RegExp variableRegExp = RegExp(r'\$\{([^}]+)\}');
final String template = state.currentTemplate.value.template ?? '';
// 对模板进行处理
int startIndex = 0;
for (final Match match in variableRegExp.allMatches(template)) {
// 处理变量之前的文本
final String nonVariableText =
template.substring(startIndex, match.start);
// 替换非变量文本中的字符
final String replacedNonVariableText =
nonVariableText.replaceAllMapped(RegExp(r'|。'), (Match match) {
return '${match.group(0)}\n';
});
textSpans.add(
TextSpan(
text: replacedNonVariableText,
style: state.defaultStyle,
),
);
// 处理变量
final String variableText = match.group(0) ?? '';
textSpans.add(
TextSpan(
text: variableText,
style: state.highStyle,
),
);
// 更新起始索引
startIndex = match.end;
}
// 添加最后一个变量之后的文本
final String remainingText = template.substring(startIndex);
// 替换非变量文本中的字符
final String replacedRemainingText =
remainingText.replaceAllMapped(RegExp(r'|。'), (Match match) {
return '${match.group(0)}\n';
});
textSpans.add(
TextSpan(
text: replacedRemainingText,
style: state.defaultStyle,
),
);
// 在预览模式下,添加预览模板的文本
if (isPreview) {
textSpans.add(
TextSpan(
text: '\n${state.templateTwoTf.text}',
style: state.defaultStyle,
),
);
}
return textSpans;
}
@override
Future<void> onReady() async {
super.onReady();
// if (state.currentTemplate.value.isUpdate == false) {
getDefaultTemplate();
// }
}
}