Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 重置WheelChooser小部件初始值_Flutter_Dart - Fatal编程技术网

Flutter 重置WheelChooser小部件初始值

Flutter 重置WheelChooser小部件初始值,flutter,dart,Flutter,Dart,套餐: 问题:软件包没有用于重置或重新分配值的键和/或控制器 问题:如何实现WheelChooser小部件的重置按钮?我目前正在将值重新指定为零,并导航到动画持续时间为零的页面。我的问题是,我还有一个FutureBuilder显示电池电量,每次按下重置按钮时都会重新生成。是否有任何方法可以在不刷新整个页面的情况下重置此WheelChooser小部件的值 代码示例: WheelChooser.integer( initValue: Clock

套餐:

问题:软件包没有用于重置或重新分配值的键和/或控制器

问题:如何实现WheelChooser小部件的重置按钮?我目前正在将值重新指定为零,并导航到动画持续时间为零的页面。我的问题是,我还有一个FutureBuilder显示电池电量,每次按下重置按钮时都会重新生成。是否有任何方法可以在不刷新整个页面的情况下重置此WheelChooser小部件的值

代码示例:

              WheelChooser.integer(
              initValue: Clock().timerHours ?? 0,
              magnification: 1.7,
              listHeight: 150,
              itemSize: 30,
              squeeze: 0.75,
              listWidth: 100,
              onValueChanged: (hours) {
                setState(() {
                  Clock().timerHours = hours;
                });
                Clock.save();
              },
              maxValue: 23,
              minValue: 00,
              isInfinite: true,
            ),
我的解决方案:刷新页面。i、 e

// The only way to reset the wheel values to zero is to
// reassign the init values and rebuild the page.
// TODO: Any other way of doing this?
        
if (Clock().timerHours != 0 ||
    Clock().timerMinutes != 0 ||
    Clock().timerSeconds != 0) {
      
      Clock().timerHours = 0;
      Clock().timerMinutes = 0;
      Clock().timerSeconds = 0;

      Navigator.of(context).pushAndRemoveUntil(
          PageRouteBuilder(
            pageBuilder: (_, __, ___) => Home(
              pageIndex: 3,
            ),
            transitionDuration: Duration(seconds: 0),
          ),
          (Route<dynamic> route) => false);
    }
//将控制盘值重置为零的唯一方法是
//重新分配初始值并重新生成页面。
//托多:还有别的方法吗?
如果(时钟().timerHours!=0||
时钟().timerMinutes!=0||
时钟().timerSeconds!=0){
时钟().timerHours=0;
时钟().timerMinutes=0;
时钟().timerSeconds=0;
Navigator.of(context).pushandremoveintil(
PageRouteBuilder(
页面生成器:(\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu)=>主页(
页面索引:3,
),
过渡持续时间:持续时间(秒:0),
),
(路由)=>false);
}
您可以尝试:

  • 创建一个自定义StatefulWidget,其中包含WheelChooser和重置它的算法
  • 在算法中,用setState()替换PushAndRemoveTill以仅重建此小部件

我已经完成了选项1,选项2的问题是setState将不起任何作用,因为一旦构建小部件,就无法重新分配
initValue