Flutter 如何在Flatter中为另一个日期选择器设置一个日期选择器选择的日期为firstdate
我有两个日期选择器字段合同开始日期和合同结束日期。当我选择合同开始日期时,合同结束日期的初始值或第一个日期是选择第一个日期选择器的日期 这里我有两个日期选择器的代码Flutter 如何在Flatter中为另一个日期选择器设置一个日期选择器选择的日期为firstdate,flutter,dart,datepicker,flutter-layout,flutter-dependencies,Flutter,Dart,Datepicker,Flutter Layout,Flutter Dependencies,我有两个日期选择器字段合同开始日期和合同结束日期。当我选择合同开始日期时,合同结束日期的初始值或第一个日期是选择第一个日期选择器的日期 这里我有两个日期选择器的代码 Widget _buildContractBeginDate() { return DateTimeField( format: format, autocorrect: true, autovalidate: false, controller: _contractBeg
Widget _buildContractBeginDate() {
return DateTimeField(
format: format,
autocorrect: true,
autovalidate: false,
controller: _contractBeginDate,
readOnly: true,
validator: (date) => (date == null || _contractBeginDate.text == '')
? 'Please enter valid date'
: null,
decoration: InputDecoration(
labelText: "Contract Begin Date",
hintText: "Contract Begin Date",
prefixIcon: Icon(
FontAwesomeIcons.calendar,
size: 24,
)),
onShowPicker: (context, currentValue) {
return showDatePicker(
context: context,
firstDate: DateTime(1900),
initialDate: currentValue ?? DateTime.now(),
lastDate: DateTime(2022),
);
},
);
}
Widget _buildContractEndDate() {
return DateTimeField(
format: format,
autocorrect: true,
autovalidate: false,
controller: _contractEndDate,
readOnly: true,
validator: (date) => (date == null || _contractEndDate.text == '')
? 'Please enter valid date'
: null,
decoration: InputDecoration(
labelText: "Contract End Date",
hintText: "Contract End Date",
prefixIcon: Icon(
FontAwesomeIcons.calendar,
size: 24,
)),
onShowPicker: (context, currentValue) {
return showDatePicker(
context: context,
firstDate: DateTime(1900),
initialDate: currentValue ?? DateTime.now(),
lastDate: DateTime(2022));
},
);
}
我创建了一个与您的有点类似的演示,请参考: TL;DR:使用
ValueNotifier
并从第一个日期选取器更新其值,并始终使用该通知器的值作为第二个日期选取器的第一个日期。通过这种方式,您将始终获得更新的日期
导入“包装:颤振/材料.省道”;
void main(){
runApp(
MaterialApp(主页:MyApp()),
);
}
类MyApp扩展了StatefulWidget{
@凌驾
_MyAppState createState()=>\u MyAppState();
}
类_MyAppState使用SingleTickerProviderStateMixin扩展状态{
ValueNotifier\u dateTimeNotifier=ValueNotifier(DateTime.now());
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(标题:Text('Demo')),
正文:专栏(
儿童:[
_buildContractBeginDate(上下文,_dateTimeNotifier),
_buildContractEndDate(上下文,_dateTimeNotifier),
],
),
);
}
}
Widget\u buildContractBeginDate(BuildContext上下文,ValueNotifier\u dateTimeNotifier){
返回上升按钮(
子项:文本(“开始日期”),
onPressed:()=>showDatePicker(
上下文:上下文,
firstDate:DateTime(1900),
initialDate:_dateTimeNotifier.value,
最后日期:日期时间(2022年),
).然后((DateTime DateTime)=>\u dateTimeNotifier.value=DateTime),
);
}
Widget\u buildContractEndDate(BuildContext上下文,ValueNotifier\u dateTimeNotifier){
返回上升按钮(
子项:文本(“结束日期”),
已按下:(){
返回显示日期选择器(
上下文:上下文,
firstDate:_dateTimeNotifier.value,
initialDate:_dateTimeNotifier.value??DateTime.now(),
最后日期:日期时间(2022年);
},
);
}
我希望这会有所帮助,如果有任何疑问,请发表评论。我创建了一个与您的有点类似的演示,请参考: TL;DR:使用
ValueNotifier
并从第一个日期选取器更新其值,并始终使用该通知器的值作为第二个日期选取器的第一个日期。通过这种方式,您将始终获得更新的日期
导入“包装:颤振/材料.省道”;
void main(){
runApp(
MaterialApp(主页:MyApp()),
);
}
类MyApp扩展了StatefulWidget{
@凌驾
_MyAppState createState()=>\u MyAppState();
}
类_MyAppState使用SingleTickerProviderStateMixin扩展状态{
ValueNotifier\u dateTimeNotifier=ValueNotifier(DateTime.now());
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(标题:Text('Demo')),
正文:专栏(
儿童:[
_buildContractBeginDate(上下文,_dateTimeNotifier),
_buildContractEndDate(上下文,_dateTimeNotifier),
],
),
);
}
}
Widget\u buildContractBeginDate(BuildContext上下文,ValueNotifier\u dateTimeNotifier){
返回上升按钮(
子项:文本(“开始日期”),
onPressed:()=>showDatePicker(
上下文:上下文,
firstDate:DateTime(1900),
initialDate:_dateTimeNotifier.value,
最后日期:日期时间(2022年),
).然后((DateTime DateTime)=>\u dateTimeNotifier.value=DateTime),
);
}
Widget\u buildContractEndDate(BuildContext上下文,ValueNotifier\u dateTimeNotifier){
返回上升按钮(
子项:文本(“结束日期”),
已按下:(){
返回显示日期选择器(
上下文:上下文,
firstDate:_dateTimeNotifier.value,
initialDate:_dateTimeNotifier.value??DateTime.now(),
最后日期:日期时间(2022年);
},
);
}
我希望这有帮助,如果有任何疑问,请发表评论。我很高兴我能帮助:)我很高兴我能帮助:)
import 'package:flutter/material.dart';
void main() {
runApp(
MaterialApp(home: MyApp()),
);
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> with SingleTickerProviderStateMixin {
ValueNotifier<DateTime> _dateTimeNotifier = ValueNotifier<DateTime>(DateTime.now());
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Demo')),
body: Column(
children: <Widget>[
_buildContractBeginDate(context, _dateTimeNotifier),
_buildContractEndDate(context, _dateTimeNotifier),
],
),
);
}
}
Widget _buildContractBeginDate(BuildContext context, ValueNotifier<DateTime> _dateTimeNotifier) {
return RaisedButton(
child: Text('Begin Date'),
onPressed: () => showDatePicker(
context: context,
firstDate: DateTime(1900),
initialDate: _dateTimeNotifier.value,
lastDate: DateTime(2022),
).then((DateTime dateTime) => _dateTimeNotifier.value = dateTime),
);
}
Widget _buildContractEndDate(BuildContext context,ValueNotifier<DateTime> _dateTimeNotifier) {
return RaisedButton(
child: Text('End Date'),
onPressed: () {
return showDatePicker(
context: context,
firstDate: _dateTimeNotifier.value,
initialDate: _dateTimeNotifier.value ?? DateTime.now(),
lastDate: DateTime(2022));
},
);
}