Flutter中Date picker使用

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)

猜你喜欢

转载自blog.csdn.net/weixin_34293911/article/details/86785059