小编sha*_*ais的帖子

如何强制ScrollController重新计算position.maxExtents?

我正在尝试创建一个桌面样式的滚动条,它根据内容的大小更改其大小。我的滚动条与列表共享 ScrollController,并依赖position.maxExtents 来了解内容区域有多大。

问题是,当我更改行数时,maxExtents 将不会更新,直到启动滚动事件。

我用这样的代码解决了这个问题,在 100 毫秒内向上移动 1px,向下移动 1px:

widget.controller.jumpTo(controller.position.pixels + 1);
Future.microtask(() => widget.controller.animateTo(controller.position.pixels - 1, duration: 100.milliseconds, curve: Curves.linear));
Run Code Online (Sandbox Code Playgroud)

当列表可以滚动时,它的效果非常好。但是,当列表 < 视图的高度时,它无法滚动,并且这些调用没有效果,并且我陷入了陈旧的 maxExtents 困境。

我怎样才能告诉列表:“嘿,列表,重新计算你的孩子!”?

flutter flutter-layout

6
推荐指数
1
解决办法
1221
查看次数

为什么这个内存泄漏?

在这个例子中,每次我按下“Click”,都会分配 50M 的内存。它永远不会被回收,我可以推送 30 个页面并占用 1.5GB,尽管导航堆栈上只有 1 个页面。GC 永远不会启动。这是怎么回事?

Flutter (Channel master, 2.1.0-11.0.pre.122, on Microsoft Windows [Version 10.0.18363.1440], locale en-US)

void main() {
  runApp(MaterialApp(
    home: MemoryTest(),
  ));
}

class MemoryTest extends StatelessWidget {
  final List<EdgeInsets> insets = List.generate(
    1000000,
    (index) => EdgeInsets.all(0),
  );
  @override
  Widget build(BuildContext context) {
    return Container(
      color: Colors.white,
      child: Column(
        children: [
          OutlinedButton(
            child: Text("CLICK"),
            onPressed: () {
              Navigator.of(context).pushReplacement(MaterialPageRoute(
                builder: (_) => MemoryTest(),
              ));
            },
          ),
        ],
      ),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

flutter

6
推荐指数
1
解决办法
246
查看次数

dart:io Process - 如何在 Windows 上运行“CMD start”?

在 Linux 上,我们可以使用简单的 io.Process 调用来打开 url:

io.Process.run("xdg-open", [ url, ])

但尝试在 Windows 上做同样的事情

io.Process.run("start", [url]);

它失败并显示: 系统找不到指定的文件。

我猜我们需要 cmd.exe 的路径,它位于 %ComSpec%。尝试执行“echo %ComSpec%”,但出现相同的错误。也尝试过对路径进行硬编码,但没有成功。

这是我们完整的功能:

ProcessResult result;
  try {
    if(Platform.isLinux){
      result = await io.Process.run("xdg-open", [ url, ]);
    }
    else if(Platform.isWindows){
      result = await io.Process.run("start", [url]);
    }
  } on ProcessException catch (e){
    Log.e(e?.message);
  };
  return result?.exitCode == 0;
Run Code Online (Sandbox Code Playgroud)

[编辑]更新标题以使其更准确

dart flutter

5
推荐指数
1
解决办法
6872
查看次数

根据“Future.catchError”的要求,返回类型“void”不可分配给“FutureOr&lt;T&gt;”

我有一些这样的代码:

File("foo.txt").readAsString().catchError((e)=>print(e));

编译器正在抱怨 info: The return type 'void' isn't assignable to 'FutureOr<T>', as required by 'Future.catchError'.

我似乎无法给它想要的东西,也无法在任何文档中找到一个清晰的使用示例(只是 git 中的一个很长的问题,关于有多少种错误使用它的方法)。如果我从表面上看文档,我应该能够返回一个 bool 或一个 future,两者都不会让分析器满意。

我如何提供这个 FutureOr?

dart

4
推荐指数
1
解决办法
3701
查看次数

Flutter Desktop:如何禁用按钮悬停时的“禁用”鼠标光标?

默认情况下,在桌面上,flutter 中的 btns 在禁用时会更改鼠标光标:

在此输入图像描述

我们想禁用此行为,或替换为不同的光标。

flutter flutter-desktop

2
推荐指数
1
解决办法
2116
查看次数

标签 统计

flutter ×4

dart ×2

flutter-desktop ×1

flutter-layout ×1