Flutter 颤振showTimePicker始终返回null
因此,我试图使用Flatter中的showTimePicker函数,但实际情况是,该对话框将与时间选择器一起显示,但一旦我点击对话框中的任何内容,它将关闭并返回null。即使我在选择器中点击一个数字 我只在iOS上测试过这个 我曾尝试将墨水池包装在一个生成器中,并将该生成器中的上下文赋予showTimePicker函数,但我得到了相同的结果 我以为InkWell可能从对话框中捕获了tap事件,但我在我的_pickNewDailyResetTime方法中设置了一个断点,它只在正确的时间出现,而不是在我点击对话框时出现 我在父窗口小部件的底部菜单中设置了一个导航器,如果这很重要的话 无论如何,这是我的小部件代码,非常感谢您的帮助:Flutter 颤振showTimePicker始终返回null,flutter,dart,Flutter,Dart,因此,我试图使用Flatter中的showTimePicker函数,但实际情况是,该对话框将与时间选择器一起显示,但一旦我点击对话框中的任何内容,它将关闭并返回null。即使我在选择器中点击一个数字 我只在iOS上测试过这个 我曾尝试将墨水池包装在一个生成器中,并将该生成器中的上下文赋予showTimePicker函数,但我得到了相同的结果 我以为InkWell可能从对话框中捕获了tap事件,但我在我的_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) ?? '')
],
)));
}
}
导入“包装:颤振/材料.省道”;
导入“package:shared_preferences/shared_preferences.dart”;
类DailResettime扩展StatefulWidget{
每日设置();
@凌驾
_DailyResetteMestate createState()=>\u DailyResetteMestate();
}
类_DailyResetTimeState扩展状态{
每天的时间;
@凌驾
void initState(){
super.initState();
_loadDailyResetTime();
}
_loadDailyResetTime()异步{
SharedReferences prefs=等待SharedReferences.getInstance();
设置状态(){
String sDailyResetTime=prefs.getString('dailyResetTime');
_dailyResetTime=sDailyResetTime!=null
?当日时间(
小时:int.parse(sDailyResetTime.split(“:”[0]),
分钟:int.parse(sDailyResetTime.split(“:”[1]))
:时间(小时:0,分钟:0);
});
}
_pickNewDailyResetTime()异步{
SharedReferences prefs=等待SharedReferences.getInstance();
showTimePicker(上下文:上下文,初始时间:_dailyResetTime)
.然后((值){
如果(值==null){
返回;
}
设置状态(){
_dailyResetTime=值;
prefs.setString('dailyResetTime',
value.hour.toString()+“:”+value.minute.toString());
});
});
}
@凌驾
小部件构建(构建上下文){
回墨槽(
onTap:_pickNewDailyResetTime,
子:容器(
身高:48.0,
填充:仅限边缘设置(右:24),
装饰:盒子装饰(
边界:边界(
底部:边框(颜色:Colors.black12,宽度:1.0)),
孩子:排(
儿童:[
文本(“每日重置时间”),
垫片(),
文本(_dailyResetTime?格式(上下文)?“”)
],
)));
}
}
显然导航器是问题所在,将useRootNavigator:false传递给函数参数为我解决了问题