更新日历样式

This commit is contained in:
czz
2025-07-10 11:16:26 +08:00
parent ceb228b256
commit 30027f40c2
10 changed files with 502 additions and 480 deletions

View File

@@ -1328,28 +1328,49 @@ void showProgressDialog(
void showSleepCalendarBottomSheet({
required BuildContext context,
int? timestamp,
int? type = 1, // 新增参数默认值为1
int? type = 1,
String? mac,
required void Function(DateTime selectedDate) onDateSelected,
}) {
showModalBottomSheet(
showGeneralDialog(
context: context,
isScrollControlled: false,
backgroundColor: Colors.transparent,
builder: (context) {
return Container(
decoration: BoxDecoration(
color: const Color(0xFF242835),
borderRadius: BorderRadius.only(
topLeft: Radius.circular(20.rpx),
topRight: Radius.circular(20.rpx),
barrierDismissible: true,
barrierLabel: 'Dismiss',
barrierColor: Colors.black.withOpacity(0.4), // 移到这里,替代 Scaffold 背景
transitionDuration: const Duration(milliseconds: 300),
pageBuilder: (context, animation, secondaryAnimation) {
return GestureDetector(
onTap: () {
Navigator.of(context).pop(); // 点击空白关闭
},
child: Material(
type: MaterialType.transparency,
child: Align(
alignment: Alignment.bottomCenter,
child: GestureDetector(
onTap: () {}, // 阻止点击透传到外部(避免误关)
child: FractionallySizedBox(
widthFactor: 1.0,
heightFactor: 0.55,
child: Container(
decoration: BoxDecoration(
color: const Color(0xFF242835),
borderRadius: BorderRadius.only(
topLeft: Radius.circular(20.rpx),
topRight: Radius.circular(20.rpx),
),
),
child: SleepCalendarWidget(
timestamp: timestamp,
type: type,
mac: mac,
onDateSelected: onDateSelected,
),
),
),
),
),
),
child: SleepCalendarWidget(
timestamp: timestamp,
type: type, // 传递类型给子组件
onDateSelected: onDateSelected,
// highlightColor: Colors.green,
),
);
},
);

View File

@@ -314,6 +314,7 @@ class _OtherLoginPageState extends State<OtherLoginPage> {
),
),
),
Align(
alignment: AlignmentDirectional(-1, 0),
child: Padding(

View File

@@ -317,16 +317,14 @@ class EditAddressPage extends GetView<AddressController>
),
),
Container(
width: MediaQuery.sizeOf(
context)
.width,
height: MediaQuery.sizeOf(
context)
.height *
0.038,
constraints:
const BoxConstraints(
minHeight: 31,
// width: MediaQuery.sizeOf(
// context)
// .width,
height:
bodysize!.maxHeight *
0.038,
constraints: BoxConstraints(
minHeight: 61.rpx,
),
decoration: BoxDecoration(),
child: Row(
@@ -339,19 +337,14 @@ class EditAddressPage extends GetView<AddressController>
context)
.width *
0.17,
height:
MediaQuery.sizeOf(
context)
.height *
0.038,
decoration:
BoxDecoration(),
constraints:
BoxConstraints(
minWidth:
105.rpx,
maxWidth:
105.rpx),
decoration:
BoxDecoration(),
child: Row(
mainAxisSize:
MainAxisSize
@@ -375,8 +368,6 @@ class EditAddressPage extends GetView<AddressController>
),
Expanded(
child: Container(
width: 100,
height: 100,
decoration:
BoxDecoration(
color:
@@ -386,105 +377,120 @@ class EditAddressPage extends GetView<AddressController>
.circular(
8),
),
child:
TextFormField(
// autofocus: true,
obscureText:
false,
onChanged: (val) {
controller.model
.name = val;
},
initialValue:
address[
'name'],
decoration:
InputDecoration(
contentPadding:
EdgeInsets
.symmetric(
vertical:
25.rpx,
horizontal:
26.rpx,
),
labelStyle:
TextStyle(
fontFamily:
'Readex Pro',
letterSpacing:
0,
),
hintStyle:
TextStyle(
fontFamily:
'Readex Pro',
letterSpacing:
0,
),
enabledBorder:
UnderlineInputBorder(
borderSide:
const BorderSide(
color: Color(
0x00000000),
width: 2,
width:
double.infinity,
child: Padding(
padding:
EdgeInsetsDirectional
.fromSTEB(
35.rpx,
0,
35.rpx,
0),
child: Row(
mainAxisSize:
MainAxisSize
.max,
mainAxisAlignment:
MainAxisAlignment
.spaceBetween,
children: [
Expanded(
child:
Container(
child:
Align(
alignment: AlignmentDirectional(
-1,
0),
child:
TextFormField(
onChanged:
(value) {
controller.model.name =
value;
},
autofocus:
false,
obscureText:
false,
decoration:
InputDecoration(
contentPadding:
EdgeInsets.all(0),
isDense:
true,
labelStyle:
TextStyle(
fontFamily: 'Inter',
fontSize: 26.rpx,
letterSpacing: 0.0,
),
hintStyle:
TextStyle(
fontFamily: 'Inter',
fontSize: 26.rpx,
letterSpacing: 0.0,
color: themeController.currentColor.sc4,
),
enabledBorder:
OutlineInputBorder(
borderSide: BorderSide(
color: Color(0x00000000),
width: 1.rpx,
),
borderRadius: BorderRadius.circular(8.rpx),
),
focusedBorder:
OutlineInputBorder(
borderSide: BorderSide(
color: Color(0x00000000),
width: 1.rpx,
),
borderRadius: BorderRadius.circular(8.rpx),
),
errorBorder:
OutlineInputBorder(
borderSide: BorderSide(
color: Colors.red,
width: 1.rpx,
),
borderRadius: BorderRadius.circular(8.rpx),
),
focusedErrorBorder:
OutlineInputBorder(
borderSide: BorderSide(
color: Colors.red,
width: 1.rpx,
),
borderRadius: BorderRadius.circular(8.rpx),
),
filled:
false,
fillColor:
Colors.white,
),
style:
TextStyle(
fontFamily:
'Readex Pro',
letterSpacing:
0,
color:
Colors.black,
fontSize:
26.rpx,
),
// cursorColor:
// Colors.black,
// validator: _model
// .textControllerValidator
// .asValidator(context),
),
),
),
),
borderRadius:
BorderRadius
.circular(
8),
),
focusedBorder:
UnderlineInputBorder(
borderSide:
const BorderSide(
color: Color(
0x00000000),
width: 2,
),
borderRadius:
BorderRadius
.circular(
8),
),
errorBorder:
UnderlineInputBorder(
borderSide:
const BorderSide(
color: Color(
0x00000000),
width: 2,
),
borderRadius:
BorderRadius
.circular(
8),
),
focusedErrorBorder:
UnderlineInputBorder(
borderSide:
const BorderSide(
color: Color(
0x00000000),
width: 2,
),
borderRadius:
BorderRadius
.circular(
8),
),
),
style: TextStyle(
fontFamily:
'Readex Pro',
letterSpacing:
0,
color: Colors
.black,
fontSize:
26.rpx,
],
),
),
),
@@ -494,17 +500,16 @@ class EditAddressPage extends GetView<AddressController>
),
),
Container(
width: MediaQuery.sizeOf(
context)
.width,
height: MediaQuery.sizeOf(
context)
.height *
0.038,
constraints:
const BoxConstraints(
minHeight: 31,
// width: MediaQuery.sizeOf(
// context)
// .width,
height:
bodysize!.maxHeight *
0.038,
constraints: BoxConstraints(
minHeight: 61.rpx,
),
decoration: BoxDecoration(),
child: Row(
mainAxisSize:
MainAxisSize.max,
@@ -515,19 +520,14 @@ class EditAddressPage extends GetView<AddressController>
context)
.width *
0.17,
height:
MediaQuery.sizeOf(
context)
.height *
0.038,
decoration:
BoxDecoration(),
constraints:
BoxConstraints(
minWidth:
105.rpx,
maxWidth:
105.rpx),
decoration:
BoxDecoration(),
child: Row(
mainAxisSize:
MainAxisSize
@@ -535,136 +535,145 @@ class EditAddressPage extends GetView<AddressController>
children: [
Text(
'手机号',
style:
TextStyle(
fontFamily:
'Readex Pro',
fontSize:
AppFontsize
.normal_text_size,
letterSpacing:
0,
color: Colors
.white,
),
style: TextStyle(
fontFamily:
'Readex Pro',
fontSize:
AppFontsize
.normal_text_size,
letterSpacing:
0,
color: Colors
.white),
),
],
),
),
Expanded(
child: Container(
width: 100,
height: 100,
decoration:
BoxDecoration(
color:
Colors.white,
borderRadius:
BorderRadius
.circular(
8),
color:
Colors.white,
),
child:
TextFormField(
// autofocus: true,
onChanged: (val) {
controller.model
.tel = val;
},
textAlignVertical:
TextAlignVertical
.center, // 垂直居中
obscureText:
false,
initialValue:
address[
'tel'],
decoration:
InputDecoration(
contentPadding:
EdgeInsets
.symmetric(
vertical:
25.rpx,
horizontal:
26.rpx,
),
labelStyle:
TextStyle(
fontFamily:
'Readex Pro',
letterSpacing:
0,
),
hintStyle:
TextStyle(
fontFamily:
'Readex Pro',
letterSpacing:
0,
),
enabledBorder:
UnderlineInputBorder(
borderSide:
const BorderSide(
color: Color(
0x00000000),
width: 2,
width:
double.infinity,
child: Padding(
padding:
EdgeInsetsDirectional
.fromSTEB(
35.rpx,
0,
35.rpx,
0),
child: Row(
mainAxisSize:
MainAxisSize
.max,
mainAxisAlignment:
MainAxisAlignment
.spaceBetween,
children: [
Expanded(
child:
Container(
child:
Align(
alignment: AlignmentDirectional(
-1,
0),
child:
TextFormField(
onChanged:
(value) {
controller.model.tel =
value;
},
autofocus:
false,
obscureText:
false,
decoration:
InputDecoration(
contentPadding:
EdgeInsets.all(0),
isDense:
true,
labelStyle:
TextStyle(
fontFamily: 'Inter',
fontSize: 26.rpx,
letterSpacing: 0.0,
),
hintStyle:
TextStyle(
fontFamily: 'Inter',
fontSize: 26.rpx,
letterSpacing: 0.0,
color: themeController.currentColor.sc4,
),
enabledBorder:
OutlineInputBorder(
borderSide: BorderSide(
color: Color(0x00000000),
width: 1.rpx,
),
borderRadius: BorderRadius.circular(8.rpx),
),
focusedBorder:
OutlineInputBorder(
borderSide: BorderSide(
color: Color(0x00000000),
width: 1.rpx,
),
borderRadius: BorderRadius.circular(8.rpx),
),
errorBorder:
OutlineInputBorder(
borderSide: BorderSide(
color: Colors.red,
width: 1.rpx,
),
borderRadius: BorderRadius.circular(8.rpx),
),
focusedErrorBorder:
OutlineInputBorder(
borderSide: BorderSide(
color: Colors.red,
width: 1.rpx,
),
borderRadius: BorderRadius.circular(8.rpx),
),
filled:
false,
fillColor:
Colors.white,
),
style:
TextStyle(
fontFamily:
'Readex Pro',
letterSpacing:
0,
color:
Colors.black,
fontSize:
26.rpx,
),
// cursorColor:
// Colors.black,
// validator: _model
// .textControllerValidator
// .asValidator(context),
),
),
),
),
borderRadius:
BorderRadius
.circular(
8),
),
focusedBorder:
UnderlineInputBorder(
borderSide:
const BorderSide(
color: Color(
0x00000000),
width: 2,
),
borderRadius:
BorderRadius
.circular(
8),
),
errorBorder:
UnderlineInputBorder(
borderSide:
const BorderSide(
color: Color(
0x00000000),
width: 2,
),
borderRadius:
BorderRadius
.circular(
8),
),
focusedErrorBorder:
UnderlineInputBorder(
borderSide:
const BorderSide(
color: Color(
0x00000000),
width: 2,
),
borderRadius:
BorderRadius
.circular(
8),
),
),
style: TextStyle(
fontFamily:
'Readex Pro',
letterSpacing:
0,
color: Colors
.black,
fontSize:
26.rpx,
],
),
),
),
@@ -740,158 +749,6 @@ class EditAddressPage extends GetView<AddressController>
],
),
),
// Expanded(
// child: InkWell(
// onTap: () {
// CityPicker.show(
// context:
// context,
// cityPickerListener:
// this,
// // 在大屏/Web 上最大宽度为 600px
// // 移除内边距
// );
// },
// child: Container(
// width: 100,
// height: 100,
// decoration:
// BoxDecoration(
// color: const Color(
// 0xFFF3F5F6),
// borderRadius:
// BorderRadius
// .circular(
// 8),
// ),
// alignment:
// Alignment
// .center,
// child: Obx(() {
// return TextFormField(
// enabled:
// false,
// controller: controller.onReDraw(
// TextEditingController(
// text:
// controller.model.all_address),
// (val) {
// val.text =
// controller.model.all_address ??
// "";
// }),
// // autofocus: true,
// obscureText:
// false,
// maxLines: 1,
// textAlignVertical:
// TextAlignVertical
// .center, // 垂直居中
// decoration: InputDecoration(
// contentPadding: EdgeInsets.symmetric(
// vertical:
// 25.rpx,
// horizontal:
// 26.rpx,
// ),
// labelStyle: TextStyle(
// fontFamily:
// 'Readex Pro',
// letterSpacing:
// 0,
// ),
// hintStyle: TextStyle(
// fontFamily:
// 'Readex Pro',
// letterSpacing:
// 0,
// ),
// enabledBorder: UnderlineInputBorder(
// borderSide:
// const BorderSide(
// color:
// Color(0x00000000),
// width:
// 2,
// ),
// borderRadius:
// BorderRadius.circular(8),
// ),
// disabledBorder: UnderlineInputBorder(
// borderSide:
// const BorderSide(
// color:
// Color(0x00000000),
// width:
// 0,
// ),
// borderRadius:
// BorderRadius.circular(8),
// ),
// focusedBorder: UnderlineInputBorder(
// borderSide:
// const BorderSide(
// color:
// Color(0x00000000),
// width:
// 2,
// ),
// borderRadius:
// BorderRadius.circular(8),
// ),
// errorBorder: UnderlineInputBorder(
// borderSide:
// const BorderSide(
// color:
// Color(0x00000000),
// width:
// 2,
// ),
// borderRadius:
// BorderRadius.circular(8),
// ),
// focusedErrorBorder: UnderlineInputBorder(
// borderSide:
// const BorderSide(
// color:
// Color(0x00000000),
// width:
// 2,
// ),
// borderRadius:
// BorderRadius.circular(8),
// ),
// suffixIcon: Transform.rotate(
// angle:
// 1.5708, // 90 度相当于 pi / 2 弧度
// child:
// Icon(
// Icons.arrow_forward_ios,
// color:
// Colors.black,
// size:
// 26.rpx,
// ),
// )),
// style:
// TextStyle(
// fontFamily:
// 'Readex Pro',
// letterSpacing:
// 0,
// color: Color(
// 0xFF333333),
// fontSize:
// 26.rpx,
// overflow:
// TextOverflow
// .ellipsis,
// ),
// );
// })),
// ),
// ),
Expanded(
child: InkWell(
onTap: () {
@@ -1087,7 +944,7 @@ class EditAddressPage extends GetView<AddressController>
vertical:
10.rpx,
horizontal:
26.rpx,
35.rpx,
),
labelStyle:
TextStyle(
@@ -1163,6 +1020,9 @@ class EditAddressPage extends GetView<AddressController>
fontSize:
26.rpx,
),
// cursorColor:
// Colors
// .black,
),
),
),

View File

@@ -22,8 +22,10 @@ class MessageDetailPage extends StatefulWidget {
class _MessageDetailPageState extends State<MessageDetailPage> {
MHDeviceShareController controller = Get.find();
MhMessageController messageController = Get.find();
RxInt status = 0.obs;
@override
Widget build(BuildContext context) {
status.value = widget.data['status'];
var messageInfo = widget.data;
return LayoutBuilder(
builder: (context, boxConstraints) => GestureDetector(
@@ -171,34 +173,32 @@ class _MessageDetailPageState extends State<MessageDetailPage> {
),
width: double.infinity,
child: TextButton(
onPressed: () async {
if (widget.data['status'] == 1) {
ApiResponse apiResponse =
await controller.confirmShare(widget.data['data']['shareCode']);
if (apiResponse.code == HttpStatusCodes.ok) {
TopSlideNotification.show(context,
text: apiResponse.msg!, textColor: Color(0xFF00C1AA));
messageController.getMessageList();
messageController.updateAll();
} else {
TopSlideNotification.show(context,
text: apiResponse.msg!, textColor: Color(0XFFFF7159));
messageController.getMessageList();
messageController.updateAll();
onPressed: () async {
if (widget.data['status'] == 1) {
ApiResponse apiResponse = await controller
.confirmShare(widget.data['data']['shareCode']);
if (apiResponse.code == HttpStatusCodes.ok) {
TopSlideNotification.show(context,
text: apiResponse.msg!, textColor: Color(0xFF00C1AA));
messageController.getMessageList();
messageController.updateAll();
} else {
TopSlideNotification.show(context,
text: apiResponse.msg!, textColor: Color(0XFFFF7159));
messageController.getMessageList();
messageController.updateAll();
}
}
}
},
child: Text(
getStatusText(widget.data['status']),
style: TextStyle(
fontFamily: 'Readex Pro',
color:
widget.data['status'] == 1 ? Colors.white : Color(0xFF929699),
fontSize: 26.rpx,
letterSpacing: 0,
),
),
),
},
child: Obx(() => Text(
getStatusText(status.value),
style: TextStyle(
fontFamily: 'Readex Pro',
color: status.value == 1 ? Colors.white : Color(0xFF929699),
fontSize: 26.rpx,
letterSpacing: 0,
),
))),
);
}

View File

@@ -63,7 +63,7 @@ class RepairHistoryWidget extends GetView<RepairInfoController> {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
repairListController.model.repairList[index]['device']
repairListController.model.repairList[index]['device'][0]
['mac'] ??
'',
style: TextStyle(

View File

@@ -1430,7 +1430,7 @@ class MHTLoginPage extends GetView<MHTLoginController> {
'Readex Pro',
color:
Colors.white,
fontSize: 12,
fontSize: 23.rpx,
letterSpacing: 0,
),
),
@@ -1458,7 +1458,7 @@ class MHTLoginPage extends GetView<MHTLoginController> {
color:
stringToColor(
"FF9F66"),
fontSize: 12,
fontSize: 23.rpx,
letterSpacing:
0,
),
@@ -1476,7 +1476,7 @@ class MHTLoginPage extends GetView<MHTLoginController> {
'Readex Pro',
color:
Colors.white,
fontSize: 12,
fontSize: 23.rpx,
letterSpacing: 0,
),
),
@@ -1504,7 +1504,7 @@ class MHTLoginPage extends GetView<MHTLoginController> {
color:
stringToColor(
"FF9F66"),
fontSize: 12,
fontSize: 23.rpx,
letterSpacing:
0,
),

View File

@@ -886,8 +886,6 @@ class _NewSleepReportPageState extends State<NewSleepReportPage> {
final today = DateTime(now.year, now.month, now.day);
DateTime targetDate = selectedDate;
if (type == 1) {
final nextDate = selectedDate.add(const Duration(days: 1));
if (!nextDate.isAfter(today)) {
@@ -1085,6 +1083,7 @@ class _NewSleepReportPageState extends State<NewSleepReportPage> {
type: sleepReportController.model.type,
timestamp: selectedDate.millisecondsSinceEpoch,
context: context,
mac: widget.data['mac'],
onDateSelected: (newDate) {
sleepReportController.selectedDate.value = newDate;
calendarController.selectedDate.value = newDate;
@@ -1121,9 +1120,9 @@ class _NewSleepReportPageState extends State<NewSleepReportPage> {
},
);
},
child: SizedBox(
width: 28.rpx,
height: 28.rpx,
child: Container(
width: 36.rpx,
height: 36.rpx,
child: SvgPicture.asset(
'assets/img/icon/calendar.svg',
fit: BoxFit.cover,