【问题标题】:Flutter web: Prevent UI state update on browser window resizeFlutter web:防止浏览器窗口调整大小时的UI状态更新
【发布时间】:2021-11-22 11:12:56
【问题描述】:

我有一个带有三个下拉按钮的颤动网页,我用它们来查询数据库并向用户显示一些对象,选择下拉值按预期更新 UI 并修改 API 进行查询所需的变量。

问题出现在用户调整浏览器窗口大小时,这会导致 UI 再次更新并且下拉值恢复为默认值。

没有错误信息什么的,我只是想保持屏幕调整大小时的状态。

当浏览器窗口改变其大小时,我是否有办法阻止该状态改变?

或者我只是让用户看到当屏幕尺寸发生变化时,所做的选择消失了,他们必须再次选择它们?

【问题讨论】:

    标签: flutter flutter-web


    【解决方案1】:

    这样做的选择很少:

    选项 1:(推荐的最佳做法) 您用于从 db 中检索的未来变量应位于 initState() 中。这将防止在调整大小时重新查询

       @override void initState() {
          super.initState();
          myFuture = _dbService.get(dropDownValues);
       }
    

    选项 2: 添加一个新的bool 变量isIntendedRebuild,您可以在下拉列表更新后在setState() 中将其设置为true。然后,在您的build() 中,添加if 以防止在不打算重建时更新您的对象。不要忘记在构建结束时将isIntendedRebuild 设置为false

       @override Widget build(BuildContext context) {
          if (intendedRebuild) {
             ///update the values of your displayed objects , otherwise dont
          }
       }
    

    【讨论】:

    • 你是否尝试将未来发送到 initState( ) ?
    • 你还需要这个吗?
    • 我猜 Riverpod UI 的选项 2,我只希望扩展的 ExpandedTiles 保持扩展状态。
    • 但是如果intendedRebuild 是假的,我应该返回什么?
    • 您返回相同的代码(相同的小部件)。 IF 条件仅用于跳过更新对象。免责声明:我还没有尝试过 Riverpod。
    猜你喜欢
    • 1970-01-01
    • 2020-07-06
    • 2023-04-07
    • 2020-09-25
    • 1970-01-01
    • 2015-04-20
    • 2012-02-23
    • 2011-02-10
    • 2020-08-02
    相关资源
    最近更新 更多