首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么选定值不能反映在带有颤动的showModalBottomSheet中?

在Flutter中,showModalBottomSheet 是一个用于显示底部弹出式菜单或对话框的函数。如果你遇到选定值不能反映在带有颤动的 showModalBottomSheet 中的问题,可能是由于以下几个原因:

基础概念

  1. State Management: Flutter 使用状态管理来控制UI的更新。如果状态没有正确地被管理或更新,UI可能不会反映最新的值。
  2. Closure: 在Flutter中,闭包可能会捕获旧的状态值,而不是最新的值。

可能的原因

  1. 状态未正确更新: 如果你在 showModalBottomSheet 中使用了 setState,它只会更新当前widget的状态,而不是 showModalBottomSheet 的状态。
  2. 闭包问题: 如果你在回调函数中使用了外部变量,可能会捕获到旧的值。

解决方案

  1. 使用 StatefulBuilder: 在 showModalBottomSheet 中使用 StatefulBuilder 可以让你在弹出式对话框内部管理状态。
  2. 使用 ValueNotifierChangeNotifier: 这些是Flutter提供的状态管理工具,可以帮助你跨widget共享状态。

示例代码

以下是一个使用 StatefulBuilder 的示例:

代码语言:txt
复制
import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Modal Bottom Sheet Example')),
        body: ModalBottomSheetExample(),
      ),
    );
  }
}

class ModalBottomSheetExample extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Center(
      child: ElevatedButton(
        onPressed: () {
          showModalBottomSheet(
            context: context,
            builder: (BuildContext context) {
              return StatefulBuilder(
                builder: (BuildContext context, StateSetter setState) {
                  String selectedValue = 'Initial Value';

                  return Column(
                    mainAxisSize: MainAxisSize.min,
                    children: <Widget>[
                      DropdownButton<String>(
                        value: selectedValue,
                        onChanged: (String? newValue) {
                          setState(() {
                            selectedValue = newValue!;
                          });
                        },
                        items: <String>['Option 1', 'Option 2', 'Option 3']
                            .map<DropdownMenuItem<String>>((String value) {
                          return DropdownMenuItem<String>(
                            value: value,
                            child: Text(value),
                          );
                        }).toList(),
                      ),
                      Text('Selected Value: $selectedValue'),
                    ],
                  );
                },
              );
            },
          );
        },
        child: Text('Show Modal Bottom Sheet'),
      ),
    );
  }
}

解释

  • StatefulBuilder: 这个widget允许你在 showModalBottomSheet 内部创建一个独立的状态管理区域。
  • setState: 在 StatefulBuilder 内部使用 setState 可以确保UI能够正确地反映最新的状态变化。

通过这种方式,你可以确保选定值能够正确地反映在带有颤动的 showModalBottomSheet 中。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 使用“假设工具”来研究机器学习模型

    在可解释机器学习领域,不能仅仅满足于简单地训练模型获得预测。为了工作能更有意义并或得更好的结果,我们应该深入探寻和研究我们的模型。除此之外,算法的约束条件和偏置在也能在后续操作模型时得到清晰的认识。...在一个工作流中比较多个模型 可视化预测结果 通过相似性排列数据点 编辑数据点并观察模型的输出 比较反现实的数据点 使用特征值 实验中使用混淆矩阵或ROC曲线 测试算法的约束限制 我们将从上面的几点分别展开...寻找最近的反事实 理解模型行为的另一种方法是查看哪些小的变化可以导致模型颠倒其决策,这被称为反事实。只需单击一下,我们就可以看到最相似的反事实(以绿色突出显示)到我们选定的数据点。...在数据点编辑器选项卡中,我们现在还可以看到原始数据点的特征值旁边的反事实的特征值。绿色文本表示两个数据点不同的功能。WIT使用L1和L2距离来计算数据点之间的相似性。 ?...机器学习的公平性 机器学习的公平性与模型构建和预测结果同样重要。训练数据中的任何偏差都将反映在训练模型中,如果部署了这样的模型,结果输出也会有偏差。WIT可以通过几种不同的方式帮助调查公平问题。

    1K20

    Flutte部件目录-Material Components 顶

    导航栏的背景色是默认的材质背景色ThemeData.canvasColor(实质上是不透明的白色)。 BottomNavigationBarType.shifting,有四个或更多项目时的默认值。...TabBarView 显示与当前选定选项卡相对应的部件的页面视图。 通常与TabBar结合使用。 ?...Switch On/off开关切换单个设置选项的状态。 Switch小部件实现这个组件。 ? Slider 通过移动滑块,滑块可让用户从一系列值中进行选择。 ?...您可以调用showBottomSheet()来实现持久性底部工作表或showModalBottomSheet()来实现模态底部工作表。 ?...SnackBar 带有可选操作的轻量级消息,简要显示在屏幕底部。 ? 信息显示 Image 一个显示图像的小部件。 ? Icon 材质设计图标。 ?

    9.5K40

    声学工程师应知道的150个声学基础知识(全篇)

    20、用分贝表示放大器的电压增益公式是20lg(输出电压/输入电压)。 21、响度级的单位为phon。 22、声级计测出的dB值,表示计权声压级。 23、音色是由所发声音的波形所确定的。...28、如某一声音与已选定的1KHz纯音听起来同样响,这个1KHz纯音的声压级值就定义为待测声音的响度。 29、人耳对1~3KHZ的声音最为灵敏。...51、声音遇到凹的反射面,造成某一区域的声压级远大于其它区域称为声聚焦。 52、声音在室内两面平行墙之间来回反射产生多个同样的声音,称为颤动回声。...66、声波在不同物质中传播,其速度快慢依次为金属>木材>水>空气。 67、回声的产生是由于反射声与直达声相差50ms以上。 68、颤动回声的产生是由于声音在两个平行光墙之间来回反射。...146、后墙面上做强吸声或加凸形扩散体,可以解决长延时回声的缺陷。 147、两面平行墙表面加扩散体或改变平行角度,可以解决颤动回声的缺陷。

    3K20

    21个Java Collections面试问答

    通过使用JDK附带的集合类,减少了代码维护工作。 可重用性和互操作性 3、集合框架中泛型的好处是什么? Java 1.5带有泛型,所有集合接口和实现都大量使用它。...List是一个有序的集合,可以包含重复的元素。您可以从其索引访问任何元素。该列表更像是具有动态长度的数组。 一个Map是键映射到值的对象。映射不能包含重复的键:每个键最多可以映射到一个值。...当我们put通过传递键值对来调用方法时,HashMap使用带有哈希值的Key hashCode()来查找存储键值对的索引。...该集合由Map支持,因此对Map的更改会反映在集合中,反之亦然。如果在对集合进行迭代时修改了映射(通过迭代器的remove操作除外),则迭代的结果不确定。...Collection values():返回此映射中包含的值的Collection视图。集合由Map支持,因此对Map的更改会反映在集合中,反之亦然。

    2K40

    如何在 Linux 中使用空格处理文件名?

    并不是说您不能在 Linux 终端中的文件名中使用空格,只是它会产生额外的痛苦,这就是为什么你应该尽可能避免它。 为什么?...,您的终端可能会显示带有反斜杠转义的空格的文件名。...双引号忽略除 $、反引号和反斜杠之外的所有内容。更多关于它的一些其他教程。 在文件名中创建一个带有空格的文件 现在,您需要在终端中输入空格以在此处创建文件名,再次使用反斜杠或引号。....png] 处理文件夹名称中的空格 您可以像创建文件一样创建名称中带有空格的目录。...这就是为什么您应该尽量避免在文件名中使用空格或其他特殊字符的原因。要分隔文件名中的单词,请使用下划线。

    4K00

    LAScarQS2022——左心房及疤痕定量分割挑战赛

    一、LAScarQS2022介绍 挑战赛提供 200 名受试者,这项挑战的目标是量化或分割来自患有心房颤动的患者的 LGE MRI 的左心房壁的心肌病理(疤痕)。...挑战赛提供了在真实临床环境中从患有心房颤动 (AF) 的患者身上采集的 194 (+) 个 LGE MRI。它旨在为各种研究创造一个公开和公平的竞争。...LGE MRI的详细信息如下: 中心 1(犹他大学):临床图像是使用 Siemens Avanto 1.5T 或 Vario 3T 使用带有导航门控的自由呼吸 (FB) 采集的。...中心 2(贝丝以色列女执事医疗中心):临床图像是使用飞利浦 Acheiva 1.5T 使用 FB 和带有脂肪抑制的导航门控获得的。...2、首先去除多余背景,提取人体ROI,采用固定阈值(10,图像最大值),形态学开操作(核大小为3)和最大连通域来处理得到。

    6.2K20

    无主复制系统(3)-Quorum一致性的局限性

    如果根据时间戳(最后写入胜利)挑选出一个胜者,则由于时钟偏差[35],写入可能会丢失 如果写操作与读操作同时发生,写操作可能仅反映在某些副本上。在这种情况下,不确定读取是返回旧值还是新值。...这意味着如果一个写入虽然报告失败,后续的读取仍然可能会读取这次失败写入的值【47】。 如果携带新值的节点失败,需要读取其他带有旧值的副本。...并且其数据从带有旧值的副本中恢复,则存储新值的副本数可能会低于w,从而打破法定人数条件。...即使一切工作正常,有时也会不幸地出现关于时序(timing) 的边缘情况 因此,尽管法定人数似乎保证读取返回最新的写入值,但在实践中并不那么简单。...通过对比主、从节点当前偏移值,即可衡量该从节点落后主节点程度。 无主复制系统,无固定写入顺序,因而监控也更难。且若数据库只使用读修复(无反熵过程),那么旧值的落后就无上限。

    42040

    数据库查询优化技术(二):子查询优化

    3.2多表连接每个表被连接的顺序被用户语义决定 查询语句多表连接有着不同的语义(如是笛卡尔集、内连接、还是外连接中的左外连接等),这决定着表之间的前后连接次序是不能随意更换的,否则,结果集中数据是不同的...8) key_len:被优化器选定的索引键的长度,单位是字节。 9) ref:表示本行被操作的对象的参照对象(被参照的对象可能是一个常用量“const”表示,也可能是其他的key指向的对象)。...10) rows:查询执行所扫描的元组个数(对于InnoDB,此值是个估计值)。...MySQl支持对简单SELECT查询中的子查询优化,包括: 1 简单SELECT查询中的子查询。 2 带有DISTINCT、ORDERBY、LIMIT操作的简单SELECT查询中的子查询。...带有GROUPBY、HAVING、聚集函数。 使用ORDERBY中带有LIMIT。 内表、外表的个数超过MySQL支持的最大表的连接数。

    3.3K00

    Flutter 流体滑块

    它用于从一系列值中进行选择。下面的演示视频显示了如何在颤动中创建流畅的滑块。它显示了如何在flutter应用程序中使用flutter_fluid_slider软件包来工作流体滑块传送带。...传递的值将是滑块开始更改之前的最后一个[value]。 value: 此属性是必需的,并且用于此滑块的当前选定值。在与该值相对应的位置上绘制滑块的拇指。...**在setState中,我们将添加一个等于新值的变量。...在内部,我们将在value方法中添加一个变量;max表示最大值 是用户可以选择的值,并且大于或等于最小值。添加滑块颜色和拇指颜色。在此滑块中,我们将添加开始意味着小部件将显示为最小标签。...在此滑块中,我们将在value方法中添加一个变量,滑块颜色,onChanged,mapValueToString表示将双精度值映射到String文本的回调函数。

    11.7K20

    Chrome 35个开发者工具的小技巧【动态图演示】

    通过 console 面板修改页面元素及元素内容: 获取元素节点 右键选择 Edit as HTML 或者 Edit Text 修改后的内容会实时反映在页面和 Elements 面板上 ?...面板使用 copy(values) 将数据复制到剪贴板 在 console 面板使用 values(object) 获取对象的所有属性值,返回数组 使用 Ctrl + L 清空当前的 console...open 可以在 Sources 面板中打开相应的文件 ?...点击这些红色的帧,即可查看相应的警告信息。通常认为每秒渲染 60 帧的页面是流畅的,这就要求每一帧的渲染不能超过 16ms。 在 Canary 版的开发者工具中,提供了一个隐藏的布局编辑器 ?...使用 Tab 键可以在 CSS 样式规则中进行遍历选定,选定的目标包括:选择器、属性和属性值。如果想跳回上一个目标,使用 Shift + Tab ?

    86440

    【Flutter】自定义滚动开关

    switch是两个状态的UI组件,用于在ON(选中)或OFF(未选中)状态之间切换。通常,它是带有拇指滑块的按钮,用户可以在其中来回拖拉以选择其他选项,例如“开”或“关”。...它的工作就像房子的电源开关。 本文中,我们将探讨Flutter中 的**Custom Rolling Switch in Flutter。...假设此属性的价值回报为true,则此开关为ON,为OFF则为false。当此属性无效时,开关小部件会失效。 该演示视频展示了如何在颤动中创建自定义滚动开关。...在此小部件中,我们将添加mainAxisAlignment为center。在内部,我们将添加带有样式的文本。...'yes' : 'no'}'); }, ), ) ], ), ), 在里面,我们将添加值为true的值,这意味着确定此开关是打开还是关闭*。

    33.4K60

    理解逻辑回归中的ROC曲线和KS值「建议收藏」

    1.回归和分类任务 分类和回归都属于监督学习(训练样本带有信息标记,利用已有的训练样本信息学习数据的规律预测未知的新样本标签) 分类预测的结果是离散的(例如预测明天天气-阴,晴,雨) 回归预测的任务是连续的...再次强调一下,如果你的数学功底很好,可以看一下我上边分享的为什么是sigmod函数的连接,如果数学一般,我们这个时候没有必要纠结为什么是sigmod,函数那么多为什么选他.学习到后边你自然就理解了....到这里,我们得到一个回归函数,它不再像y=wT * x一样受离群值影响,他的输出结果是样本预测为正例的概率(0到1之间的小数).我们接下来解决第二个问题:选定一个阈值. 3.3 选定阈值 选定阈值的意思就是...我们现在知道了sigmod函数预测结果为一个0到1之间的小数,选定阈值的第一反应,大多都是选0.5,其实实际工作中并不一定是0.5,阈值的设定往往是根据实际情况来判断的.本小节我们只举例让大家理解为什么不完全是...图中画出的AUC=0.810就是这个模型能得出的最好的AUC值,其对应的阈值也是最好的划分。但是最好的阈值是不能通过这个图知道的,要通过KS曲线得出。

    2.7K20

    opencv-阈值处理

    为了从一副图像中提取出我们须要的部分,应该用图像中的每个像素点的灰度值与选取的阈值进行比較,并作出对应的推断。 (注意:阈值的选取依赖于详细的问题。...先要选定一个特定的阈值量。比方:125。这样,新的阈值产生规则能够解释为大于125的像素点的灰度值设定为最大值(如8位灰度值最大为255)。...阈值类型2:反二进制阈值化 该阈值类型例如以下式所看到的: 解释:该阈值化与二进制阈值化相似,先选定一个特定的灰度值作为阈值,只是最后的设定值相反。 (在8位灰度图中,比如大于阈值的设定为0。...阈值类型4:阈值化为0 该阈值类型例如以下式所看到的: 解释:先选定一个阈值,然后对图像做例如以下处理:1 像素点的灰度值大于该阈值的不进行不论什么改变;2 像素点的灰度值小于该阈值的,其灰度值所有变为...dst: 输出图像的地址。 threshold_value: 进行阈值操作时阈值的大小。 max_BINARY_value: 设定的最大灰度值(该參数运用在二进制与反二进制阈值操作中)。

    70220

    七.图像阈值化处理及民族服饰实验对比

    灰度转换处理后的图像中,每个像素都只有一个灰度值,其大小表示明暗程度。..., type) 参数的具体含义如下: 常用的方法如下表所示,其中函数中的参数Gray表示灰度图,参数127表示对像素值进行分类的阈值,参数255表示像素值高于阈值时应该被赋予的新像素值,最后一个参数对应不同的阈值处理方法...反二进制阈值化 该方法与二进制阈值化方法相似,先要选定一个特定的灰度值作为阈值,比如127。...反阈值化为0 该方法先选定一个阈值,比如127,接着对图像的灰度值进行如下处理: (1) 大于等于阈值127的像素点变为0 (2) 小于该阈值的像素点值保持不变 例如,163->0,86->86,...阈值化为0 该方法先选定一个阈值,比如127,接着对图像的灰度值进行如下处理: (1) 大于等于阈值127的像素点,值保持不变 (2) 小于该阈值的像素点值设置为0 例如,163->163,86-

    62110

    使用数控车刀时要考虑的几个要点

    鉴于车床刀塔中可用的槽数有限(是否足够?),大多数人都使用外径粗车刀进行端面加工。只要保持切削深度小于刀片的刀尖半径,这样做就没有问题。如果您的工作需要大量的端面处理,您可能需要考虑专用的端面工具。...有些人还会说,LH 上的力往往会减少颤动,可能会产生更好的表面光洁度,并且还可以更容易地将冷却液送到需要的地方。 请注意,我们实际上讨论的是倒置的右侧支架与右侧向上的左侧支架。...这就是为什么主轴需要改变方向以及为什么力被作用到它们所在的位置的原因。这也带来了 LH 的另一个优势,即使用右侧朝上的支架比使用倒置的支架更容易看到更换刀片。...就像在铣床上一样,您可以使用较大的铣刀粗加工型腔,但最终必须使用可以进入狭窄角落的铣刀,车削加工中也是如此。另一件需要考虑的事情是,这些薄刀片比粗加工刀片具有更好的排屑能力。...大多数人似乎更喜欢带有可更换刀片的切刀类型,例如我使用的带有 GTN 型刀片的切刀: 更小的刀片样式是首选,有些甚至可能是经过手工研磨以提高其性能的刀片样式。 切断刀片还可以完成其他一些有用的事情。

    24310
    领券