Skip to content

Commit 4509c80

Browse files
author
Liu Yanbo
committed
fix bug
1 parent e4ed067 commit 4509c80

9 files changed

+186
-206
lines changed

.idea/workspace.xml

+126-100
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# flutter_datetime_picker
22

3-
A flutter date time picker
3+
A flutter date time picker inspired by [flutter-cupertino-date-picker](https://github.com/wuzhendev/flutter-cupertino-date-picker)
44

55
## Getting Started
66

example/lib/main.dart

+8-51
Original file line numberDiff line numberDiff line change
@@ -35,17 +35,14 @@ class HomePage extends StatelessWidget {
3535
body: Center(
3636
child: FlatButton(
3737
onPressed: () {
38-
DatePicker.showDatePicker(
39-
context,
40-
showTitleActions: true,
41-
locale: 'zh',
42-
onChanged: (date) {
43-
print('change $date');
44-
},
45-
onConfirm: (date) {
46-
print('confirm $date');
47-
},
48-
);
38+
DatePicker.showDatePicker(context, showTitleActions: true, locale: 'zh',
39+
onChanged: (date) {
40+
print('change $date');
41+
}, onConfirm: (date) {
42+
print('confirm $date');
43+
},
44+
pickerModel: DatePickerModel(
45+
minYear: 2000, maxYear: 2019, currentTime: DateTime(2017, 93)));
4946
},
5047
child: Text(
5148
'show date time picker',
@@ -55,43 +52,3 @@ class HomePage extends StatelessWidget {
5552
);
5653
}
5754
}
58-
59-
class hello extends StatefulWidget {
60-
@override
61-
_helloState createState() => _helloState();
62-
}
63-
64-
class _helloState extends State<hello> {
65-
@override
66-
void initState() {
67-
// TODO: implement initState
68-
super.initState();
69-
}
70-
71-
@override
72-
void dispose() {
73-
// TODO: implement dispose
74-
super.dispose();
75-
}
76-
77-
@override
78-
void didUpdateWidget(hello oldWidget) {
79-
// TODO: implement didUpdateWidget
80-
super.didUpdateWidget(oldWidget);
81-
}
82-
83-
@override
84-
void didChangeDependencies() {
85-
// TODO: implement didChangeDependencies
86-
super.didChangeDependencies();
87-
}
88-
89-
@override
90-
Widget build(BuildContext context) {
91-
return Scaffold(
92-
appBar: AppBar(
93-
title: Text(''),
94-
),
95-
);
96-
}
97-
}

example/pubspec.lock

+1-1
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ packages:
8282
path: ".."
8383
relative: true
8484
source: path
85-
version: "0.0.1"
85+
version: "0.1.0"
8686
flutter_test:
8787
dependency: "direct dev"
8888
description: flutter

example/test/widget_test.dart

+14-29
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,14 @@
1-
// This is a basic Flutter widget test.
2-
// To perform an interaction with a widget in your test, use the WidgetTester utility that Flutter
3-
// provides. For example, you can send tap and scroll gestures. You can also use WidgetTester to
4-
// find child widgets in the widget tree, read text, and verify that the values of widget properties
5-
// are correct.
6-
7-
import 'package:flutter/material.dart';
8-
import 'package:flutter_test/flutter_test.dart';
9-
10-
import 'package:example/main.dart';
11-
12-
void main() {
13-
testWidgets('Counter increments smoke test', (WidgetTester tester) async {
14-
// Build our app and trigger a frame.
15-
await tester.pumpWidget(new MyApp());
16-
17-
// Verify that our counter starts at 0.
18-
expect(find.text('0'), findsOneWidget);
19-
expect(find.text('1'), findsNothing);
20-
21-
// Tap the '+' icon and trigger a frame.
22-
await tester.tap(find.byIcon(Icons.add));
23-
await tester.pump();
24-
25-
// Verify that our counter has incremented.
26-
expect(find.text('0'), findsNothing);
27-
expect(find.text('1'), findsOneWidget);
28-
});
29-
}
1+
//// This is a basic Flutter widget test.
2+
//// To perform an interaction with a widget in your test, use the WidgetTester utility that Flutter
3+
//// provides. For example, you can send tap and scroll gestures. You can also use WidgetTester to
4+
//// find child widgets in the widget tree, read text, and verify that the values of widget properties
5+
//// are correct.
6+
//
7+
//import 'package:flutter/material.dart';
8+
//import 'package:flutter_test/flutter_test.dart';
9+
//
10+
//import 'package:example/main.dart';
11+
//
12+
//void main() {
13+
// testWidgets('Counter increments smoke test', (WidgetTester tester) async {});
14+
//}

lib/dateModel.dart

+18-9
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import 'dart:math';
2+
13
abstract class BasePickerModel {
24
String leftStringAtIndex(int index);
35
String middleStringAtIndex(int index);
@@ -77,14 +79,11 @@ class DatePickerModel extends CommonPickerModel {
7779
int minYear;
7880

7981
List<int> _leapYearMonths = const <int>[1, 3, 5, 7, 8, 10, 12];
80-
int _calcDateCount() {
81-
final currentYear = _currentLeftIndex + minYear;
82-
final currentMonth = _currentMiddleIndex + 1;
83-
84-
if (_leapYearMonths.contains(currentMonth)) {
82+
int _calcDateCount(int year, int month) {
83+
if (_leapYearMonths.contains(month)) {
8584
return 31;
86-
} else if (currentMonth == 2) {
87-
if ((currentYear % 4 == 0 && currentYear % 100 != 0) || currentYear % 400 == 0) {
85+
} else if (month == 2) {
86+
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
8887
return 29;
8988
}
9089
return 28;
@@ -93,7 +92,16 @@ class DatePickerModel extends CommonPickerModel {
9392
}
9493

9594
DatePickerModel({this.maxYear = 2050, this.minYear = 1970, DateTime currentTime, String locale})
96-
: super(currentTime: currentTime ?? DateTime.now(), locale: locale) {
95+
: super(locale: locale) {
96+
if (currentTime != null) {
97+
int year = currentTime.year;
98+
if (this.maxYear < year) {
99+
currentTime = DateTime(this.maxYear, 12, 31);
100+
} else if (this.minYear > year) {
101+
currentTime = DateTime(this.minYear, 1, 1);
102+
}
103+
}
104+
this.currentTime = currentTime ?? DateTime.now();
97105
_currentLeftIndex = this.currentTime.year - minYear;
98106
_currentMiddleIndex = this.currentTime.month - 1;
99107
_currentRightIndex = this.currentTime.day - 1;
@@ -104,7 +112,8 @@ class DatePickerModel extends CommonPickerModel {
104112
this.middleList = List.generate(12, (int index) {
105113
return '${index + 1}${_localeMonth()}';
106114
});
107-
this.rightList = List.generate(_calcDateCount(), (int index) {
115+
this.rightList = List.generate(
116+
_calcDateCount(_currentLeftIndex + minYear, _currentMiddleIndex + 1), (int index) {
108117
return '${index + 1}${_localeDay()}';
109118
});
110119
}

lib/flutter_datetime_picker.dart

+10-8
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
library flutter_datetime_picker;
22

3+
export 'dateModel.dart';
34
import 'package:flutter/cupertino.dart';
45
import 'package:flutter/material.dart';
56
import 'dateModel.dart';
@@ -20,17 +21,18 @@ class DatePicker {
2021
{bool showTitleActions: true,
2122
DateChangedCallback onChanged,
2223
DateChangedCallback onConfirm,
23-
locale: 'en_NZ'}) {
24+
locale: 'en_NZ',
25+
BasePickerModel pickerModel}) {
2426
Navigator.push(
2527
context,
2628
new _DatePickerRoute(
27-
showTitleActions: showTitleActions,
28-
onChanged: onChanged,
29-
onConfirm: onConfirm,
30-
locale: locale,
31-
theme: Theme.of(context, shadowThemeOnly: true),
32-
barrierLabel: MaterialLocalizations.of(context).modalBarrierDismissLabel,
33-
));
29+
showTitleActions: showTitleActions,
30+
onChanged: onChanged,
31+
onConfirm: onConfirm,
32+
locale: locale,
33+
theme: Theme.of(context, shadowThemeOnly: true),
34+
barrierLabel: MaterialLocalizations.of(context).modalBarrierDismissLabel,
35+
pickerModel: pickerModel));
3436
}
3537
}
3638

pubspec.yaml

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
name: flutter_datetime_picker
22
description: A date time picker for flutter
33
version: 0.1.0
4-
author:
5-
homepage:
4+
author: Realank <[email protected]>
5+
homepage: https://github.com/Realank
66

77
environment:
88
sdk: ">=2.0.0-dev.68.0 <3.0.0"
+6-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
import 'package:test/test.dart';
2-
3-
void main() {
4-
test('adds one to input values', () {});
5-
}
1+
//import 'package:test/test.dart';
2+
//import 'package:flutter_datetime_picker/flutter_datetime_picker.dart';
3+
//
4+
//void main() {
5+
// test('adds one to input values', () {});
6+
//}

0 commit comments

Comments
 (0)