使用日期选择器从表单中获取价值

时间:2019-09-23 16:34:10

标签: flutter dart

我无法设置状态以使用日期选择器从文本字段获取值。

如果选择的日期介于startend之间,那么如何在文本字段中返回值。我最初将pressed设置为false,当它按下时变为true,它将从文本字段返回值。

import 'package:flutter/material.dart';

void main() => runApp(MaterialApp(
      home: MyApp(),
    ));

class MyApp extends StatefulWidget {
  @override
  MyAppState createState() {
    return new MyAppState();
  }
}

class MyAppState extends State<MyApp> {
  bool pressed = false;

  final myController = TextEditingController();
  DateTime selectedDate = DateTime.now();

  Future<Null> _selectDate(BuildContext context) async {
    final DateTime picked = await showDatePicker(
        context: context,
        initialDate: selectedDate,
        firstDate: DateTime(2015, 8),
        lastDate: DateTime(2101));
    if (picked != null && picked != selectedDate)
      setState(() {
        selectedDate = picked;
      });
  }

  @override
  void dispose() {
    // Clean up the controller when the widget is disposed.
    myController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('First Route'),
      ),
      body: Column(
        children: <Widget>[
          TextField(
            controller: myController,
            decoration: new InputDecoration(labelText: "Enter a number"),
            keyboardType: TextInputType.number,
          ),
          SizedBox(
            height: 50.0,
          ),
          RaisedButton(
            onPressed: () => _selectDate(context),
            child: Text('Select date'),
          ),
          RaisedButton(
            child: Text("show text"),
            onPressed: () {

              DateTime start = DateTime(2019, 01, 01);
              final end = DateTime(2022, 12, 31);

              if (selectedDate.isAfter(start) && selectedDate.isBefore(end)) {
                return pressed = true;
              } else {
                return pressed = false;
              }
            },
          ),
          pressed ? Text(myController.text) : Text('no'),
        ],
      ),
    );
  }
}

1 个答案:

答案 0 :(得分:0)

    final myController = TextEditingController();
  DateTime selectedDate = DateTime.now();

  Future<Null> _selectDate(BuildContext context) async {
    final DateTime picked = await showDatePicker(
        context: context,
        initialDate: selectedDate,
        firstDate: DateTime(2015, 8),
        lastDate: DateTime(2101));
    if (picked != null && picked != selectedDate)
      setState(() {
        selectedDate = picked;
        myController.text = selectedDate.toString();
      });
  }