import 'package:date_format/date_format.dart'; import 'package:flutter/material.dart'; import 'package:flutter_pickers/pickers.dart'; import 'package:flutter_pickers/time_picker/model/date_mode.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyPeriodValidity/KeyPeriodValidityModel.dart'; import '../../../../app_settings/app_colors.dart'; import '../../../../tools/commonItem.dart'; import '../../../../tools/submitBtn.dart'; import '../../../../tools/titleAppBar.dart'; import '../../../../translations/trans_lib.dart'; class ElectronicKeyPeriodValidityPage extends StatefulWidget { const ElectronicKeyPeriodValidityPage({Key? key}) : super(key: key); @override State createState() => _ElectronicKeyPeriodValidityPageState(); } class _ElectronicKeyPeriodValidityPageState extends State { List validityTextList = [ TranslationLoader.lanKeys!.sundayShort!.tr, TranslationLoader.lanKeys!.mondayShort!.tr, TranslationLoader.lanKeys!.tuesdayShort!.tr, TranslationLoader.lanKeys!.wednesdayShort!.tr, TranslationLoader.lanKeys!.thursdayShort!.tr, TranslationLoader.lanKeys!.fridayShort!.tr, TranslationLoader.lanKeys!.saturdayShort!.tr ]; List validityDataList = []; //自定义数据块 List selectIndexList = []; //选中的有效期数组 String _effectiveTime = ''; String _failureTime = ''; String _effectiveDate = ''; String _failureDate = ''; @override void initState() { super.initState(); for (var i = 0; i < validityTextList.length; i++) { int validityValue = 0; if (i == 0) { validityValue = 7; } else { validityValue = i; } KeyPeriodValidityModel model = KeyPeriodValidityModel(validityTextList[i], i, false, validityValue); validityDataList.add(model); } } @override Widget build(BuildContext context) { return Scaffold( backgroundColor: AppColors.mainBackgroundColor, appBar: TitleAppBar( barTitle: TranslationLoader.lanKeys!.periodValidity!.tr, haveBack: true, backgroundColor: AppColors.mainColor), body: ListView( children: [ topWidget(), Container( color: Colors.white, height: 10.h, ), const Divider( height: 1, color: AppColors.greyLineColor, ), bottomWidget() ], )); } Widget topWidget() { return Container( height: 150.h, width: 1.sw, color: Colors.white, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( height: 60.h, // color: Colors.red, padding: EdgeInsets.only(left: 15.h, top: 15.h), child: Text(TranslationLoader.lanKeys!.periodValidity!.tr, style: TextStyle(fontSize: 24.sp, fontWeight: FontWeight.w600))), SizedBox( height: 90.h, child: GridView.builder( gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 7, childAspectRatio: 1.0), itemCount: 7, physics: const NeverScrollableScrollPhysics(), itemBuilder: (context, index) { KeyPeriodValidityModel model = validityDataList[index]; return btnItem(model); })) ], ), ); } Widget btnItem(KeyPeriodValidityModel model) { return GestureDetector( onTap: () { model.isValidity = !model.isValidity; if (model.isValidity) { selectIndexList.add(model.validityValue); } else { selectIndexList.remove(model.validityValue); } setState(() {}); }, child: Container( width: 40.w, height: 40.w, margin: EdgeInsets.all(10.w), decoration: BoxDecoration( color: selectIndexList.contains(model.validityValue) ? Colors.blue : Colors.white, border: Border.all(width: 1, color: AppColors.greyBackgroundColor), borderRadius: BorderRadius.circular(30.w), ), child: Center( child: Text( model.validityText, style: TextStyle( fontSize: 20.sp, color: selectIndexList.contains(model.validityValue) ? Colors.white : AppColors.darkGrayTextColor), )), ), ); } Widget bottomWidget() { return Column( children: [ CommonItem( leftTitel: TranslationLoader.lanKeys!.effectiveTime!.tr, rightTitle: _effectiveTime, isHaveDirection: true, isHaveLine: true, action: () { Pickers.showDatePicker(context, mode: DateMode.HM, onConfirm: (p) { _effectiveTime = '${intToStr(p.hour!)}:${intToStr(p.minute!)}'; setState(() {}); }); }), CommonItem( leftTitel: TranslationLoader.lanKeys!.failureTime!.tr, rightTitle: _failureTime, isHaveDirection: true, action: () { Pickers.showDatePicker(context, mode: DateMode.HM, onConfirm: (p) { _failureTime = '${intToStr(p.hour!)}:${intToStr(p.minute!)}'; setState(() {}); }); }), Container(height: 10.h), CommonItem( leftTitel: TranslationLoader.lanKeys!.effectiveDate!.tr, rightTitle: _effectiveDate, isHaveDirection: true, isHaveLine: true, action: () { Pickers.showDatePicker(context, mode: DateMode.YMD, onConfirm: (p) { DateTime getPTime = DateTime.parse( '${intToStr(p.year!)}-${intToStr(p.month!)}-${intToStr(p.day!)}'); _effectiveDate = formatDate(getPTime, [yyyy, '-', mm, '-', dd]); setState(() {}); }); }), CommonItem( leftTitel: TranslationLoader.lanKeys!.failureDate!.tr, rightTitle: _failureDate, isHaveDirection: true, action: () { Pickers.showDatePicker(context, mode: DateMode.YMD, onConfirm: (p) { DateTime getPTime = DateTime.parse( '${intToStr(p.year!)}-${intToStr(p.month!)}-${intToStr(p.day!)}'); _failureDate = formatDate(getPTime, [yyyy, '-', mm, '-', dd]); setState(() {}); }); }), Container(height: 40.h), SubmitBtn( btnName: TranslationLoader.lanKeys!.sure!.tr, borderRadius: 20.w, margin: EdgeInsets.only(left: 30.w, right: 30.w, top: 30.w), padding: EdgeInsets.only(top: 25.w, bottom: 25.w), onClick: () { Map resultMap = {}; resultMap['validityValue'] = selectIndexList; Navigator.pop(context, resultMap); }), ], ); } String intToStr(int v) { return (v < 10) ? "0$v" : "$v"; } }