20250718

0822起来,0155睡到0800闹钟,很困,但尿了个尿,和GPT聊聊,还是早起吧,为了我能早睡。发现和GPT聊口语很方便,我能语音输入,它能指出我的问题。

使用shared_preferences: ^2.2.2

使用intl进行l10n。flutter gen-l10n

intl的逻辑是什么,不是通过key从不同语言的哈希表中找出对应的String吗,为什么感觉有点复杂

intl 框架之所以感觉「复杂」,是因为它不仅要支持多语言,还要兼顾Flutter 的运行环境代码生成格式化能力性能优化

fullter这个AppLocalizations刚需context也太难用了。

让GPT帮忙写README结果它提供假信息,我揶揄它一下它还给我发流汗黄豆。

Windows PowerShell 和 Linux(bash/sh)这两个命令行解释器接受参数的方式不一样

powershell.exe -Command "Get-Process"

bash -c "ls -l"

Dart 中 Process 的行为特性之一:即使 process.exitCode 已经完成,process.stdoutprocess.stderr 仍可能继续输出

所以如果我保留着已退出的进程数据可能会导致应用很卡,就是MAA,一直在输出日志。而我

1
2
3
4
      process.stdout.transform(utf8.decoder).listen((line) {
        rc.output.write(line);
        notifyListeners();
      });

也一直监听着。

不过也确实发现没有取消监听,之前因为process.exitCode后就移除了所以没有问题,现在新设置了一个变量来储存已完成的进程就出现问题啦。不过之前就算不取消监听也不会有内存泄露吗,印象中listen是更需要注意的东西。

在 Dart/Flutter 中,调用 .listen(...) 返回的是一个 StreamSubscription

所以一般都要手动cancel的。

经过控制变量法,发现就算不cancel,一直接收日志其实不会卡顿,罪魁祸首是notifyListeners,看来它还是接受不了每几帧就被调用一次。但是为什么呢,明明没有东西被新绘制出来,怎么还是重绘了。

notifyListeners()会通知所以监听者重新调用build()

那我

1
2
3
4
5
      providers: [
        ChangeNotifierProvider(create: (_) => themeViewModel),
        ChangeNotifierProvider(create: (_) => localeViewModel),
        ChangeNotifierProvider(create: (_) => CommandManagerViewModel())
      ],

岂不是会让不必要的widget重绘,一个Provider的notifyListeners()导致监听任意一个Provider的widget去rebuild,怎么办,要不要改。

只有监听了触发 notifyListeners() 的那个 Provider 的 widget 才会重建**

原来是我想多了。0036,该上床了,明天依然8点闹钟。

Licensed under CC BY-NC-SA 4.0
使用 Hugo 构建
主题 StackJimmy 设计