多次使用showTimePicker给多个变量赋值时间
Using showTimePicker multiple times to assign times to multiple variables
我正在使用 showTimePicker
从用户那里获取时间。我可以随心所欲地获取时间并将其分配给一个变量time
。问题是,在我的代码中会有很多实例,我想获取时间但将其设为一个全新的变量,time2
或 time3
或其他变量。在我的代码中,每当我调用函数 selectTime()
时,它只会为一个变量 time
设置值。我也不确定它如何影响 timeOfDay picked;
。我可以通过为每个变量编写一个新的 selectTime()
函数来解决这些问题,但这看起来很糟糕。
如何更改我的代码,以便可以在不更改其他变量时间的情况下为任何变量分配新时间。我对 flutter 还很陌生,非常感谢任何帮助。
下面是我的代码。当然我会有另一个凸起的按钮用于更改 time2
.
干杯
import 'dart:async';
void main(){
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Troponin Algorithm',
home: CustomForm(),
);
}
}
class CustomForm extends StatefulWidget {
@override
_CustomFormState createState() => _CustomFormState();
}
class _CustomFormState extends State<CustomForm> {
timeFormatter(number) {
//String str;
if (number > 9) {
return number.toString();
}
else {
//str = '0'+number.toString();
return '0'+number.toString();
}
}
TimeOfDay time = TimeOfDay.now();
TimeOfDay time2 = TimeOfDay.now();
TimeOfDay picked;
String hour;
String mins;
String hour2;
String mins2;
Future<Null> selectTime(BuildContext context) async {
picked = await showTimePicker(
context: context,
initialTime: time,
);
if (picked != null) {
setState(() {
time = picked;
});
}
}
@override
Widget build(BuildContext context) {
mins = timeFormatter(time.minute);
hour = timeFormatter(time.hour);
//mins2 = timeFormatter(time2.minute);
return Scaffold(
appBar: AppBar(
title: Text('Troponin Algorthm')
),
body: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Row(
children: <Widget>[
Expanded(
child: Text('time is $hour:$mins'), //'${_time.hour}:${_time.minute}'
),
RaisedButton(
child: Text('change time'),
onPressed: () {
setState(() {
selectTime(context);
});
}
),
],
),
Text('time1 is: $time'),
],
)
);
}```
而不是 selectTime
returning a Future<Null>
,您可以将其修改为 return a Future<TimeOfDay>
。 docs 指定 showTimePicker
将 return 根据用户的选择 Future<TimeOfDay>
或 null
如果用户取消对话。
Future<TimeOfDay> selectTime(BuildContext context) async {
picked = await showTimePicker(
context: context,
initialTime: time,
);
return picked;
}
并像这样更改您的 RaisedButton
:
RaisedButton(
child: Text('change time'),
onPressed: () async {
// We wait for either a Future<TimeOfDay> or a null
var temp = await selectTime(context) ;
if (temp != null) {
setState(() {
time = temp;
});
}
},
),
我正在使用 showTimePicker
从用户那里获取时间。我可以随心所欲地获取时间并将其分配给一个变量time
。问题是,在我的代码中会有很多实例,我想获取时间但将其设为一个全新的变量,time2
或 time3
或其他变量。在我的代码中,每当我调用函数 selectTime()
时,它只会为一个变量 time
设置值。我也不确定它如何影响 timeOfDay picked;
。我可以通过为每个变量编写一个新的 selectTime()
函数来解决这些问题,但这看起来很糟糕。
如何更改我的代码,以便可以在不更改其他变量时间的情况下为任何变量分配新时间。我对 flutter 还很陌生,非常感谢任何帮助。
下面是我的代码。当然我会有另一个凸起的按钮用于更改 time2
.
干杯
import 'dart:async';
void main(){
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Troponin Algorithm',
home: CustomForm(),
);
}
}
class CustomForm extends StatefulWidget {
@override
_CustomFormState createState() => _CustomFormState();
}
class _CustomFormState extends State<CustomForm> {
timeFormatter(number) {
//String str;
if (number > 9) {
return number.toString();
}
else {
//str = '0'+number.toString();
return '0'+number.toString();
}
}
TimeOfDay time = TimeOfDay.now();
TimeOfDay time2 = TimeOfDay.now();
TimeOfDay picked;
String hour;
String mins;
String hour2;
String mins2;
Future<Null> selectTime(BuildContext context) async {
picked = await showTimePicker(
context: context,
initialTime: time,
);
if (picked != null) {
setState(() {
time = picked;
});
}
}
@override
Widget build(BuildContext context) {
mins = timeFormatter(time.minute);
hour = timeFormatter(time.hour);
//mins2 = timeFormatter(time2.minute);
return Scaffold(
appBar: AppBar(
title: Text('Troponin Algorthm')
),
body: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Row(
children: <Widget>[
Expanded(
child: Text('time is $hour:$mins'), //'${_time.hour}:${_time.minute}'
),
RaisedButton(
child: Text('change time'),
onPressed: () {
setState(() {
selectTime(context);
});
}
),
],
),
Text('time1 is: $time'),
],
)
);
}```
而不是 selectTime
returning a Future<Null>
,您可以将其修改为 return a Future<TimeOfDay>
。 docs 指定 showTimePicker
将 return 根据用户的选择 Future<TimeOfDay>
或 null
如果用户取消对话。
Future<TimeOfDay> selectTime(BuildContext context) async {
picked = await showTimePicker(
context: context,
initialTime: time,
);
return picked;
}
并像这样更改您的 RaisedButton
:
RaisedButton(
child: Text('change time'),
onPressed: () async {
// We wait for either a Future<TimeOfDay> or a null
var temp = await selectTime(context) ;
if (temp != null) {
setState(() {
time = temp;
});
}
},
),