|
|
@@ -3,6 +3,70 @@ import 'package:flutter_datetime_picker/flutter_datetime_picker.dart';
|
|
|
|
|
|
void main() => runApp(new MyApp());
|
|
|
|
|
|
+class CustomPicker extends CommonPickerModel {
|
|
|
+ String digits(int value, int length) {
|
|
|
+ return '$value'.padLeft(length, "0");
|
|
|
+ }
|
|
|
+
|
|
|
+ CustomPicker({DateTime currentTime, LocaleType locale}) : super(locale: locale) {
|
|
|
+ this.currentTime = currentTime ?? DateTime.now();
|
|
|
+ this.setLeftIndex(this.currentTime.hour);
|
|
|
+ this.setMiddleIndex(this.currentTime.minute);
|
|
|
+ this.setRightIndex(this.currentTime.second);
|
|
|
+ }
|
|
|
+
|
|
|
+ @override
|
|
|
+ String leftStringAtIndex(int index) {
|
|
|
+ if (index >= 0 && index < 24) {
|
|
|
+ return this.digits(index, 2);
|
|
|
+ } else {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @override
|
|
|
+ String middleStringAtIndex(int index) {
|
|
|
+ if (index >= 0 && index < 60) {
|
|
|
+ return this.digits(index, 2);
|
|
|
+ } else {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @override
|
|
|
+ String rightStringAtIndex(int index) {
|
|
|
+ if (index >= 0 && index < 60) {
|
|
|
+ return this.digits(index, 2);
|
|
|
+ } else {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @override
|
|
|
+ String leftDivider() {
|
|
|
+ return "|";
|
|
|
+ }
|
|
|
+
|
|
|
+ @override
|
|
|
+ String rightDivider() {
|
|
|
+ return "|";
|
|
|
+ }
|
|
|
+
|
|
|
+ @override
|
|
|
+ List<int> layoutProportions() {
|
|
|
+ return [1, 2, 1];
|
|
|
+ }
|
|
|
+
|
|
|
+ @override
|
|
|
+ DateTime finalTime() {
|
|
|
+ return currentTime.isUtc
|
|
|
+ ? DateTime.utc(currentTime.year, currentTime.month, currentTime.day,
|
|
|
+ this.currentLeftIndex(), this.currentMiddleIndex(), this.currentRightIndex())
|
|
|
+ : DateTime(currentTime.year, currentTime.month, currentTime.day, this.currentLeftIndex(),
|
|
|
+ this.currentMiddleIndex(), this.currentRightIndex());
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
class MyApp extends StatelessWidget {
|
|
|
// This widget is the root of your application.
|
|
|
@override
|
|
|
@@ -35,13 +99,10 @@ class HomePage extends StatelessWidget {
|
|
|
maxTime: DateTime(2019, 6, 7),
|
|
|
theme: DatePickerTheme(
|
|
|
backgroundColor: Colors.blue,
|
|
|
- itemStyle: TextStyle(
|
|
|
- color: Colors.white, fontWeight: FontWeight.bold),
|
|
|
- doneStyle:
|
|
|
- TextStyle(color: Colors.white, fontSize: 16)),
|
|
|
+ itemStyle: TextStyle(color: Colors.white, fontWeight: FontWeight.bold),
|
|
|
+ doneStyle: TextStyle(color: Colors.white, fontSize: 16)),
|
|
|
onChanged: (date) {
|
|
|
- print('change $date in time zone ' +
|
|
|
- date.timeZoneOffset.inHours.toString());
|
|
|
+ print('change $date in time zone ' + date.timeZoneOffset.inHours.toString());
|
|
|
}, onConfirm: (date) {
|
|
|
print('confirm $date');
|
|
|
}, currentTime: DateTime.now(), locale: LocaleType.en);
|
|
|
@@ -52,10 +113,8 @@ class HomePage extends StatelessWidget {
|
|
|
)),
|
|
|
FlatButton(
|
|
|
onPressed: () {
|
|
|
- DatePicker.showTimePicker(context, showTitleActions: true,
|
|
|
- onChanged: (date) {
|
|
|
- print('change $date in time zone ' +
|
|
|
- date.timeZoneOffset.inHours.toString());
|
|
|
+ DatePicker.showTimePicker(context, showTitleActions: true, onChanged: (date) {
|
|
|
+ print('change $date in time zone ' + date.timeZoneOffset.inHours.toString());
|
|
|
}, onConfirm: (date) {
|
|
|
print('confirm $date');
|
|
|
}, currentTime: DateTime.now());
|
|
|
@@ -66,15 +125,11 @@ class HomePage extends StatelessWidget {
|
|
|
)),
|
|
|
FlatButton(
|
|
|
onPressed: () {
|
|
|
- DatePicker.showDateTimePicker(context, showTitleActions: true,
|
|
|
- onChanged: (date) {
|
|
|
- print('change $date in time zone ' +
|
|
|
- date.timeZoneOffset.inHours.toString());
|
|
|
+ DatePicker.showDateTimePicker(context, showTitleActions: true, onChanged: (date) {
|
|
|
+ print('change $date in time zone ' + date.timeZoneOffset.inHours.toString());
|
|
|
}, onConfirm: (date) {
|
|
|
print('confirm $date');
|
|
|
- },
|
|
|
- currentTime: DateTime(2008, 12, 31, 23, 12, 34),
|
|
|
- locale: LocaleType.zh);
|
|
|
+ }, currentTime: DateTime(2008, 12, 31, 23, 12, 34), locale: LocaleType.zh);
|
|
|
},
|
|
|
child: Text(
|
|
|
'show date time picker (Chinese)',
|
|
|
@@ -82,10 +137,8 @@ class HomePage extends StatelessWidget {
|
|
|
)),
|
|
|
FlatButton(
|
|
|
onPressed: () {
|
|
|
- DatePicker.showDateTimePicker(context, showTitleActions: true,
|
|
|
- onChanged: (date) {
|
|
|
- print('change $date in time zone ' +
|
|
|
- date.timeZoneOffset.inHours.toString());
|
|
|
+ DatePicker.showDateTimePicker(context, showTitleActions: true, onChanged: (date) {
|
|
|
+ print('change $date in time zone ' + date.timeZoneOffset.inHours.toString());
|
|
|
}, onConfirm: (date) {
|
|
|
print('confirm $date');
|
|
|
}, currentTime: DateTime(2008, 12, 31, 23, 12, 34));
|
|
|
@@ -96,15 +149,11 @@ class HomePage extends StatelessWidget {
|
|
|
)),
|
|
|
FlatButton(
|
|
|
onPressed: () {
|
|
|
- DatePicker.showDateTimePicker(context, showTitleActions: true,
|
|
|
- onChanged: (date) {
|
|
|
- print('change $date in time zone ' +
|
|
|
- date.timeZoneOffset.inHours.toString());
|
|
|
+ DatePicker.showDateTimePicker(context, showTitleActions: true, onChanged: (date) {
|
|
|
+ print('change $date in time zone ' + date.timeZoneOffset.inHours.toString());
|
|
|
}, onConfirm: (date) {
|
|
|
print('confirm $date');
|
|
|
- },
|
|
|
- currentTime: DateTime(2008, 12, 31, 23, 12, 34),
|
|
|
- locale: LocaleType.nl);
|
|
|
+ }, currentTime: DateTime(2008, 12, 31, 23, 12, 34), locale: LocaleType.nl);
|
|
|
},
|
|
|
child: Text(
|
|
|
'show date time picker (Dutch)',
|
|
|
@@ -112,15 +161,11 @@ class HomePage extends StatelessWidget {
|
|
|
)),
|
|
|
FlatButton(
|
|
|
onPressed: () {
|
|
|
- DatePicker.showDateTimePicker(context, showTitleActions: true,
|
|
|
- onChanged: (date) {
|
|
|
- print('change $date in time zone ' +
|
|
|
- date.timeZoneOffset.inHours.toString());
|
|
|
+ DatePicker.showDateTimePicker(context, showTitleActions: true, onChanged: (date) {
|
|
|
+ print('change $date in time zone ' + date.timeZoneOffset.inHours.toString());
|
|
|
}, onConfirm: (date) {
|
|
|
print('confirm $date');
|
|
|
- },
|
|
|
- currentTime: DateTime(2008, 12, 31, 23, 12, 34),
|
|
|
- locale: LocaleType.ru);
|
|
|
+ }, currentTime: DateTime(2008, 12, 31, 23, 12, 34), locale: LocaleType.ru);
|
|
|
},
|
|
|
child: Text(
|
|
|
'show date time picker (Russian)',
|
|
|
@@ -128,20 +173,28 @@ class HomePage extends StatelessWidget {
|
|
|
)),
|
|
|
FlatButton(
|
|
|
onPressed: () {
|
|
|
- DatePicker.showDateTimePicker(context, showTitleActions: true,
|
|
|
- onChanged: (date) {
|
|
|
- print('change $date in time zone ' +
|
|
|
- date.timeZoneOffset.inHours.toString());
|
|
|
+ DatePicker.showDateTimePicker(context, showTitleActions: true, onChanged: (date) {
|
|
|
+ print('change $date in time zone ' + date.timeZoneOffset.inHours.toString());
|
|
|
}, onConfirm: (date) {
|
|
|
print('confirm $date');
|
|
|
- },
|
|
|
- currentTime: DateTime.utc(2019, 12, 31, 23, 12, 34),
|
|
|
- locale: LocaleType.de);
|
|
|
+ }, currentTime: DateTime.utc(2019, 12, 31, 23, 12, 34), locale: LocaleType.de);
|
|
|
},
|
|
|
child: Text(
|
|
|
'show date time picker in UTC (German)',
|
|
|
style: TextStyle(color: Colors.blue),
|
|
|
)),
|
|
|
+ FlatButton(
|
|
|
+ onPressed: () {
|
|
|
+ DatePicker.showPicker(context, showTitleActions: true, onChanged: (date) {
|
|
|
+ print('change $date in time zone ' + date.timeZoneOffset.inHours.toString());
|
|
|
+ }, onConfirm: (date) {
|
|
|
+ print('confirm $date');
|
|
|
+ }, pickerModel: CustomPicker(currentTime: DateTime.now()), locale: LocaleType.en);
|
|
|
+ },
|
|
|
+ child: Text(
|
|
|
+ 'show custom time picker,\nyou can custom picker model like this',
|
|
|
+ style: TextStyle(color: Colors.blue),
|
|
|
+ )),
|
|
|
],
|
|
|
),
|
|
|
),
|