我想克隆一个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.
);
很抱歉,如果这不容易理解,我是新手,希望获得任何帮助。
答案 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()接受的格式即可。