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

推荐订阅源

F
Full Disclosure
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
AI
AI
博客园 - Franky
博客园 - 叶小钗
MyScale Blog
MyScale Blog
Microsoft Azure Blog
Microsoft Azure Blog
V
Visual Studio Blog
U
Unit 42
C
Check Point Blog
美团技术团队
博客园 - 【当耐特】
MongoDB | Blog
MongoDB | Blog
WordPress大学
WordPress大学
aimingoo的专栏
aimingoo的专栏
A
About on SuperTechFans
G
Google Developers Blog
腾讯CDC
Jina AI
Jina AI
博客园 - 三生石上(FineUI控件)
人人都是产品经理
人人都是产品经理
酷 壳 – CoolShell
酷 壳 – CoolShell
N
Netflix TechBlog - Medium
S
SegmentFault 最新的问题
H
Help Net Security
T
Threat Research - Cisco Blogs
T
Tenable Blog
J
Java Code Geeks
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
Threatpost
T
The Blog of Author Tim Ferriss
The Cloudflare Blog
Cyberwarzone
Cyberwarzone
Spread Privacy
Spread Privacy
K
Kaspersky official blog
G
GRAHAM CLULEY
Cisco Talos Blog
Cisco Talos Blog
Project Zero
Project Zero
C
CERT Recently Published Vulnerability Notes
AWS News Blog
AWS News Blog
Know Your Adversary
Know Your Adversary
T
Tor Project blog
S
Secure Thoughts
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
PCI Perspectives
PCI Perspectives
P
Palo Alto Networks Blog
Webroot Blog
Webroot Blog
N
News | PayPal Newsroom
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
C
Cyber Attacks, Cyber Crime and Cyber Security

Flutter

kkRepo 只用 1 天就支持了 Futter / Dart / Pub 仓库私服搭建、支持代理 pub.dev、支持聚合私服和 Proxy - V2EX flutter 开发的鸿蒙应用上架应用商店了 - V2EX flutter 现在开发最佳的库用什么?或者有什么好用的脚手架吗? - V2EX USB 摄像头求助。 - V2EX flutter 引入 aar 包,运行报错,版本 3.38.9 - V2EX 用 Flutter 做了一个 Redis Desktop Manager - V2EX flutter 生态这么差?写个 demo 两天都没调通 - V2EX 由于开发 flutter 然后测试是黑盒测试只会手点,开发了个插件 - V2EX 求助, flutter 项目混合式搭建问题 - V2EX 求助大神,为什么用 flutter 开发的安卓笔记软件卡顿、掉帧 - V2EX 写了一个 flutter 的状态管理库,大家参谋参谋。 - V2EX 开源一套 flutter UI 组件库,方便各位大佬快速进行跨平台开发,欢迎各位大佬 start - V2EX Flutter 的学习曲线高吗?对于个人开发者来说是否值得 - V2EX 闲着没事开发一款网文写作应用—— Letter Studio - V2EX 请教 flutter-windows 客户端白屏问题。 - V2EX 第一次写 flutter app 有个疑问 - V2EX Flutter in_app_purchase 内购在 iOS 上的应用总结 - V2EX 另一个视角看 Flutter 的思维 - V2EX 招 flutter 工程师 兼职! - V2EX 求推荐一个基础框架 - V2EX Ubuntu 团队为什么无偿给 Flutter 写桌面多窗口功能? - V2EX 请教: flutter 或 Android 更新、热更新方案 - V2EX 求一份 iOS 或者 Flutter 兼职 - V2EX 求助贴!关于 Flutter 接入 in_app_purchase 内购服务端部分二次验证的 - V2EX flutter 是不是要升级所有的 widget 了? - V2EX 上架 Play store 的问题... - V2EX 应用未声明 QUERY_ALL_PACKAGES 权限却报错,是 firebase 导致的吗? - V2EX App 开发新手请教一个 flutter 开发中的安卓问题 - V2EX V 友们, Flutter 编译报错可能是什么原因 - V2EX 如何实现梯形 tab 切换 - V2EX 请教:大佬们 2025 年 Flutter 用哪个路由? - V2EX flutter 支持 harmony os next 吗 - V2EX flutter 项目二开, UI 修改与项目优化 - V2EX flutter 是否能 vscode remote 远程开发和调试 ? - V2EX 大家使用 flutter 开发的 app 用什么日活统计工具呢 - V2EX Flutter 已经可以开发鸿蒙了吗 - V2EX 基于 flutter 的 二步验证 TOTP 应用 - V2EX 有没有可以学习的 flutter riverpod 的实战项目,希望推荐下更好的状态管理方案 - V2EX flutter 开发桌面软件如何做出好看得布局, 比如像 vscode, reqable - V2EX MBA M3 16GB 能玩 flutter 开发吗? - V2EX 真的无力吐槽 flutter 了 - V2EX 有 flutter 大佬么?请教几个问题 - V2EX Flutter 开发桌面应用程序,如何获取鼠标的绝对坐标? - V2EX flutter 启动 ios 项目失败 n 次,求大神帮忙 - V2EX Flutter 3.27 Flex 终于支持 spacing 了 - V2EX 听说有一个 app 安装后可以查看手机上哪些 app 是 flutter 开发的? - V2EX flutter 实现这样的功能,红包感谢 - V2EX flatter.cn 是国内外包公司的网站么 - V2EX Flutter GoRouter 如何实现 SingleTop - V2EX [求助]为什么 flutter 调试模式可以。发布模式打包出来的则无法运行。 - V2EX
最简单的状态管理库 view_model - V2EX
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