class _MyHomePageState extends State<MyHomePage> {
DateTime _dateTime = DateTime.now(); // 要做个初始化,不然后面不能传入null
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('BottomNavigationBar Sample'),
),
body: Center(
child: new ListView(
children: <Widget>[
new FlatButton(
onPressed: _showDatePicker,
child: new Text('date picker'),
),
new Padding(
padding: new EdgeInsets.all(10.0),
child: new Text(_dateTime.toString()),
),
],
),
),
);
}
void _showDatePicker() {
_selectDate(context);
}
Future<Null> _selectDate(BuildContext context) async {
final DateTime _picked = await showDatePicker(
context: context,
initialDate: _dateTime, // 不能传入null
firstDate: new DateTime(2017),
lastDate: new DateTime(2021),
);
if (_picked != null) {
print(_picked);
setState(() {
_dateTime = _picked;
});
}
}
}
否则会出错:_dateTime为null,然后调用了isBefore方法,报错。
[VERBOSE-2:shell.cc(184)] Dart Error: Unhandled exception:
NoSuchMethodError: The method 'isBefore' was called on null.
Receiver: null
Tried calling: isBefore(Instance of 'DateTime')
#0 Object.noSuchMethod (dart:core/runtime/libobject_patch.dart:50:5)
#1 showDatePicker (package:flutter/src/material/date_picker.dart:1080:23)
<asynchronous suspension>
#2 _MyHomePageState._selectDate (package:flutter_app/main.dart:58:36)
<asynchronous suspension>
#3 _MyHomePageState._showDatePicker (package:flutter_app/main.dart:54:5)
#4 _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:507:14)
#5 _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:562:30)
#6 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:102:24)
#7 TapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:242:9)
#8 TapGestureRecognizer.acceptGesture (package:flutter/src/gestures/tap.dart:204:7)
#9 GestureArenaManager.sweep (package:flutter/src/gestures/arena.dart:156:27)
#10 _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:184:20)
#11 _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:158:22)
#12 _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:138:7)
#13 _WidgetsFlutterBinding&BindingBase&GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:101:7)
#14 _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:85:7)
#15 _invoke1 (dart:ui/hooks.dart:168:13)
#16 _dispatchPointerDataPacket (dart:ui/hooks.dart:122:5)