Android 在颤振应用程序中添加时间选择器的正确方法是什么?

Android 在颤振应用程序中添加时间选择器的正确方法是什么?,android,ios,flutter,dart,flutter-layout,Android,Ios,Flutter,Dart,Flutter Layout,在我的应用程序中,用户需要为任务手动选择时间,但我不知道在Flatter应用程序中使用时间选择器并由用户手动选择时间(每天)的正确方法。首先在类级别声明此变量 TimeOfDay selectedTime = TimeOfDay.now(); 然后调用这个方法- Future<void> _selectTime(BuildContext context) async { final TimeOfDay picked_s = await showTimePicker( con

在我的应用程序中,用户需要为任务手动选择时间,但我不知道在Flatter应用程序中使用时间选择器并由用户手动选择时间(每天)的正确方法。

首先在类级别声明此变量

TimeOfDay selectedTime = TimeOfDay.now();
然后调用这个方法-

Future<void> _selectTime(BuildContext context) async {
final TimeOfDay picked_s = await showTimePicker(
    context: context,
    initialTime: selectedTime, builder: (BuildContext context, Widget child) {
       return MediaQuery(
         data: MediaQuery.of(context).copyWith(alwaysUse24HourFormat: false),
        child: child,
      );});

if (picked_s != null && picked_s != selectedTime )
  setState(() {
    selectedTime = picked_s;
  });
}
Future\u selectTime(BuildContext上下文)异步{
最终拾取的日期时间=等待显示时间选择器(
上下文:上下文,
initialTime:selectedTime,生成器:(构建上下文,小部件子项){
返回MediaQuery(
数据:MediaQuery.of(context).copyWith(AlwaySuse24小时格式:false),
孩子:孩子,
);});
如果(拾取的时间=null&&picked的时间=selectedTime)
设置状态(){
selectedTime=拾取的时间;
});
}

您可以使用fromflatter\u datetime\u picker插件:

FlatButton(
onPressed: () {
    DatePicker.showDatePicker(context,
                          showTitleActions: true,
                          minTime: DateTime(2018, 3, 5),
                          maxTime: DateTime(2019, 6, 7), onChanged: (date) {
                        print('change $date');
                      }, onConfirm: (date) {
                        print('confirm $date');
                      }, currentTime: DateTime.now(), locale: LocaleType.zh);
},
child: Text(
    'show date time picker (Chinese)',
    style: TextStyle(color: Colors.blue),
));


 class CustomPicker extends CommonPickerModel {
   String digits(int value, int length) {
   return '$value'.padLeft(length, "0");
 }

   CustomPicker({DateTime currentTime, LocaleType locale}) : super(locale: locale) {
     this.currentTime = currentTime ?? DateTime.now();
    this.setLeftIndex(this.currentTime.hour);
   this.setMiddleIndex(this.currentTime.minute);
    this.setRightIndex(this.currentTime.second);
   }

     @override
     String leftStringAtIndex(int index) {
       if (index >= 0 && index < 24) {
       return this.digits(index, 2);
      } else {
         return null;
       }
     }

    @override
    String middleStringAtIndex(int index) {
     if (index >= 0 && index < 60) {
       return this.digits(index, 2);
      } else {
       return null;
      }
    }

   @override
   String rightStringAtIndex(int index) {
    if (index >= 0 && index < 60) {
      return this.digits(index, 2);
    } else {
      return null;
     }
   }

    @override
   String leftDivider() {
     return "|";
   }

    @override
    String rightDivider() {
      return "|";
    }

    @override
     List<int> layoutProportions() {
       return [1, 2, 1];
     }

     @override
     DateTime finalTime() {
         return currentTime.isUtc
           ? DateTime.utc(currentTime.year, currentTime.month, currentTime.day,
           this.currentLeftIndex(), this.currentMiddleIndex(), 
          this.currentRightIndex())
          : DateTime(currentTime.year, currentTime.month, currentTime.day, 
        this.currentLeftIndex(),
          this.currentMiddleIndex(), this.currentRightIndex());
             }
         }
FlatButton(
已按下:(){
DatePicker.showDatePicker(上下文,
showttitleactions:对,
minTime:DateTime(2018年3月5日),
maxTime:DateTime(2019年6月7日),一旦更改:(日期){
打印(“更改$日期”);
},onConfirm:(日期){
打印(“确认$date”);
},currentTime:DateTime.now(),locale:LocaleType.zh);
},
子:文本(
“显示日期时间选择器(中文)”,
样式:TextStyle(颜色:Colors.blue),
));
类CustomPicker扩展了CommonPickerModel{
字符串数字(int值、int长度){
返回'$value'.padLeft(长度,“0”);
}
CustomPicker({DateTime currentTime,LocaleType locale}):超级(locale:locale){
this.currentTime=currentTime??DateTime.now();
this.setLeftIndex(this.currentTime.hour);
this.setMiddleIndex(this.currentTime.minute);
this.setRightIndex(this.currentTime.second);
}
@凌驾
字符串leftStringAtIndex(int索引){
如果(索引>=0&&index<24){
返回此数字(索引,2);
}否则{
返回null;
}
}
@凌驾
字符串中间字符串索引(整数索引){
如果(索引>=0&&index<60){
返回此数字(索引,2);
}否则{
返回null;
}
}
@凌驾
字符串rightStringAtIndex(整数索引){
如果(索引>=0&&index<60){
返回此数字(索引,2);
}否则{
返回null;
}
}
@凌驾
字符串左分隔符(){
返回“|”;
}
@凌驾
字符串右分隔符(){
返回“|”;
}
@凌驾
列表布局比例(){
返回[1,2,1];
}
@凌驾
日期时间最终时间(){
return currentTime.isUtc
?DateTime.utc(currentTime.year、currentTime.month、currentTime.day、,
this.currentLeftIndex(),this.currentMiddleIndex(),
这是.currentRightIndex())
:DateTime(currentTime.year、currentTime.month、currentTime.day、,
此.currentLeftIndex(),
this.currentMiddleIndex()、this.currentRightIndex());
}
}

此代码将显示一个包含材料设计时选择器的对话框

请注意,
showtimepocker
是未来的选择。因此,您需要使用
wait
获取时间

TimeOfDay initialTime = TimeOfDay.now();
TimeOfDay pickedTime = await showTimePicker(
    context: context,
    initialTime: initialTime,
);

您还可以使用
showTimePicker

TimeOfDay initialTime = TimeOfDay.now();
TimeOfDay pickedTime = await showTimePicker(
    context: context,
    initialTime: initialTime,
    builder: (BuildContext context, Widget child) {
      return Directionality(
        textDirection: TextDirection.rtl,
        child: child,
      );
    },
);

您可以在官方文档中了解更多信息

iOS如何?我是说库比蒂诺风格?