Ausgabe
Ich versuche, die aus dem showTimePicker-Dialog ausgewählte Zeit anzuzeigen, aber nachdem ich den Wert erhalten habe, wird er wieder null. Nach dem Debuggen scheint es, als ob der Wert, der von der zukünftigen Funktion zurückgegeben wird, abgelaufen ist oder so. nach der Widgets-onPress-Funktion ist es wieder auf null.
ElevatedButton(
child: const Text('Time'),
onPressed: () async {
vTimeSelected = await getTimeSelected(context);
setState(() {
// vStrToRndr = vTimeSelected.toString();
//print(vStrToRndr);
});
},
),
ElevatedButton(
child: const Text('Solid'),
onPressed: () {
setState(() {
vDetail.solid = !vDetail.solid;
});
},
),
],
),
),
if (vDetail.wet == true) Text('Nappy wet'),
if (vDetail.solid == true) Text('Nappy Solid'),
Text('Time: $vTimeSelected'),
[7:35 PM]
Future<TimeOfDay?> getTimeSelected(BuildContext context) async {
TimeOfDay vTime = TimeOfDay(hour: 0, minute: 0);
TimeOfDay? newTime =
await showTimePicker(context: context, initialTime: vTime);
return newTime;
//print($newTime);
}
//thanks for any help
Text('Time: $vTimeSelected') //<---- this is displaying null
Lösung
Sie können dieser Codestruktur folgen. Stellen Sie sicher, dass Sie die Variable außerhalb der Build-Methode deklarieren.
class TS extends StatefulWidget {
const TS({super.key});
@override
State<TS> createState() => _TSState();
}
class _TSState extends State<TS> {
TimeOfDay? vTimeSelected;
@override
Widget build(BuildContext context) {
return Scaffold(
floatingActionButton: FloatingActionButton(onPressed: () async {
vTimeSelected = await getTimeSelected(context);
setState(() {});
}),
body: Text("${vTimeSelected}"),
);
}
}
Beantwortet von – Yeasin Sheikh
Antwort geprüft von – Robin (FixError Admin)