123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- import 'package:fis_lib_report/converts/date_to_string_converter.dart';
- import 'package:fis_lib_report/converts/pt_to_px_converter.dart';
- import 'package:fis_lib_report/converts/text_size_converter.dart';
- import 'package:fis_lib_report/converts/alignment_convert.dart';
- import 'package:fis_lib_report/report/dateTimeElement.dart';
- import 'package:fis_lib_report/report_info/date_time_info.dart';
- import 'package:fis_lib_report/report_info/report_info.dart';
- import 'package:flutter/material.dart';
- class RDateTime extends StatefulWidget {
- final DateTimeElement dateTimeElement;
- const RDateTime(this.dateTimeElement);
- @override
- State<StatefulWidget> createState() {
- return _RDateTimeState();
- }
- }
- class _RDateTimeState extends State<RDateTime> {
- DateTime selectedDate = DateTime.now();
- _RDateTimeState();
- String _dateTimeStr = '';
- double _fontSize = 15.0;
- double _width = 0;
- TextStyle _style = const TextStyle();
- Color _fontColor = Colors.black;
- Color _backgroundColor = const Color.fromARGB(255, 255, 255, 255);
- EdgeInsets _margin = const EdgeInsets.all(0);
- DateTimeInfo? _dateTimeInfo;
- @override
- initState() {
- super.initState();
- }
- @override
- Widget build(BuildContext context) {
- final dateTimeElement = widget.dateTimeElement;
- _initDatas();
- return Container(
- margin: _margin,
- decoration: BoxDecoration(
- border: Border.all(
- width: 1,
- color:
- dateTimeElement.isReadOnly! ? Colors.transparent : Colors.grey,
- ),
- ),
- width: _width,
- alignment: AlignmentConvert.verticalLayoutConvert(
- dateTimeElement.verticalAlignment!),
- child: Row(
- mainAxisAlignment: AlignmentConvert.horizontalToMainConvert(
- dateTimeElement.horizontalAlignment),
- children: [
- Container(
- margin: _margin,
- alignment: AlignmentConvert.verticalLayoutConvert(
- dateTimeElement.verticalAlignment!),
- child: Text(
- _dateTimeStr,
- style: _style,
- textAlign: AlignmentConvert.horizontalAlignmentConvert(
- dateTimeElement.horizontalAlignment),
- ),
- ),
- if (!dateTimeElement.isReadOnly!) ...[
- const Expanded(child: SizedBox()),
- GestureDetector(
- onTap: () => _selectDate(context),
- child: const Icon(
- Icons.date_range_outlined,
- size: 20,
- ),
- ),
- ],
- ],
- ));
- }
- _selectDate(BuildContext context) async {
- final DateTime? picked = await showDatePicker(
- context: context,
- initialDate: selectedDate, // Refer step 1
- firstDate: DateTime(2000),
- lastDate: DateTime(2025),
- );
- if (picked != null && picked != selectedDate) {
- final format = widget.dateTimeElement.dateTimeFormat;
- setState(() {
- selectedDate = picked;
- _dateTimeConvert(format!, selectedDate.millisecondsSinceEpoch);
- });
- }
- }
- void _initDatas() {
- final dateTimeElement = widget.dateTimeElement;
- final format = dateTimeElement.dateTimeFormat;
- final dateTimeInfo =
- ReportInfo.instance.getElementInfo(dateTimeElement) as DateTimeInfo?;
- if (dateTimeInfo != null && dateTimeInfo != _dateTimeInfo) {
- if (_dateTimeInfo != null) {
- _dateTimeInfo!.onTextChange.dispose();
- }
- _dateTimeInfo = dateTimeInfo;
- _dateTimeInfo!.onTextChange.addListener((sender, e) {
- if (mounted) {
- setState(() {
- final date = DateTime.parse(_dateTimeInfo!.text.trim());
- _dateTimeConvert(format!, date.millisecondsSinceEpoch);
- });
- }
- });
- }
- final date = DateTime.parse(_dateTimeInfo!.text.trim());
- final dateStr = DateToStringConverter.dateTimeConvert(
- format!, date.millisecondsSinceEpoch);
- if (dateStr != _dateTimeStr) {
- _dateTimeStr = dateStr;
- }
- _fontSize = dateTimeElement.fontSize ?? 15.0;
- //TODO(Loki):常规模板暂未设置fontStyles,后续再支持
- final fontStyles = dateTimeElement.fontStyles;
- final fontColor = dateTimeElement.fontColor;
- if (fontColor != null) {
- _fontColor = Color.fromARGB(
- fontColor.a!, fontColor.r!, fontColor.g!, fontColor.b!);
- }
- final backgroundColor = dateTimeElement.background;
- if (backgroundColor != null) {
- _backgroundColor = Color.fromARGB(backgroundColor.a!, backgroundColor.r!,
- backgroundColor.g!, backgroundColor.b!);
- }
- final margin = dateTimeElement.margin;
- if (margin != null) {
- _margin = EdgeInsets.only(
- top: margin.top ?? 0,
- bottom: margin.bottom ?? 0,
- left: margin.left ?? 0,
- right: margin.right ?? 0);
- }
- _style = TextStyle(
- fontSize: PtToPxConverter.ptToPx(_fontSize),
- color: _fontColor,
- backgroundColor: _backgroundColor,
- );
- _width = PtToPxConverter.ptToPx(
- TextSizeConvert.getTextSize(_dateTimeStr, _style).width);
- }
- void _dateTimeConvert(String format, int timestamp) {
- _dateTimeStr =
- DateToStringConverter.dateTimeConvert(format, timestamp).trim();
- }
- }
|