【问题标题】:How to find difference between two dates in flutter?如何在颤动中找到两个日期之间的差异?
【发布时间】:2019-10-13 18:14:57
【问题描述】:

我正在尝试一个颤振应用程序,它可以计算两个日期之间的差异并以天为单位显示。

但由于某种原因,我无法正确理解逻辑。我创建了足够的变量来保存当前日期和另一个变量来保存旧日期,但是,我仍然缺少一些东西。

我使用了FLutter_datetime_picker 包。

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_datetime_picker/flutter_datetime_picker.dart';

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

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

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key}) : super(key: key);

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

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    final currentDate = DateTime.now();
    final oldDate = DateTime.tryParse();
    final difference = currentDate.difference(oldDate).inDays;
    return Scaffold(
      body: Row(
        children: <Widget>[
          Center(
            child: RaisedButton(
                child: Text("data"),
                onPressed: () => DatePicker.showDatePicker(context,
                        showTitleActions: true,
                        currentTime: currentDate,
                        minTime: DateTime(1990, 1, 1), onConfirm: (date) {
                      setState(() {
                        date = oldDate;
                      });
                      print(difference);
                    })),
          ),
          Text(difference.toString())
        ],
      ),
    );
  }
}

【问题讨论】:

    标签: flutter dart flutter-layout


    【解决方案1】:

    您可以在onConfirm 方法中选择新日期时计算差异,如下所示:

    class _MyHomePageState extends State<MyHomePage> {
      DateTime currentDate = DateTime.now();
      String difference = "";
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: Row(
            children: <Widget>[
              Center(
                child: RaisedButton(
                  child: Text("data"),
                  onPressed: () => DatePicker.showDatePicker(
                    context,
                    showTitleActions: true,
                    currentTime: currentDate,
                    minTime: DateTime(1990, 1, 1),
                    onConfirm: (date) {
                      setState(() {
                        difference = "${currentDate.difference(date).inDays}";
                      });
                      print(difference);
                    },
                  ),
                ),
              ),
              Text(difference),
            ],
          ),
        );
      }
    }
    

    【讨论】:

      【解决方案2】:

      您应该将变量放在build() 方法之外,因为当您调用setState() 时,会再次调用build() 方法。

      您可以在initState() 方法中初始化变量,或者在这种情况下,您可以通过初始化声明它们。

      【讨论】:

        【解决方案3】:

        使用此代码

        DateTime date1 = DateTime.now();
        DateTime date2 = DateTime.now().add(Duration(days: 1));
        Future<int> getDifference(DateTime date1,DateTime date2) async {
            print('date1 $date1');
            print('date2 $date2');
            print("${date1.difference(date2).inHours}");
            return date1.difference(date2).inHours;
        }
        

        【讨论】:

        • 虽然此代码可能会解决问题,including an explanation 关于如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请edit您的答案添加解释并说明适用的限制和假设。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-24
        • 2017-09-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多