簡體   English   中英

Flutter showTimePicker 總是返回 null

[英]Flutter showTimePicker always returns null

所以我試圖使用 flutter 中的 showTimePicker 函數,但發生的情況是對話框顯示時間選擇器,但是一旦我點擊對話框中的任何內容,它就會關閉並返回 null。 即使我在選擇器中點擊一個數字。

我只在 iOS 上測試過。

我已經嘗試將 InkWell 封裝在 Builder 中,並為 showTimePicker 函數提供來自該構建器的上下文,但我得到了相同的結果。

我認為 InkWell 可能正在從對話框中捕獲點擊事件,但我在 _pickNewDailyResetTime 方法中設置了一個斷點,它只在正確的時間進入,而不是在我點擊對話框時。

如果這很重要,我為父小部件中的底部菜單設置了一個導航器。

無論如何,這是我的小部件代碼,任何幫助表示贊賞:

import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';

class DailyResetTime extends StatefulWidget {
  DailyResetTime();

  @override
  _DailyResetTimeState createState() => _DailyResetTimeState();
}

class _DailyResetTimeState extends State<DailyResetTime> {
  TimeOfDay _dailyResetTime;

  @override
  void initState() {
    super.initState();
    _loadDailyResetTime();
  }

  _loadDailyResetTime() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    setState(() {
      String sDailyResetTime = prefs.getString('dailyResetTime');

      _dailyResetTime = sDailyResetTime != null
          ? TimeOfDay(
              hour: int.parse(sDailyResetTime.split(":")[0]),
              minute: int.parse(sDailyResetTime.split(":")[1]))
          : TimeOfDay(hour: 0, minute: 0);
    });
  }

  _pickNewDailyResetTime() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    showTimePicker(context: context, initialTime: _dailyResetTime)
        .then((value) {
      if (value == null) {
        return;
      }

      setState(() {
        _dailyResetTime = value;
        prefs.setString('dailyResetTime',
            value.hour.toString() + ":" + value.minute.toString());
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    return InkWell(
        onTap: _pickNewDailyResetTime,
        child: Container(
            height: 48.0,
            padding: EdgeInsets.only(right: 24),
            decoration: BoxDecoration(
                border: Border(
                    bottom: BorderSide(color: Colors.black12, width: 1.0))),
            child: Row(
              children: [
                Text('Daily reset time'),
                Spacer(),
                Text(_dailyResetTime?.format(context) ?? '')
              ],
            )));
  }
}

顯然導航器是問題所在,將 useRootNavigator: false 傳遞給函數參數為我解決了這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM