惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 叶小钗
Last Week in AI
Last Week in AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
雷峰网
雷峰网
GbyAI
GbyAI
Hugging Face - Blog
Hugging Face - Blog
N
Netflix TechBlog - Medium
博客园 - 聂微东
Y
Y Combinator Blog
罗磊的独立博客
博客园_首页
小众软件
小众软件
有赞技术团队
有赞技术团队
爱范儿
爱范儿
F
Fortinet All Blogs
C
Check Point Blog
Google DeepMind News
Google DeepMind News
云风的 BLOG
云风的 BLOG
Apple Machine Learning Research
Apple Machine Learning Research
M
MIT News - Artificial intelligence
月光博客
月光博客
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 司徒正美
aimingoo的专栏
aimingoo的专栏

Flutter

开源了一个 Flutter 多链钱包 - V2EX # 用 GPT-5 完成 Flutter/Dart 的 LoongArch 全栈移植:从 Dart VM 到 Flutter Engine 与 eLinux - V2EX 开源一个 flutter 开发的 web3 钱包 app - V2EX kkRepo 只用 1 天就支持了 Futter / Dart / Pub 仓库私服搭建、支持代理 pub.dev、支持聚合私服和 Proxy flutter 开发的鸿蒙应用上架应用商店了 flutter 现在开发最佳的库用什么?或者有什么好用的脚手架吗? USB 摄像头求助。 flutter 引入 aar 包,运行报错,版本 3.38.9 用 Flutter 做了一个 Redis Desktop Manager flutter 生态这么差?写个 demo 两天都没调通 由于开发 flutter 然后测试是黑盒测试只会手点,开发了个插件 求助, flutter 项目混合式搭建问题 求助大神,为什么用 flutter 开发的安卓笔记软件卡顿、掉帧 写了一个 flutter 的状态管理库,大家参谋参谋。 开源一套 flutter UI 组件库,方便各位大佬快速进行跨平台开发,欢迎各位大佬 start Flutter 的学习曲线高吗?对于个人开发者来说是否值得 闲着没事开发一款网文写作应用—— Letter Studio 请教 flutter-windows 客户端白屏问题。 第一次写 flutter app 有个疑问 Flutter in_app_purchase 内购在 iOS 上的应用总结 另一个视角看 Flutter 的思维 招 flutter 工程师 兼职! 求推荐一个基础框架 Ubuntu 团队为什么无偿给 Flutter 写桌面多窗口功能? 请教: flutter 或 Android 更新、热更新方案 求一份 iOS 或者 Flutter 兼职 求助贴!关于 Flutter 接入 in_app_purchase 内购服务端部分二次验证的 flutter 是不是要升级所有的 widget 了? 上架 Play store 的问题... 应用未声明 QUERY_ALL_PACKAGES 权限却报错,是 firebase 导致的吗?
最简单的状态管理库 view_model
lumyx · 2025-10-12 · via Flutter

被 riverpod 繁琐和侵入式的使用方式困扰许久后,自己重新造了个轮子。 https://pub.dev/packages/view_model

优点是使用简单, 非常纯粹, 只是 view_model 没有其他花里花哨的概念。

import 'package:view_model/view_model.dart';
import 'package:flutter/foundation.dart'; // For debugPrint

class MySimpleViewModel extends ViewModel {
  String _message = "Initial Message";
  int _counter = 0;

  String get message => _message;

  int get counter => _counter;

  void updateMessage(String newMessage) {
    _message = newMessage;
    notifyListeners(); // 通知监听者数据已更新
  }

  void incrementCounter() {
    _counter++;
    notifyListeners(); // 通知监听者数据已更新
  }

  @override
  void dispose() {
    // 在此清理资源,例如关闭 StreamControllers 等
    debugPrint('MySimpleViewModel disposed');
    super.dispose();
  }
}



ViewModelFactory 负责实例化 ViewModel 。每个 ViewModel 类型通常 需要一个对应的 Factory 。

import 'package:view_model/view_model.dart';
// 假设 MySimpleViewModel 已如上定义

class MySimpleViewModelFactory with ViewModelFactory<MySimpleViewModel> {
  @override
  MySimpleViewModel build() {
    // 返回一个新的 MySimpleViewModel 实例
    return MySimpleViewModel();
  }
}

通过 watchViewModel 直接在 State 中使用.

class _MyPageState extends State<MyPage>
    with ViewModelStateMixin<MyPage> {
  // 1. 混入 Mixin

  late final MySimpleViewModel simpleVM;

  @override
  void initState() {
    super.initState();
    // 2. 在 initState 中获取 ViewModel
    // 当 MyPage 第一次构建时,MySimpleViewModelFactory 的 build() 方法会被调用来创建实例。
    // 当 MyPage 被销毁时,如果此 viewModel 没有其他监听者,它也会被销毁。
    simpleVM =
        watchViewModel<MySimpleViewModel>(factory: MySimpleViewModelFactory());
  }
  
  
    @override
  Widget build(BuildContext context) {
  	// 直接使用. simpleVM 数据更新后,会自动 setState
    Tetx(simpleVM.xxx);
  }

缺点是没有颗粒度更新,但我认为这其实不算缺点,这不是状态管理该做的事,但 riverpod bloc signal 似乎都对这个很在意,Widget 本身的 diff 已经足够高效, 就算每秒 setState 对帧率的影响也微乎其微,因为底层的 Render 没变,Widget 只是配置而已。 如果你真的需要频繁更新某个 局部 Widget ,那你应该使用 ValueNotitifierBuilder : https://github.com/lwj1994/flutter_view_model/issues/13

完整的文档: https://github.com/lwj1994/flutter_view_model/blob/main/packages/view_model/README_ZH.md