如何在颤动中找到两个日期之间的差异?

问题描述 投票:0回答:2

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

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

我使用了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
2个回答
0
投票

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

您可以在initState()方法中初始化变量。


0
投票

您可以像这样在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),
        ],
      ),
    );
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.