Browse Source

add widget date time picker

master
daivph 5 years ago
parent
commit
bbec3fcd86
2 changed files with 101 additions and 2 deletions
  1. +75
    -0
      lib/presentation/custom_widgets/widget_field_time_picker.dart
  2. +26
    -2
      lib/utils/formatter.dart

+ 75
- 0
lib/presentation/custom_widgets/widget_field_time_picker.dart View File

import 'package:farm_tpf/utils/const_style.dart';
import 'package:flutter/material.dart';
import 'package:flutter_datetime_picker/flutter_datetime_picker.dart';
import 'package:farm_tpf/utils/formatter.dart';
import 'package:get/get.dart';
import 'package:get/state_manager.dart';

class WidgetFieldDateTimePicker extends StatefulWidget {
final DateTime initDateTime;
final Function(DateTime selectedDateTimeLocal) onUpdateDateTime;
WidgetFieldDateTimePicker(
{@required this.initDateTime, @required this.onUpdateDateTime});
@override
_WidgetFieldDateTimePickerState createState() =>
_WidgetFieldDateTimePickerState();
}

class _WidgetFieldDateTimePickerState extends State<WidgetFieldDateTimePicker> {
var changeDate = Get.put(ChangeDateTimePicker());
@override
void initState() {
super.initState();
changeDate.initValue(selectedDate: widget.initDateTime);
widget.onUpdateDateTime(changeDate.selectedDateTime);
}

@override
Widget build(BuildContext context) {
return GetBuilder<ChangeDateTimePicker>(builder: (value) {
return FlatButton(
padding:
EdgeInsets.only(top: 0.0, right: 0.0, bottom: 0.0, left: 0.0),
onPressed: () {
DatePicker.showDateTimePicker(context,
showTitleActions: true,
onChanged: (date) {}, onConfirm: (date) {
changeDate.change(date);
widget.onUpdateDateTime(date);
}, currentTime: value.selectedDateTime, locale: LocaleType.vi);
},
child: Container(
padding: EdgeInsets.only(
top: 0.0, right: 0.0, bottom: 10.5, left: 0.0),
decoration: BoxDecoration(
border: kBorderTextField,
),
child: Row(
children: [
Expanded(
child: Text(
value.selectedDateTime.displayDateTime_DDMMYYYY_HHmm(),
style: TextStyle(fontSize: 14.0, color: Colors.black87),
)),
Icon(
Icons.date_range,
color: Colors.blue,
),
],
)));
});
}
}

class ChangeDateTimePicker extends GetxController {
DateTime selectedDateTime;
initValue({DateTime selectedDate}) {
selectedDateTime = selectedDate ?? DateTime.now();
update();
}

change(DateTime dateTime) {
selectedDateTime = dateTime;
update();
}
}

+ 26
- 2
lib/utils/formatter.dart View File



import 'package:intl/intl.dart'; import 'package:intl/intl.dart';


extension formatDateTime on DateTime {
String convertLocalDateTimeToStringUtcDateTime() {
try {
String utcDateString =
DateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").format(this.toUtc());
return utcDateString;
} catch (_) {
return "";
}
}

String displayDateTime_DDMMYYYY_HHmm() {
try {
return DateFormat("dd/MM/yyyy HH:mm").format(this);
} catch (_) {
return "";
}
}
}

extension ddMM_HHmm on String { extension ddMM_HHmm on String {
//"2020-08-13T02:11:32Z" => 13/08 02:11 //"2020-08-13T02:11:32Z" => 13/08 02:11
// convert utc to local timezone // convert utc to local timezone
} }
} }


//TODO: Check timezone with api update true/false
// Convert server timezone + 0 -> local timezone
String format_DDMMYY_HHmm() { String format_DDMMYY_HHmm() {
try { try {
final str = this.toString(); final str = this.toString();
var dateFromString = var dateFromString =
DateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").parse(str, false).toLocal();
DateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").parse(str, true).toLocal();
return DateFormat("dd/MM/yyyy HH:mm").format(dateFromString); return DateFormat("dd/MM/yyyy HH:mm").format(dateFromString);
} catch (_) { } catch (_) {
return ""; return "";
} }
} }


DateTime convertStringServerDateTimeToLocalDateTime() {
return DateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").parse(this, true).toLocal();
}

String formatStringToStringDecimal() { String formatStringToStringDecimal() {
try { try {
var numOfString = double.tryParse(this.toString()); var numOfString = double.tryParse(this.toString());

Loading…
Cancel
Save