【问题标题】:Flutter showTimePicker always returns nullFlutter showTimePicker 总是返回 null
【发布时间】:2020-10-30 14:55:01
【问题描述】:

所以我尝试使用颤振中的 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) ?? '')
              ],
            )));
  }
}

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    显然导航器是问题所在,将 useRootNavigator: false 传递给函数参数为我解决了这个问题。

    【讨论】:

      猜你喜欢
      • 2021-02-21
      • 2020-07-10
      • 1970-01-01
      • 2021-09-16
      • 2022-10-21
      • 1970-01-01
      • 1970-01-01
      • 2014-03-04
      • 2016-11-02
      相关资源
      最近更新 更多