【问题标题】:What is the correct way to add time picker in flutter app?在颤振应用程序中添加时间选择器的正确方法是什么?
【发布时间】:2020-11-23 04:34:28
【问题描述】:

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

【问题讨论】:

    标签: android ios flutter dart flutter-layout


    【解决方案1】:

    首先在类级别声明这个变量,

    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;
      });
    }
    

    【讨论】:

    • iOS 呢?我的意思是库比蒂诺风格?
    【解决方案2】:

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

    请注意,showTimePicker 是未来。因此,您需要使用await 来获取时间。

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

    您还可以使用showTimePicker 中的builder 属性自定义时间选择器

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

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

    【讨论】:

      【解决方案3】:

      您可以使用 flutter_datetime_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());
                   }
               }
      

      【讨论】:

        猜你喜欢
        • 2019-03-14
        • 2019-02-20
        • 1970-01-01
        • 1970-01-01
        • 2011-11-17
        • 2016-07-26
        • 2023-03-30
        • 1970-01-01
        • 2019-07-28
        相关资源
        最近更新 更多