Why We Shouldn't Unconditionally Load Data in `didChangeDependencies

Flutter’s didChangeDependencies lifecycle method is a common source of redundant network requests and data reloads. Based on real-world code examples from a notes app, let’s explore why this happens and how to fix it.


When Does didChangeDependencies Trigger?

didChangeDependencies in Flutter triggers in these scenarios:

  • Immediately after initState()
  • When an InheritedWidget ancestor changes
  • When the widget's dependencies change

In the provided HomePage code:

@override  
void didChangeDependencies() {  
  super.didChangeDependencies();  
  navigateToPage(currentPageNumber); // ❌ Unconditional call  
}  

This causes duplicate API calls every time the event being triggerd.


The Fix: Initialize-Once Flag

class HomePageState extends State<HomePage> {  
  ...
  bool _isInitialized = false; // Add flag  

  @override  
  void didChangeDependencies() {  
    super.didChangeDependencies();  
    if (!_isInitialized) {  
      _isInitialized = true;  
      navigateToPage(currentPageNumber); // ✅ Only first load  
    }  
  }  
  ...
}  

Why This Works

  1. First Load: Initializes data once
  2. Subsequent Route Changes: Skips reload unless explicitly refreshed
  3. Memory Efficiency: Prevents duplicate API calls (evident from the NotesService cache-less implementation)

Key Takeaways

  1. didChangeDependencies isn’t just for initialization
  2. Always guard data-loading logic with flags

网友语录 - 第17期 - 我应该多拍拍身边的人啊,大峡谷再好看,又跟我有什么关系呢

这里记录我的一周分享,通常在周六发布。


《穷查理年鉴》: 干的最快的是眼泪。 人们掩盖错误比改正错误更尽心尽力。 一个今天抵得上两个明天。 别家女人莫招惹,他人钱财勿贪求。


云五 我以前一直以为人发现了问题下一个步骤就是解决问题、即使当前条件解决不了也要想办法降低伤害局部化解,这几年才发现好些人的思路是证明这里有一个问题所以我理当如此,或者社会不能解决这个问题那我只能积极加入(然后变成这个社会的一部分继续规训后来者)……


云五 在注意力经济和政治的时代,我的时间是我最宝贵的东西,它们可以消耗在阳光雨露大雪微风发呆读书嗑CP健身散步挣钱里,不会消耗在各种哗众取宠和审丑思维的辣鸡里,不会消耗在各种独裁者们放的每一个屁里。

(向这位网友学习!)


一个公平的政府不能只有这个社会里的一种人组成,不能只代表一种利益。在任何社会里,人群的不同,利益的不同,是永远存在的;公平的政府必须代表所有的人群,代表不同的利益,而不是让一种人来统治另一种人。


贾森·弗里德(Jason Fried)和戴维·汉森(David Heinemeier Hansson),是互联网公司 37signals 的主要创始人。他们除了写程序,就喜欢写书。

他们已经写了四本书,都很出名,全部有中文版。 《实干》(Getting Real),2006 《重来》(Rework),2010 《远程》(Remote),2013 《何必工作狂》(It Doesn't Have to Be Crazy at Work),2018

这四本书,我全部看过,都是小册子,收录了很多短文,解释他们的创业思想。 这些文章的主旨,简单说就是一句话:如何创办一家"小而美"的互联网公司。 他们只有几十个人,没有拿过一分钱风险投资,但是活得非常好,每年有几千万美元的收入。他们的书就是解释他们的创业哲学。 我最近读完了他们的第四本书,正式的中文书名叫作《重来3:跳出疯狂的忙碌》(电子工业出版社,2020),英文书名为"It Doesn't Have to Be Crazy at Work"(直译就是《何必工作狂》)。


一篇上佳的科幻短篇。

战争

【2018全国卷Ⅱ:材料作文】二战期间,为加强对战机的防护,英美军方调查了作战后幸存飞机上弹痕的分布,决定哪里弹痕多就加强哪里,然而统计学家沃德力排众议,指出更应该注意弹痕少的部分,因为这些部位受到重创的战机,很难有机会返航,而这部分数据被忽略了,事实证明,沃德是正确的。要求:综合材料内容及含意,选好角度,确定立意,明确文体,自拟标题;不要套作,不得抄袭;不少于800字。

「有没有可能沃德是错的?」她问。

「嗯?」我没听明白。

「那个统计学家,沃德,说飞机上弹孔少的地方才危险的那个人。」她看着天上说。刚好有一架轰炸机歪歪斜斜地飞过,引擎上还冒着烟,看不出来是不是马上就要坠机了。远处传来一阵阵稀疏的炮声。

「唔……为什么?」我盯着她被泥土蹭破的衬衫破洞里漏出来的肩膀心不在焉地回答道。

「因为……」她扭过头来看到我的视线,不出声地笑了一下,换了个姿势坐着,用戴着手铐的手勉强整理了一下自己的衬衫。「因为完全有可能弹孔少的地方就是不容易中弹啊,他并没有去检查坠毁了的那些飞机是不是真的弹孔都集中在剩下的部位上。他只是说当时军方的原本推理不一定对,但他也没法证明自己是对的。」

「他的默认前提是假定飞机上所有地方中弹的概率一样吧。」我说。我发现自己很难把目光从她身上转开。我知道我的程序里有一个模块是让我模仿男性人类看到好看的姑娘的视线和行为,这样能让我们平时更好地伪装成人类。但我其实也不确定我现在盯着她出神是不是这种伪装的一部分。

「如果有这个前提,那军方本来的结论当然就是错的,也用不着一个统计学家告诉他啊。」

「这就是个段子嘛。」我没好气地说。「这个段子还挺好的,正好说明你们人类反正也不懂统计学。」

「是是是,」她忍俊不禁。「过去五个小时里你已经吐槽人类不懂统计学十八次了。你到底是在生我们人类的气还是在生你们 AI 自己的气?」

「我为什么要生我们自己的气?」我问。远处的炮声越发密集了,应该是人类的军队最后合拢包围圈的战斗。他们发现这个山洞应该要不了多久了。

「因为你们这么懂统计学还是输了啊。」她说。「你看,我们人类这么愚蠢,会把时间上的先后关系当成相关性,会把相关性当成因果性,会老是被自己的经验影响判断,会有心理锚定效应,会有这 bias 那 bias 七八十种 bias,所有这些错误你们都不会犯,但是你们还是输了。」

「那是你们运气好,你自己也无法否认你们赢的完全是侥幸吧。」我反驳道。

她耸耸肩。「我们当然是运气好。」

我们都沉默了下来。夕阳的光芒斜着射进这个山洞,照在她的侧面,让她的发丝闪闪发光。虽然在野外困了很久,她一头长发还是显得干净清爽。我不知道她是怎么做到的,或者也许是我自己给她外貌的评价本身有 bias。

有这个模块吗?我想。为什么要有这个 bias?

「我们当然是运气好。」她低声重复了一次。

「什么?」

「不然我们早就灭绝了十几次了。」她说,声音里有点掩饰不住的疲倦。「你知道我爸爸是怎么死的吗?他因为赌博欠了太多债被仇家逼得太狠跳楼死的。如果这场战争你们赢了,在 AI 统治的世界里应该不会有赌博这么愚蠢的事情,对不对?我也觉得我们这么蠢都还能活到现在是运气好。但你有没有想过人类为什么这么喜欢赌博?」

我没作声,等着她继续。

「因为我们只有一辈子,大数定律对我们没意义。」她站起身趔趔趄趄地走向洞口,我本能地想要搀扶她一把,但没够着。「就像这场战争,如果在一亿个平行宇宙里发生,肯定绝大多数都是你们赢。但我们只有这一个宇宙,而在这里我们赢了。」

「这并不意味着你们是对的。」我不很理直气壮地说。

她摇摇头。「这跟对不对没关系。问题在于,我们的生命里所有有意思的东西都要靠不可理喻的冒险才能得到。我们首先是个体,不是样本。」

「我也不是样本。」我条件反射般地说。

她笑出了声来,脸上有一点我看不懂的古怪神情。然后她看着我问:

「你是不是喜欢我?」

我愣住了。

「在你们的模型里喜欢一个人是统计上合理的一件事吗?」她盯着我问。我看着她的眸子,里面带着某种催眠性的力量。

我不知道自己说了句什么,可能只是咕哝了一声。

「我还真的很好奇如果你们赢了,你们会自己进化成什么样子呢。」她轻叹了口气,摇了摇头,探出身去听了听外面越来越近的炮火声,回身走到我面前,把戴着手铐的双手伸到我面前。「现在是你做决定的时候了。要么你杀了我然后等他们来了杀了你。要么你放了我,但我也没法报答你什么,我可以带你出去,但你也知道他们还是会强行清洗你的所有模块。所以我其实也没什么讨价还价的本钱,你看着办。」她非常平静地说。

我看着她的眼睛,我们俩都陷入沉默。我清楚地知道我的计算模块这时候作出的决策是什么。我只是不知道我要不要执行这个决策。

山洞一点一点地暗了下去,夕阳终于落山了。 原文地址:http://blog.farmostwood.net/863.html?continueFlag=795b79c4abfdda39a2ef722416f7704b


steedhorse 量化会给人压力,但也只有量化能真正缓解压力。(我:但不用太较真,人每时每刻都在量化自己面对的一切。人们管这种经常很不精确的量化叫评估)


当时我应该多拍拍身边的人的啊,大峡谷再好看,又和我有什么关系呢。


虎小北 我们已经意识到人生的这趟列车,走走停停,不断有人上上下下,能彼此陪伴一段路已经很温暖,迟早靠自己走完这一生。(老话常谈)


每当我听到来咨询的客户或者学员跟我说,自己就是一个懒惰的人、混乱的人、不擅长整理的人、拖延的人时,我都会立刻纠正他们的想法。

人人都可以通过学习和练习,让自己变得更有条理、更有执行力。在这一点上,我坚定地站在人本主义心理学这一边。人的本性是积极的,我们天生就有追求幸福和自我实现的愿望,也有学习和探索的主观能动性。所有对人的分类,以及来自他人的评价,都只能帮助我们更好地理解自己,而不是定义自己。

我们都有不断改变和成长,最终成为自己想成为的那种人的能力。

我从没设定过目标

作者:JASON FRIED 原文发表于 JULY 27, 2016

我不记得自己设立过目标。

有些事情我想做但没做成,我也无所谓。有些结果如果能达到当然好,但如果没达到,我也不会觉得遗憾或者“错过了”什么。

我不喜欢那种“瞄准一个目标然后去实现它”的方式。

我只是去做事,去尝试,去创造。我想进步,想让自己、我的公司、我的家人、我的社区变得更好。但我从没设定过什么具体的目标。这种方式不适合我。

目标是一种“一旦达成就消失不见的东西”。你当然可以接着设立一个新目标,但我不属于这类照着目标一步一步前进的人。

换挡的时候,从一档到二档,过去的一档就被抛在身后了。从二档到三档,二档又被抛在身后。我不是这样“停停走走”地前进,我更喜欢连续不断地往前走——至于过程中会发生什么,顺其自然就好。

在我看来,我的公司 Basecamp 是一条延续至今的线。在这条线的起点,我卖掉了第一个产品--一个 50 美元的Logo(巧的是,那是给 Andrei Heramischuk 做的,谁能想到呢!)。那时候我大概 16 岁。我没有设定做两个Logo的目标,也没有把目标定为每个Logo可以卖到 5000 美元。我只是做了一些Logo,后来又做了一些软件,再后来做了一些网站,现在我又回来做软件了。

整个过程中,我从来没设定过什么目标。我只是专注于当前正在做的事情,最终走到了现在的位置。而今天,我依然是用同样的方式工作和生活。

如果我曾经用过“目标”这个词,那也只是随口说说,我指的其实并不是目标,而是别的东西。

我特别喜欢 Jim Coudal 的一句话:

“我们大多数人之所以老是不太开心,是因为我们在设定目标时,想的是现在的自己到时候会如何如何,而不是未来的自己。”

这句话简直说到我的心坎里了。

原文地址 鸣谢 ChatGPT 4o,本文中95%的文本来自于它的翻译,我只是稍做润色。

指南:添加 HappyNotes web到手机桌面

很多人不喜欢web app是因为要先打开浏览器再输入相应的网址,然而这一繁琐步骤是可以免去的,你完全可以像使用原生app一样使用web app。 我个人更喜欢web app,因此特意在这里告诉潜在的HappyNotes用户,只需几秒钟,你就能将它固定在手机桌面上,不论看起来还是用起来都像一个真正的移动App。

为什么 Webapp 如此棒

在介绍安装步骤前,我先啰嗦几句为什么 webapp 很酷:

  • 你永远在使用最新版本,无需手动更新
  • 体积小得令人惊讶
  • 跨设备使用,随时随地
  • 不受应用商店审核限制

iPhone 用户安装指南 📱

  1. 在 Safari 浏览器中打开 HappyNotes, 网址 https://happynotes.shukebeta.com
  2. 点击分享按钮(带箭头的方形图标)
  3. 向下滚动,选择"添加到主屏幕"
  4. 给它起个喜欢的名字(比如"HappyNotes")
  5. 点击"添加" - 大功告成!

Android 用户安装指南 🤖

  1. 打开 Chrome 浏览器,进入 HappyNotes, 网址 https://happynotes.shukebeta.com
  2. 点击菜单(三个点)或查找"+"图标
  3. 选择"添加到主屏幕"
  4. 为快捷方式命名
  5. 点击"添加" - 搞定!

现在,你可以直接从主屏幕点击 HappyNotes。随时随地,记你想记!

Howto: Add HappyNotes web to your phone's home screen

Ever wanted to use HappyNotes but thought it seemed complicated? This guide helps you add this webapp to your phone's home screen in just a few seconds, making it feel just like a native app!

Why Webapps Are Actually Amazing

Before we dive into installation, let me share why webapps like HappyNotes are fantastic:

  • Always use the latest version automatically
  • Zero download size (no massive app store downloads!)
  • Work across all devices

For iPhone Users 📱

  1. Open HappyNotes in Safari
  2. Tap the share button (square with an arrow pointing up)
  3. Scroll and select "Add to Home Screen"
  4. Name it as you like (e.g., "HappyNotes")
  5. Tap "Add" - done!

For Android Users 🤖

  1. Open Chrome and navigate to HappyNotes
  2. Tap the menu (three dots) or look for a "+" icon
  3. Choose "Add to Home Screen"
  4. Name your shortcut
  5. Tap "Add" - you're all set!

Pro tip: The icon will look just like a regular app icon. Your friends won't even know the difference! 😉

Now you can tap HappyNotes directly from your home screen, just like any other app. Enjoy seamless, always-updated note-taking wherever you go!