Flutter-CupertinoDatePicker initialDateTime只更新一次



我创建了一个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()指定为CupertinoDatePickerkey,并且每当您的状态更改为新的initDateTime时,它都会重建。

(...)
CupertinoDatePicker(
key: UniqueKey(),
mode: CupertinoDatePickerMode.time,
use24hFormat: true,
initialDateTime: initDateTime,
backgroundColor: Colors.transparent,
onDateTimeChanged: (DateTime date) {
//
},
),

最新更新