Получить строки даты от двух отдельных сборщиков даты в Flutter - PullRequest
0 голосов
/ 06 февраля 2020

Если я нажимаю один значок выбора даты, оба текстовых представления получают одинаковые даты. Как различить два нажатия кнопки «Значок» или любые другие методы?
I want to get Two separate dates from different Iconbutton click

DateTime _date = DateTime.now();
          Future<Null> selectDate(BuildContext context) async {
        final DateTime picked = await showDatePicker(
          context: context,
          initialDate: _date,
          firstDate: DateTime(2018),
          lastDate: DateTime(2030),
        );

        if (picked != null) //&& picked!=_date)
            {
          setState(() {
            _date = picked;
            print(_date.toString());
          });
        }
      }

1 Ответ

1 голос
/ 07 февраля 2020

Вы можете скопировать и вставить полный код ниже
Вы можете изменить selectDate для передачи и возврата DateTime

рабочая демонстрация

enter image description here

фрагмент кода

Future<DateTime> selectDate(BuildContext context, DateTime _date) async {
    final DateTime picked = await showDatePicker(
      context: context,
      initialDate: _date,
      firstDate: DateTime(2018),
      lastDate: DateTime(2030),
    );

    if (picked != null) {
      _date = picked;
    }
    return _date;
  }
...  
IconButton(
                      icon: Icon(Icons.calendar_today),
                      onPressed: () async {
                        fromDate = await selectDate(context, fromDate);
                        setState(() {});
                      },
                    ),  
...
IconButton(
                      icon: Icon(Icons.calendar_today),
                      onPressed: () async {
                        toDate = await selectDate(context, toDate);
                        setState(() {});
                      },
                    ),                  

полный код

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

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;
  var formatter = new DateFormat('yyyy-MM-dd');
  DateTime fromDate =
      DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().day);
  DateTime toDate =
      DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().day);

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  Future<DateTime> selectDate(BuildContext context, DateTime _date) async {
    final DateTime picked = await showDatePicker(
      context: context,
      initialDate: _date,
      firstDate: DateTime(2018),
      lastDate: DateTime(2030),
    );

    if (picked != null) {
      _date = picked;
    }
    return _date;
  }

  @override
  void dispose() {
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Row(
              children: <Widget>[
                Text(
                  'From:',
                ),
                IconButton(
                  icon: Icon(Icons.calendar_today),
                  onPressed: () async {
                    fromDate = await selectDate(context, fromDate);
                    setState(() {});
                  },
                ),
                Text('${formatter.format(fromDate)}'),
              ],
            ),
            Row(
              children: <Widget>[
                Text(
                  'To:',
                ),
                IconButton(
                  icon: Icon(Icons.calendar_today),
                  onPressed: () async {
                    toDate = await selectDate(context, toDate);
                    setState(() {});
                  },
                ),
                Text('${formatter.format(toDate)}'),
              ],
            ),
            Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.display1,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...