颤振:帮助评估功能并在颤振中按下按钮即可显示输出

时间:2020-06-23 15:49:17

标签: function flutter dart widget output

我想克隆一个https://sleepyti.me/的应用程序,这是我当前的布局:https://imgur.com/rby0aBN

我还没有完成所有功能,但是正努力在按下按钮时显示结果。我的功能是:

void CalcBedTime(){
  var bedArr = [];
  DateTime nowDate = DateTime.now();
  for(var i = 0; i >= 7; i++){
    var nowHour = nowDate.hour;
    var newHour1 = nowDate.add(Duration(minutes: 90));
    String formatDate1 = DateFormat.jm().format(newHour1);
    bedArr.add(formatDate1);
  }
  print(bedArr);
}

由于此当前功能没有时间输入,因此当前仅在该功能上起作用,如果您在当前时间入睡,该功能会花费一些时间来唤醒。我也不确定是否应该保持该函数为空,只是让它打印返回数组或让它返回数组值。我的按钮是:

FlatButton(
                color: Colors.blue,
                textColor: Colors.white,
                disabledColor: Colors.grey,
                disabledTextColor: Colors.black,
                padding: EdgeInsets.all(8.0),
                splashColor: Colors.blueAccent,
                onPressed:  ()   {  
                  Navigator.push(
                    context,
                    MaterialPageRoute(builder: (context) => SleepNowPage(title: 'Sleep Now Page',)),
                  );

                  /*...*/
                },
                child: Text(
                  "I'm going to sleep now" ,
                  style: TextStyle(fontSize: 20.0),
                ),
              )

我不太确定如何或在哪里评估函数,然后如何给出要打印的返回数组。我的SleepNowPage具有:

return Scaffold(
  appBar: AppBar(
   
    title: Text(widget.title),
  ),
  body: Center(
    
    child: Column(
      
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        Text(
            'If you sleep now you should wake up at: \n '
        ),

      ],
    ),
  ),
  floatingActionButton: FloatingActionButton(
    onPressed: _incrementCounter,
    tooltip: 'Increment',
    child: Icon(Icons.add),
  ), // This trailing comma makes auto-formatting nicer for build methods.
);

很抱歉,如果这不容易理解,我是新手,希望获得任何帮助。

1 个答案:

答案 0 :(得分:0)

尝试此功能:

  List<String> calcBedTime({
int hour,
int minute,
int second,
}) {
int sleepCycle = 90;
bool useCurrentTime;
if (hour != null && minute != null && second != null) {
  useCurrentTime = false;
} else {
  useCurrentTime = true;
}
DateTime nowDate = useCurrentTime
    ? DateTime.now()
    : DateTime.parse('2020-02-27 $hour:$minute:$second');

List<DateTime> bedArr = [
  nowDate.add(Duration(minutes: sleepCycle * 1)),
  nowDate.add(Duration(minutes: sleepCycle * 2)),
  nowDate.add(Duration(minutes: sleepCycle * 3)),
];
List<String> bedArrInHours =
    bedArr.map((item) => '${item.hour}:${item.minute}').toList();
print(bedArrInHours);
return bedArrInHours;
}

如果您想现在就入睡,请使用:

calcBedTime();

结果将是:

[19:54, 21:24, 22:54]

如果您想在特定时间入睡,请传递可选参数(只需确保提供的值是两个字符长)即可:

calcBedTime(hour: 12 , minute: 30 , second: 10);

注意:该函数仅返回3个睡眠时间,您可以像我一样或更好地通过对其进行硬编码来添加更多时间,但是使用一个非常简单的for循环可以做到。 注意2:2020:02:27的日期并不重要,仅使用DateTime.parse()接受的格式即可。