1,消息提醒模块新增需联网提示语
2,新增高级功能购买记录接口对接 3,已开通高级功能逻辑处理与优化 4,新增已开通高级功能的购买记录接口对接与布局
This commit is contained in:
parent
606cbc76c7
commit
9873536b6e
@ -807,5 +807,6 @@
|
|||||||
"已开通":"Have opened",
|
"已开通":"Have opened",
|
||||||
"该功能是高级功能,请开通后再使用":"This function is an advanced function. Please enable it before using it",
|
"该功能是高级功能,请开通后再使用":"This function is an advanced function. Please enable it before using it",
|
||||||
"常用程序":"Common Programs",
|
"常用程序":"Common Programs",
|
||||||
"该锁已被重置":"The lock has been reset"
|
"该锁已被重置":"The lock has been reset",
|
||||||
|
"记录":"Record"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -806,5 +806,6 @@
|
|||||||
"已开通":"已开通",
|
"已开通":"已开通",
|
||||||
"该功能是高级功能,请开通后再使用":"该功能是高级功能,请开通后再使用",
|
"该功能是高级功能,请开通后再使用":"该功能是高级功能,请开通后再使用",
|
||||||
"常用程序":"常用程序",
|
"常用程序":"常用程序",
|
||||||
"该锁已被重置":"该锁已被重置"
|
"该锁已被重置":"该锁已被重置",
|
||||||
|
"记录":"记录"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -809,5 +809,6 @@
|
|||||||
"已开通":"已开通",
|
"已开通":"已开通",
|
||||||
"该功能是高级功能,请开通后再使用":"该功能是高级功能,请开通后再使用",
|
"该功能是高级功能,请开通后再使用":"该功能是高级功能,请开通后再使用",
|
||||||
"常用程序":"常用程序",
|
"常用程序":"常用程序",
|
||||||
"该锁已被重置":"该锁已被重置"
|
"该锁已被重置":"该锁已被重置",
|
||||||
|
"记录":"记录"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -53,6 +53,7 @@ import 'package:star_lock/mine/mineSet/transferSmartLock/recipientInformation/re
|
|||||||
import 'package:star_lock/mine/mineSet/transferSmartLock/selectBranch/selectBranch_page.dart';
|
import 'package:star_lock/mine/mineSet/transferSmartLock/selectBranch/selectBranch_page.dart';
|
||||||
import 'package:star_lock/mine/mineSet/transferSmartLock/transferSmartLockList/transferSmartLock_page.dart';
|
import 'package:star_lock/mine/mineSet/transferSmartLock/transferSmartLockList/transferSmartLock_page.dart';
|
||||||
import 'package:star_lock/mine/valueAddedServices/advancedFeaturesWeb/advancedFeaturesWeb_page.dart';
|
import 'package:star_lock/mine/valueAddedServices/advancedFeaturesWeb/advancedFeaturesWeb_page.dart';
|
||||||
|
import 'package:star_lock/mine/valueAddedServices/advancedFunctionRecord/advancedFunctionRecord_page.dart';
|
||||||
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesRecord/value_added_services_record_page.dart';
|
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesRecord/value_added_services_record_page.dart';
|
||||||
|
|
||||||
import 'common/safetyVerification/safetyVerification_page.dart';
|
import 'common/safetyVerification/safetyVerification_page.dart';
|
||||||
@ -447,6 +448,8 @@ abstract class Routers {
|
|||||||
static const seletKeyCyclicDatePage =
|
static const seletKeyCyclicDatePage =
|
||||||
'/SeletKeyCyclicDatePage'; // 电子钥匙、授权管理员、卡、指纹、遥控等添加添加循环日期公共界面
|
'/SeletKeyCyclicDatePage'; // 电子钥匙、授权管理员、卡、指纹、遥控等添加添加循环日期公共界面
|
||||||
static const advancedFeaturesWebPage = '/advancedFeaturesWebPage'; // 高级功能
|
static const advancedFeaturesWebPage = '/advancedFeaturesWebPage'; // 高级功能
|
||||||
|
static const advancedFunctionRecordPage =
|
||||||
|
'/advancedFunctionRecordPage'; //高级功能购买记录
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class AppRouters {
|
abstract class AppRouters {
|
||||||
@ -1068,6 +1071,9 @@ abstract class AppRouters {
|
|||||||
GetPage(name: Routers.addPalmPage, page: (() => const AddPalmPage())),
|
GetPage(name: Routers.addPalmPage, page: (() => const AddPalmPage())),
|
||||||
GetPage(
|
GetPage(
|
||||||
name: Routers.advancedFeaturesWebPage,
|
name: Routers.advancedFeaturesWebPage,
|
||||||
page: (() => AdvancedFeaturesWebPage()))
|
page: (() => AdvancedFeaturesWebPage())),
|
||||||
|
GetPage(
|
||||||
|
name: Routers.advancedFunctionRecordPage,
|
||||||
|
page: (() => const AdvancedFunctionRecordPage())),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@ -152,6 +152,10 @@ class _MsgNotificationPageState extends State<MsgNotificationPage> {
|
|||||||
SizedBox(width: 60.w, height: 50.h, child: _switch(4)))),
|
SizedBox(width: 60.w, height: 50.h, child: _switch(4)))),
|
||||||
SizedBox(
|
SizedBox(
|
||||||
height: 60.h,
|
height: 60.h,
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
'此模块功能需要锁联网后设置方可生效',
|
||||||
|
style: TextStyle(fontSize: 20.sp),
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|||||||
@ -0,0 +1,128 @@
|
|||||||
|
class AdvancedFunctionRecordEntity {
|
||||||
|
int? errorCode;
|
||||||
|
String? description;
|
||||||
|
String? errorMsg;
|
||||||
|
Data? data;
|
||||||
|
|
||||||
|
AdvancedFunctionRecordEntity(
|
||||||
|
{this.errorCode, this.description, this.errorMsg, this.data});
|
||||||
|
|
||||||
|
AdvancedFunctionRecordEntity.fromJson(Map<String, dynamic> json) {
|
||||||
|
errorCode = json['errorCode'];
|
||||||
|
description = json['description'];
|
||||||
|
errorMsg = json['errorMsg'];
|
||||||
|
data = json['data'] != null ? Data.fromJson(json['data']) : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = <String, dynamic>{};
|
||||||
|
data['errorCode'] = errorCode;
|
||||||
|
data['description'] = description;
|
||||||
|
data['errorMsg'] = errorMsg;
|
||||||
|
if (this.data != null) {
|
||||||
|
data['data'] = this.data!.toJson();
|
||||||
|
}
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Data {
|
||||||
|
int? pageNo;
|
||||||
|
int? pageSize;
|
||||||
|
int? total;
|
||||||
|
List<RecordItem>? recordList;
|
||||||
|
|
||||||
|
Data({this.pageNo, this.pageSize, this.total, this.recordList});
|
||||||
|
|
||||||
|
Data.fromJson(Map<String, dynamic> json) {
|
||||||
|
pageNo = json['pageNo'];
|
||||||
|
pageSize = json['pageSize'];
|
||||||
|
total = json['total'];
|
||||||
|
if (json['list'] != null) {
|
||||||
|
recordList = <RecordItem>[];
|
||||||
|
json['list'].forEach((v) {
|
||||||
|
recordList!.add(RecordItem.fromJson(v));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = <String, dynamic>{};
|
||||||
|
data['pageNo'] = pageNo;
|
||||||
|
data['pageSize'] = pageSize;
|
||||||
|
data['total'] = total;
|
||||||
|
if (recordList != null) {
|
||||||
|
data['list'] = recordList!.map((v) => v.toJson()).toList();
|
||||||
|
}
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class RecordItem {
|
||||||
|
int? id;
|
||||||
|
int? userId;
|
||||||
|
String? orderNumber;
|
||||||
|
String? type;
|
||||||
|
int? recordType;
|
||||||
|
int? smsCount;
|
||||||
|
int? emailCount;
|
||||||
|
int? cloudauthCount;
|
||||||
|
int? vipLockCount;
|
||||||
|
int? vipYear;
|
||||||
|
int? isApply;
|
||||||
|
String? money;
|
||||||
|
String? createdAt;
|
||||||
|
String? updatedAt;
|
||||||
|
|
||||||
|
RecordItem(
|
||||||
|
{this.id,
|
||||||
|
this.userId,
|
||||||
|
this.orderNumber,
|
||||||
|
this.type,
|
||||||
|
this.recordType,
|
||||||
|
this.smsCount,
|
||||||
|
this.emailCount,
|
||||||
|
this.cloudauthCount,
|
||||||
|
this.vipLockCount,
|
||||||
|
this.vipYear,
|
||||||
|
this.isApply,
|
||||||
|
this.money,
|
||||||
|
this.createdAt,
|
||||||
|
this.updatedAt});
|
||||||
|
|
||||||
|
RecordItem.fromJson(Map<String, dynamic> json) {
|
||||||
|
id = json['id'];
|
||||||
|
userId = json['user_id'];
|
||||||
|
orderNumber = json['order_number'];
|
||||||
|
type = json['type'];
|
||||||
|
recordType = json['record_type'];
|
||||||
|
smsCount = json['sms_count'];
|
||||||
|
emailCount = json['email_count'];
|
||||||
|
cloudauthCount = json['cloudauth_count'];
|
||||||
|
vipLockCount = json['vip_lock_count'];
|
||||||
|
vipYear = json['vip_year'];
|
||||||
|
isApply = json['is_apply'];
|
||||||
|
money = json['money'];
|
||||||
|
createdAt = json['created_at'];
|
||||||
|
updatedAt = json['updated_at'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = <String, dynamic>{};
|
||||||
|
data['id'] = id;
|
||||||
|
data['user_id'] = userId;
|
||||||
|
data['order_number'] = orderNumber;
|
||||||
|
data['type'] = type;
|
||||||
|
data['record_type'] = recordType;
|
||||||
|
data['sms_count'] = smsCount;
|
||||||
|
data['email_count'] = emailCount;
|
||||||
|
data['cloudauth_count'] = cloudauthCount;
|
||||||
|
data['vip_lock_count'] = vipLockCount;
|
||||||
|
data['vip_year'] = vipYear;
|
||||||
|
data['is_apply'] = isApply;
|
||||||
|
data['money'] = money;
|
||||||
|
data['created_at'] = createdAt;
|
||||||
|
data['updated_at'] = updatedAt;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,20 @@
|
|||||||
|
import 'dart:async';
|
||||||
|
|
||||||
|
import 'package:star_lock/mine/valueAddedServices/advancedFunctionRecord/advancedFunctionRecord_state.dart';
|
||||||
|
|
||||||
|
import '../../../../network/api_repository.dart';
|
||||||
|
import '../../../../tools/baseGetXController.dart';
|
||||||
|
|
||||||
|
class AdvancedFunctionRecordLogic extends BaseGetXController {
|
||||||
|
AdvancedFunctionRecordState state = AdvancedFunctionRecordState();
|
||||||
|
|
||||||
|
//获取购买记录列表
|
||||||
|
Future<void> getBuyRecordList() async {
|
||||||
|
var entity = await ApiRepository.to.advancedFunctionBuyRecordList(
|
||||||
|
type: 'vip', pageNo: 1, recordType: 10, pageSize: 10);
|
||||||
|
if (entity.errorCode!.codeIsSuccessful) {
|
||||||
|
state.buyRecordList.value = entity.data!.recordList!;
|
||||||
|
state.buyRecordList.refresh();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,97 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||||
|
import 'package:get/get.dart';
|
||||||
|
import 'package:star_lock/app_settings/app_colors.dart';
|
||||||
|
import 'package:star_lock/mine/valueAddedServices/advancedFunctionRecord/advancedFunctionRecord_entity.dart';
|
||||||
|
import 'package:star_lock/mine/valueAddedServices/advancedFunctionRecord/advancedFunctionRecord_logic.dart';
|
||||||
|
import 'package:star_lock/tools/noData.dart';
|
||||||
|
|
||||||
|
import '../../../tools/titleAppBar.dart';
|
||||||
|
|
||||||
|
class AdvancedFunctionRecordPage extends StatefulWidget {
|
||||||
|
const AdvancedFunctionRecordPage({Key? key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<AdvancedFunctionRecordPage> createState() =>
|
||||||
|
_AdvancedFunctionRecordPageState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _AdvancedFunctionRecordPageState
|
||||||
|
extends State<AdvancedFunctionRecordPage> {
|
||||||
|
final logic = Get.put(AdvancedFunctionRecordLogic());
|
||||||
|
final state = Get.find<AdvancedFunctionRecordLogic>().state;
|
||||||
|
|
||||||
|
@override
|
||||||
|
initState() {
|
||||||
|
super.initState();
|
||||||
|
|
||||||
|
logic.getBuyRecordList();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Scaffold(
|
||||||
|
backgroundColor: Colors.white,
|
||||||
|
appBar: TitleAppBar(
|
||||||
|
barTitle: "记录".tr,
|
||||||
|
haveBack: true,
|
||||||
|
iconColor: Colors.black,
|
||||||
|
titleColor: Colors.black,
|
||||||
|
backgroundColor: Colors.white),
|
||||||
|
body: Container(
|
||||||
|
color: AppColors.mainBackgroundColor,
|
||||||
|
child: Obx(() => state.buyRecordList.isEmpty
|
||||||
|
? NoData()
|
||||||
|
: ListView.builder(
|
||||||
|
itemCount: state.buyRecordList.length,
|
||||||
|
itemBuilder: (context, index) {
|
||||||
|
return _recordKeyItem(state.buyRecordList[index]);
|
||||||
|
},
|
||||||
|
)),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget _recordKeyItem(RecordItem itemData) {
|
||||||
|
return Container(
|
||||||
|
color: Colors.white,
|
||||||
|
margin: EdgeInsets.only(left: 20.w, right: 20.w, top: 10.h),
|
||||||
|
padding:
|
||||||
|
EdgeInsets.only(left: 20.w, right: 20.w, top: 16.h, bottom: 16.h),
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
itemData.createdAt!.length > 10
|
||||||
|
? itemData.createdAt!.substring(0, 10)
|
||||||
|
: itemData.createdAt!,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 24.sp,
|
||||||
|
color: AppColors.blackColor,
|
||||||
|
fontWeight: FontWeight.bold),
|
||||||
|
),
|
||||||
|
Expanded(child: Container()),
|
||||||
|
Text('¥${itemData.money}',
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 24.sp,
|
||||||
|
color: AppColors.blackColor,
|
||||||
|
fontWeight: FontWeight.bold)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 8.h,
|
||||||
|
),
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Text('${itemData.vipLockCount}把锁/${itemData.vipYear}年',
|
||||||
|
textAlign: TextAlign.left,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 22.sp, color: AppColors.darkGrayTextColor))
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,6 @@
|
|||||||
|
import 'package:get/get.dart';
|
||||||
|
import 'package:star_lock/mine/valueAddedServices/advancedFunctionRecord/advancedFunctionRecord_entity.dart';
|
||||||
|
|
||||||
|
class AdvancedFunctionRecordState {
|
||||||
|
var buyRecordList = <RecordItem>[].obs;
|
||||||
|
}
|
||||||
@ -0,0 +1,64 @@
|
|||||||
|
class ValueAddedServicesHighFunctionEntity {
|
||||||
|
int? errorCode;
|
||||||
|
String? description;
|
||||||
|
String? errorMsg;
|
||||||
|
Data? data;
|
||||||
|
|
||||||
|
ValueAddedServicesHighFunctionEntity(
|
||||||
|
{this.errorCode, this.description, this.errorMsg, this.data});
|
||||||
|
|
||||||
|
ValueAddedServicesHighFunctionEntity.fromJson(Map<String, dynamic> json) {
|
||||||
|
errorCode = json['errorCode'];
|
||||||
|
description = json['description'];
|
||||||
|
errorMsg = json['errorMsg'];
|
||||||
|
data = json['data'] != null ? Data.fromJson(json['data']) : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = <String, dynamic>{};
|
||||||
|
data['errorCode'] = errorCode;
|
||||||
|
data['description'] = description;
|
||||||
|
data['errorMsg'] = errorMsg;
|
||||||
|
if (this.data != null) {
|
||||||
|
data['data'] = this.data!.toJson();
|
||||||
|
}
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Data {
|
||||||
|
int? emailCount;
|
||||||
|
int? smsCount;
|
||||||
|
int? cloudauthCount;
|
||||||
|
int? vipStatus;
|
||||||
|
int? vipLockCount;
|
||||||
|
String? vipExpireAt;
|
||||||
|
|
||||||
|
Data(
|
||||||
|
{this.emailCount,
|
||||||
|
this.smsCount,
|
||||||
|
this.cloudauthCount,
|
||||||
|
this.vipStatus,
|
||||||
|
this.vipLockCount,
|
||||||
|
this.vipExpireAt});
|
||||||
|
|
||||||
|
Data.fromJson(Map<String, dynamic> json) {
|
||||||
|
emailCount = json['email_count'];
|
||||||
|
smsCount = json['sms_count'];
|
||||||
|
cloudauthCount = json['cloudauth_count'];
|
||||||
|
vipStatus = json['vip_status'];
|
||||||
|
vipLockCount = json['vip_lock_count'];
|
||||||
|
vipExpireAt = json['vip_expire_at'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = <String, dynamic>{};
|
||||||
|
data['email_count'] = emailCount;
|
||||||
|
data['sms_count'] = smsCount;
|
||||||
|
data['cloudauth_count'] = cloudauthCount;
|
||||||
|
data['vip_status'] = vipStatus;
|
||||||
|
data['vip_lock_count'] = vipLockCount;
|
||||||
|
data['vip_expire_at'] = vipExpireAt;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -12,6 +12,9 @@ class ValueAddedServicesHighFunctionLogic extends BaseGetXController {
|
|||||||
//获取增值服务用户余量包
|
//获取增值服务用户余量包
|
||||||
Future<void> getServiceUserPackage() async {
|
Future<void> getServiceUserPackage() async {
|
||||||
var entity = await ApiRepository.to.getServiceUserPackage();
|
var entity = await ApiRepository.to.getServiceUserPackage();
|
||||||
if (entity.errorCode!.codeIsSuccessful) {}
|
if (entity.errorCode!.codeIsSuccessful) {
|
||||||
|
state.vipExpireDate.value = entity.data!.vipExpireAt!;
|
||||||
|
state.vipExpireDate.refresh();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
import 'package:star_lock/app_settings/app_settings.dart';
|
||||||
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesHighFunction/valueAddedServicesHighFunction_logic.dart';
|
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesHighFunction/valueAddedServicesHighFunction_logic.dart';
|
||||||
|
|
||||||
import '../../../appRouters.dart';
|
import '../../../appRouters.dart';
|
||||||
@ -33,7 +34,7 @@ class _ValueAddedServicesHighFunctionPageState
|
|||||||
return Scaffold(
|
return Scaffold(
|
||||||
backgroundColor: Colors.white,
|
backgroundColor: Colors.white,
|
||||||
appBar: TitleAppBar(
|
appBar: TitleAppBar(
|
||||||
barTitle: TranslationLoader.lanKeys!.advancedFunction!.tr,
|
barTitle: "高级功能".tr,
|
||||||
haveBack: true,
|
haveBack: true,
|
||||||
iconColor: Colors.black,
|
iconColor: Colors.black,
|
||||||
titleColor: Colors.black,
|
titleColor: Colors.black,
|
||||||
@ -67,52 +68,60 @@ class _ValueAddedServicesHighFunctionPageState
|
|||||||
topRight: Radius.circular(30.h),
|
topRight: Radius.circular(30.h),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
child: Stack(
|
child: GestureDetector(
|
||||||
alignment: AlignmentDirectional.centerStart,
|
onTap: () {
|
||||||
children: [
|
Get.toNamed(Routers.advancedFunctionRecordPage);
|
||||||
Row(
|
},
|
||||||
mainAxisAlignment: MainAxisAlignment.start,
|
child: Container(
|
||||||
// crossAxisAlignment: CrossAxisAlignment.center,
|
color: Colors.transparent,
|
||||||
|
child: Stack(
|
||||||
|
alignment: AlignmentDirectional.centerStart,
|
||||||
children: [
|
children: [
|
||||||
Column(
|
Row(
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
// crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
children: [
|
children: [
|
||||||
Text(
|
Column(
|
||||||
"已开通".tr,
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
style:
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
TextStyle(fontSize: 24.sp, fontWeight: FontWeight.w600),
|
children: [
|
||||||
|
Text(
|
||||||
|
"已开通".tr,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 24.sp, fontWeight: FontWeight.w600),
|
||||||
|
),
|
||||||
|
SizedBox(height: 5.h),
|
||||||
|
Obx(() => Text(
|
||||||
|
"${TranslationLoader.lanKeys!.periodValidity!.tr}:${state.vipExpireDate.value}",
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 20.sp, fontWeight: FontWeight.w600),
|
||||||
|
)),
|
||||||
|
], //
|
||||||
),
|
),
|
||||||
SizedBox(height: 5.h),
|
],
|
||||||
Text(
|
|
||||||
"${TranslationLoader.lanKeys!.periodValidity!.tr}:2023-07-29",
|
|
||||||
style:
|
|
||||||
TextStyle(fontSize: 20.sp, fontWeight: FontWeight.w600),
|
|
||||||
),
|
|
||||||
], //
|
|
||||||
),
|
),
|
||||||
|
Positioned(
|
||||||
|
bottom: 0.h,
|
||||||
|
right: 0.w,
|
||||||
|
child: Container(
|
||||||
|
width: 90.w,
|
||||||
|
height: 50.h,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: const Color(0xFFBDCDDF),
|
||||||
|
borderRadius: BorderRadius.only(
|
||||||
|
topLeft: Radius.circular(30.h),
|
||||||
|
bottomLeft: Radius.circular(30.h),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: Center(
|
||||||
|
child: Text(
|
||||||
|
TranslationLoader.lanKeys!.record!.tr,
|
||||||
|
style: TextStyle(fontSize: 22.sp),
|
||||||
|
)),
|
||||||
|
)),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
Positioned(
|
),
|
||||||
bottom: 0.h,
|
|
||||||
right: 0.w,
|
|
||||||
child: Container(
|
|
||||||
width: 90.w,
|
|
||||||
height: 50.h,
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
color: const Color(0xFFBDCDDF),
|
|
||||||
borderRadius: BorderRadius.only(
|
|
||||||
topLeft: Radius.circular(30.h),
|
|
||||||
bottomLeft: Radius.circular(30.h),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
child: Center(
|
|
||||||
child: Text(
|
|
||||||
TranslationLoader.lanKeys!.record!.tr,
|
|
||||||
style: TextStyle(fontSize: 22.sp),
|
|
||||||
)),
|
|
||||||
)),
|
|
||||||
],
|
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1 +1,5 @@
|
|||||||
class ValueAddedServicesHighFunctionState {}
|
import 'package:get/get.dart';
|
||||||
|
|
||||||
|
class ValueAddedServicesHighFunctionState {
|
||||||
|
var vipExpireDate = ''.obs;
|
||||||
|
}
|
||||||
|
|||||||
@ -785,8 +785,7 @@ class ApiProvider extends BaseProvider {
|
|||||||
jsonEncode({
|
jsonEncode({
|
||||||
'lockId': lockId,
|
'lockId': lockId,
|
||||||
}),
|
}),
|
||||||
isUnShowLoading: true
|
isUnShowLoading: true);
|
||||||
);
|
|
||||||
|
|
||||||
// 锁诊断
|
// 锁诊断
|
||||||
Future<Response> setLockDiagnoseData(
|
Future<Response> setLockDiagnoseData(
|
||||||
@ -1999,6 +1998,22 @@ class ApiProvider extends BaseProvider {
|
|||||||
// 获取增值服务用户余量包
|
// 获取增值服务用户余量包
|
||||||
Future<Response> getServiceUserPackage() =>
|
Future<Response> getServiceUserPackage() =>
|
||||||
post(getServiceUserPackageURL.toUrl, jsonEncode({}));
|
post(getServiceUserPackageURL.toUrl, jsonEncode({}));
|
||||||
|
|
||||||
|
// 高级功能购买记录
|
||||||
|
Future<Response> advancedFunctionBuyRecordList(
|
||||||
|
String type,
|
||||||
|
int pageNo,
|
||||||
|
int recordType,
|
||||||
|
int pageSize,
|
||||||
|
) =>
|
||||||
|
post(
|
||||||
|
getBuyRecordListURL.toUrl,
|
||||||
|
jsonEncode({
|
||||||
|
'type': type,
|
||||||
|
'pageNo': pageNo,
|
||||||
|
'pageSize': pageSize,
|
||||||
|
'record_type': recordType,
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
extension ExtensionString on String {
|
extension ExtensionString on String {
|
||||||
|
|||||||
@ -27,6 +27,8 @@ import 'package:star_lock/mine/mineSet/lockUserManage/lockUserManageList/keyList
|
|||||||
import 'package:star_lock/mine/mineSet/mineSet/userSettingInfoEntity.dart';
|
import 'package:star_lock/mine/mineSet/mineSet/userSettingInfoEntity.dart';
|
||||||
import 'package:star_lock/mine/mineSet/mineSet/weChatQRCodeEntity.dart';
|
import 'package:star_lock/mine/mineSet/mineSet/weChatQRCodeEntity.dart';
|
||||||
import 'package:star_lock/mine/valueAddedServices/advancedFeaturesWeb/advancedFeaturesWeb_entity.dart';
|
import 'package:star_lock/mine/valueAddedServices/advancedFeaturesWeb/advancedFeaturesWeb_entity.dart';
|
||||||
|
import 'package:star_lock/mine/valueAddedServices/advancedFunctionRecord/advancedFunctionRecord_entity.dart';
|
||||||
|
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesHighFunction/valueAddedServicesHighFunction_entity.dart';
|
||||||
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesRealName/face_authentication_entity.dart';
|
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesRealName/face_authentication_entity.dart';
|
||||||
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesRecord/buy_record_list_entity.dart';
|
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesRecord/buy_record_list_entity.dart';
|
||||||
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesRecord/use_record_list_entity.dart';
|
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesRecord/use_record_list_entity.dart';
|
||||||
@ -2024,8 +2026,20 @@ class ApiRepository {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 获取增值服务用户余量包
|
// 获取增值服务用户余量包
|
||||||
Future<AdvancedFeaturesWebEntity> getServiceUserPackage() async {
|
Future<ValueAddedServicesHighFunctionEntity> getServiceUserPackage() async {
|
||||||
final res = await apiProvider.getServiceUserPackage();
|
final res = await apiProvider.getServiceUserPackage();
|
||||||
return AdvancedFeaturesWebEntity.fromJson(res.body);
|
return ValueAddedServicesHighFunctionEntity.fromJson(res.body);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 高级功能购买记录
|
||||||
|
Future<AdvancedFunctionRecordEntity> advancedFunctionBuyRecordList({
|
||||||
|
required String type,
|
||||||
|
required int pageNo,
|
||||||
|
required int recordType,
|
||||||
|
required int pageSize,
|
||||||
|
}) async {
|
||||||
|
final res = await apiProvider.advancedFunctionBuyRecordList(
|
||||||
|
type, pageNo, recordType, pageSize);
|
||||||
|
return AdvancedFunctionRecordEntity.fromJson(res.body);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user