Flutter - CupertinoDatePicker initialDateTime 只更新一次
Flutter - CupertinoDatePicker initialDateTime updates only once
我创建了一个 CupertinoDatePicker
小部件,初始值设置为一个变量。
我想在用户单击屏幕中的另一个小部件时将选择器中的选定值更新为该变量值 - 但它不起作用(尽管 CupertinoDatePicker
小部件已重建)。
是bug还是我做错了什么?
代码(可以复制粘贴到dartPad):
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
final Color darkBlue = Color.fromARGB(255, 18, 32, 47);
final _time = DateTime.now();
int _min = 5;
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData.dark().copyWith(scaffoldBackgroundColor: darkBlue),
debugShowCheckedModeBanner: false,
home: Scaffold(
body: Center(
child: MyWidget(),
),
),
);
}
}
class MyWidget extends StatefulWidget {
@override
createState() => MyWidgetSate();
}
class MyWidgetSate extends State<MyWidget> {
@override
Widget build(BuildContext context) {
return Column(
children: [
Text('_min = ' + _min.toString(), style: Theme.of(context).textTheme.headline4),
_buildDurationPicker(context),
RaisedButton(
onPressed: () {
print('hello');
setState(() {
_min += 5;
});
},
child: const Text('Add', style: TextStyle(fontSize: 20)),
),
],
);
}
}
Widget _buildDurationPicker(BuildContext context) {
DateTime initDateTime = DateTime(_time.year, _time.month, _time.day)
.add(Duration(minutes: _min));
return Container(
height: 216.0,
color: Colors.white,
child: CupertinoDatePicker(
mode: CupertinoDatePickerMode.time,
use24hFormat: true,
initialDateTime: initDateTime,
backgroundColor: Colors.transparent,
onDateTimeChanged: (DateTime date) {
//
},
),
);
}
CupertinoDatePicker
正在内部维护状态并且仅在其 initState
上设置 initialDateTime
,尽管您更新了小部件的状态。
要在每次设置 initialDateTime
时强制重建,请将 UniqueKey()
指定为 CupertinoDatePicker
的 key
,它会在每次状态更改时重建有了新的 initDateTime
.
(...)
CupertinoDatePicker(
key: UniqueKey(),
mode: CupertinoDatePickerMode.time,
use24hFormat: true,
initialDateTime: initDateTime,
backgroundColor: Colors.transparent,
onDateTimeChanged: (DateTime date) {
//
},
),
我创建了一个 CupertinoDatePicker
小部件,初始值设置为一个变量。
我想在用户单击屏幕中的另一个小部件时将选择器中的选定值更新为该变量值 - 但它不起作用(尽管 CupertinoDatePicker
小部件已重建)。
是bug还是我做错了什么?
代码(可以复制粘贴到dartPad):
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
final Color darkBlue = Color.fromARGB(255, 18, 32, 47);
final _time = DateTime.now();
int _min = 5;
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData.dark().copyWith(scaffoldBackgroundColor: darkBlue),
debugShowCheckedModeBanner: false,
home: Scaffold(
body: Center(
child: MyWidget(),
),
),
);
}
}
class MyWidget extends StatefulWidget {
@override
createState() => MyWidgetSate();
}
class MyWidgetSate extends State<MyWidget> {
@override
Widget build(BuildContext context) {
return Column(
children: [
Text('_min = ' + _min.toString(), style: Theme.of(context).textTheme.headline4),
_buildDurationPicker(context),
RaisedButton(
onPressed: () {
print('hello');
setState(() {
_min += 5;
});
},
child: const Text('Add', style: TextStyle(fontSize: 20)),
),
],
);
}
}
Widget _buildDurationPicker(BuildContext context) {
DateTime initDateTime = DateTime(_time.year, _time.month, _time.day)
.add(Duration(minutes: _min));
return Container(
height: 216.0,
color: Colors.white,
child: CupertinoDatePicker(
mode: CupertinoDatePickerMode.time,
use24hFormat: true,
initialDateTime: initDateTime,
backgroundColor: Colors.transparent,
onDateTimeChanged: (DateTime date) {
//
},
),
);
}
CupertinoDatePicker
正在内部维护状态并且仅在其 initState
上设置 initialDateTime
,尽管您更新了小部件的状态。
要在每次设置 initialDateTime
时强制重建,请将 UniqueKey()
指定为 CupertinoDatePicker
的 key
,它会在每次状态更改时重建有了新的 initDateTime
.
(...)
CupertinoDatePicker(
key: UniqueKey(),
mode: CupertinoDatePickerMode.time,
use24hFormat: true,
initialDateTime: initDateTime,
backgroundColor: Colors.transparent,
onDateTimeChanged: (DateTime date) {
//
},
),