Skip to content

Commit

Permalink
fix bug
Browse files Browse the repository at this point in the history
  • Loading branch information
Liu Yanbo committed Aug 31, 2018
1 parent e4ed067 commit 4509c80
Show file tree
Hide file tree
Showing 9 changed files with 186 additions and 206 deletions.
226 changes: 126 additions & 100 deletions .idea/workspace.xml

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# flutter_datetime_picker

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

## Getting Started

Expand Down
59 changes: 8 additions & 51 deletions example/lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -35,17 +35,14 @@ class HomePage extends StatelessWidget {
body: Center(
child: FlatButton(
onPressed: () {
DatePicker.showDatePicker(
context,
showTitleActions: true,
locale: 'zh',
onChanged: (date) {
print('change $date');
},
onConfirm: (date) {
print('confirm $date');
},
);
DatePicker.showDatePicker(context, showTitleActions: true, locale: 'zh',
onChanged: (date) {
print('change $date');
}, onConfirm: (date) {
print('confirm $date');
},
pickerModel: DatePickerModel(
minYear: 2000, maxYear: 2019, currentTime: DateTime(2017, 93)));
},
child: Text(
'show date time picker',
Expand All @@ -55,43 +52,3 @@ class HomePage extends StatelessWidget {
);
}
}

class hello extends StatefulWidget {
@override
_helloState createState() => _helloState();
}

class _helloState extends State<hello> {
@override
void initState() {
// TODO: implement initState
super.initState();
}

@override
void dispose() {
// TODO: implement dispose
super.dispose();
}

@override
void didUpdateWidget(hello oldWidget) {
// TODO: implement didUpdateWidget
super.didUpdateWidget(oldWidget);
}

@override
void didChangeDependencies() {
// TODO: implement didChangeDependencies
super.didChangeDependencies();
}

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(''),
),
);
}
}
2 changes: 1 addition & 1 deletion example/pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ packages:
path: ".."
relative: true
source: path
version: "0.0.1"
version: "0.1.0"
flutter_test:
dependency: "direct dev"
description: flutter
Expand Down
43 changes: 14 additions & 29 deletions example/test/widget_test.dart
Original file line number Diff line number Diff line change
@@ -1,29 +1,14 @@
// This is a basic Flutter widget test.
// To perform an interaction with a widget in your test, use the WidgetTester utility that Flutter
// provides. For example, you can send tap and scroll gestures. You can also use WidgetTester to
// find child widgets in the widget tree, read text, and verify that the values of widget properties
// are correct.

import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';

import 'package:example/main.dart';

void main() {
testWidgets('Counter increments smoke test', (WidgetTester tester) async {
// Build our app and trigger a frame.
await tester.pumpWidget(new MyApp());

// Verify that our counter starts at 0.
expect(find.text('0'), findsOneWidget);
expect(find.text('1'), findsNothing);

// Tap the '+' icon and trigger a frame.
await tester.tap(find.byIcon(Icons.add));
await tester.pump();

// Verify that our counter has incremented.
expect(find.text('0'), findsNothing);
expect(find.text('1'), findsOneWidget);
});
}
//// This is a basic Flutter widget test.
//// To perform an interaction with a widget in your test, use the WidgetTester utility that Flutter
//// provides. For example, you can send tap and scroll gestures. You can also use WidgetTester to
//// find child widgets in the widget tree, read text, and verify that the values of widget properties
//// are correct.
//
//import 'package:flutter/material.dart';
//import 'package:flutter_test/flutter_test.dart';
//
//import 'package:example/main.dart';
//
//void main() {
// testWidgets('Counter increments smoke test', (WidgetTester tester) async {});
//}
27 changes: 18 additions & 9 deletions lib/dateModel.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import 'dart:math';

abstract class BasePickerModel {
String leftStringAtIndex(int index);
String middleStringAtIndex(int index);
Expand Down Expand Up @@ -77,14 +79,11 @@ class DatePickerModel extends CommonPickerModel {
int minYear;

List<int> _leapYearMonths = const <int>[1, 3, 5, 7, 8, 10, 12];
int _calcDateCount() {
final currentYear = _currentLeftIndex + minYear;
final currentMonth = _currentMiddleIndex + 1;

if (_leapYearMonths.contains(currentMonth)) {
int _calcDateCount(int year, int month) {
if (_leapYearMonths.contains(month)) {
return 31;
} else if (currentMonth == 2) {
if ((currentYear % 4 == 0 && currentYear % 100 != 0) || currentYear % 400 == 0) {
} else if (month == 2) {
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
return 29;
}
return 28;
Expand All @@ -93,7 +92,16 @@ class DatePickerModel extends CommonPickerModel {
}

DatePickerModel({this.maxYear = 2050, this.minYear = 1970, DateTime currentTime, String locale})
: super(currentTime: currentTime ?? DateTime.now(), locale: locale) {
: super(locale: locale) {
if (currentTime != null) {
int year = currentTime.year;
if (this.maxYear < year) {
currentTime = DateTime(this.maxYear, 12, 31);
} else if (this.minYear > year) {
currentTime = DateTime(this.minYear, 1, 1);
}
}
this.currentTime = currentTime ?? DateTime.now();
_currentLeftIndex = this.currentTime.year - minYear;
_currentMiddleIndex = this.currentTime.month - 1;
_currentRightIndex = this.currentTime.day - 1;
Expand All @@ -104,7 +112,8 @@ class DatePickerModel extends CommonPickerModel {
this.middleList = List.generate(12, (int index) {
return '${index + 1}${_localeMonth()}';
});
this.rightList = List.generate(_calcDateCount(), (int index) {
this.rightList = List.generate(
_calcDateCount(_currentLeftIndex + minYear, _currentMiddleIndex + 1), (int index) {
return '${index + 1}${_localeDay()}';
});
}
Expand Down
18 changes: 10 additions & 8 deletions lib/flutter_datetime_picker.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
library flutter_datetime_picker;

export 'dateModel.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'dateModel.dart';
Expand All @@ -20,17 +21,18 @@ class DatePicker {
{bool showTitleActions: true,
DateChangedCallback onChanged,
DateChangedCallback onConfirm,
locale: 'en_NZ'}) {
locale: 'en_NZ',
BasePickerModel pickerModel}) {
Navigator.push(
context,
new _DatePickerRoute(
showTitleActions: showTitleActions,
onChanged: onChanged,
onConfirm: onConfirm,
locale: locale,
theme: Theme.of(context, shadowThemeOnly: true),
barrierLabel: MaterialLocalizations.of(context).modalBarrierDismissLabel,
));
showTitleActions: showTitleActions,
onChanged: onChanged,
onConfirm: onConfirm,
locale: locale,
theme: Theme.of(context, shadowThemeOnly: true),
barrierLabel: MaterialLocalizations.of(context).modalBarrierDismissLabel,
pickerModel: pickerModel));
}
}

Expand Down
4 changes: 2 additions & 2 deletions pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
name: flutter_datetime_picker
description: A date time picker for flutter
version: 0.1.0
author:
homepage:
author: Realank <[email protected]>
homepage: https://github.com/Realank

environment:
sdk: ">=2.0.0-dev.68.0 <3.0.0"
Expand Down
11 changes: 6 additions & 5 deletions test/flutter_datetime_picker_test.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import 'package:test/test.dart';

void main() {
test('adds one to input values', () {});
}
//import 'package:test/test.dart';
//import 'package:flutter_datetime_picker/flutter_datetime_picker.dart';
//
//void main() {
// test('adds one to input values', () {});
//}

0 comments on commit 4509c80

Please sign in to comment.