文章目录

  • 1. hook
    • 1.1 属性 行为 组合成了状态,除了状态还有作用
    • 1.2 keys
  • 2. useMemoized
  • 3. useCallback
  • 4. useRef
  • 5. useEffect
  • 6.1 其他钩子
  • 6.2 useXXXX 自定义钩子
  • 7. riverpod
  • 8. 常用Provider
  • 9. 局部刷新
  • 10. Consumer使用 ,局部刷新
  • 11. HookBuilder使用 ,局部刷新
  • 12. studyflutter代码

1. hook

需要继承HookWidget
useMemoized
useRef useCallback 通过内部使用useMemoized 只调用一次
useEffect

1.1 属性 行为 组合成了状态,除了状态还有作用
1.2 keys

指定是否应重用 [HookState] 或应创建新的对象列表。创建新的 [Hook] 时,框架会使用 [Hook.shouldPreserveState] 检查键是否匹配。如果没有,之前创建的 [HookState] 将被释放,并使用 [Hook.createState] 创建一个新的,然后是 [HookState.initHook]

2. useMemoized

缓存复杂对象的实例。
useMemoized->_MemoizedHook->_MemoizedHookState-> late final T value = hook.valueBuilder()
build 返回的一直都是value, 需要手动调用
一般useFuture useMemoized 配合使用

3. useCallback

缓存函数对象的实例

4. useRef

创建一个包含单个可变属性的对象。改变对象的属性是无效的。这对于在“构建”调用之间共享状态非常有用,而不会导致不必要的重构。

5. useEffect

对于需要取消的
useEffect->_EffectHook->_EffectHookState->initHook()->disposer = hook.effect()->dispose() => disposer?.call()
会在第一次build的时候主动调用,无需手动调用
dispose

6.1 其他钩子

useValueNotifier
useListenable->_ListenableHook->_ListenableStateHook->_listener->setState
useValueListenable->_UseValueListenableHook->_ListenableHook->
useValueListenable比useListenable多加了一个方法,有了返回值
useListenable相当于ValueListenableBuilder->_valueChanged->setState
useListenableSelector 多了一个条件,如果两个值不一样的时候才build


useAnimationController
useAnimation 相当于AnimatedBuilder->_handleChange->setState


useStreamController
useStream 相当于StreamBuilder


useFuture 相当于FutureBuilder


useReducer state一个是对象, action一个是参数
通过dispatch发送参数来返回新的state

6.2 useXXXX 自定义钩子

7. riverpod

runApp(const ProviderScope(child: App()));
需要继承ConsumerWidget 使用WidgetRef ref
继承 StateNotifier ChangeNotifier
ChangeNotifierProvider StateNotifierProvider
ref.watch 观察刷新
ref.read 修改
ref.listen 监听

8. 常用Provider

FutureProvider
StreamProvider.family可以传入参数
FutureProvider.autoDispose
StateNotifierProvider
StateController
Provider

9. 局部刷新

ValueListenableBuilder
ValueNotifier
Listenable

10. Consumer使用 ,局部刷新

提供程序更新时重建尽可能少的小部件

class Example extends StatefulWidget {@override_ExampleState createState() => _ExampleState();
}
class _ExampleState extends State<Example> {@overrideWidget build(BuildContext context) {return Consumer(builder: (context, ref, child) {final value = ref.watch(helloWorldProvider);return Text(value); // Hello world},);}
}

11. HookBuilder使用 ,局部刷新

             HookBuilder(builder: (BuildContext context){final num = useState(8);print("HookBuilder-build");return TextButton(onPressed: () {num.value++;},child: Text("num=${num.value}"));})

12. studyflutter代码

代码

hooks-riverpod 使用相关推荐

  1. Svn 笔记—— Hooks

    pre-commit 钩子功能: [root@Da hooks]# cat /application/svndata/sadoc/hooks/pre-commit #!/bin/bash #Check ...

  2. react hooks使用_为什么要使用React Hooks?

    react hooks使用 The first thing you should do whenever you're about to learn something new is ask your ...

  3. react hooks使用_如何使用React和Hooks检测外部点击

    react hooks使用 by Andrei Cacio 通过安德烈·卡西奥(Andrei Cacio) 如何使用React和Hooks检测外部点击 (How to detect an outsid ...

  4. react hooks使用_如何使用Hooks将React类组件转换为功能组件

    react hooks使用 by Balaganesh Damodaran 通过Balaganesh Damodaran 如何使用Hooks将React类组件转换为功能组件 (How to conve ...

  5. 优化自定义函数_10分钟教你手写8个常用的自定义hooks

    前言 Hook 是 React 16.8 的新增特性.它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性.本文是一篇以实战为主的文章,主要讲解实际项目中如何使用ho ...

  6. Subversion hooks脚本配置演示及排错

    Subversion提供了强大的hooks脚本功能,主要用于控制commit操作前,后的执行动作,以及lock,unlock操作前,后的执行动作:默认在版本仓库下的hooks目录下存在着这些脚本的模板 ...

  7. React学习笔记6:React Hooks API总结

    useState-保存状态(惰性初始化) 作用 函数组件添加状态 注意事项 初始化以及更新state 用来声明状态变量 使用步骤(使用useState来创建状态) 引入import React,{us ...

  8. React学习笔记5:React Hooks概述

    文章目录 概述 React的两套API 类和函数的差异 副效应(副作用)是什么? 钩子(hook)出现的意义 三大框架对比 为什么学习hooks 应用场景 新版本特性解读 Hook使用规则 概述 Re ...

  9. React 2019年路线图发布!Hooks明年一季度上线

    你可能在之前的一些文章和演讲中听过"Hooks"."Suspense"和"并发渲染"等新特性. 在这篇文章中,我们将介绍它们在React稳定 ...

  10. 探React Hooks

    前言 众所周知,hooks在 React@16.8 中已经正式发布了.而下周周会,我们团队有个同学将会仔细介绍分享一下hooks.最近网上呢有不少hooks的文章,这不免激起了我自己的好奇心,想先行探 ...

最新文章

  1. Linux下c开发 之 线程通信
  2. Unity3D 与 objective-c 之间数据交互。iOS SDK接口封装Unity3D接口
  3. php分列显示,【杂谈】PHP数组怎样按键名完成降序分列
  4. idea切换视图快捷键_IDEA操作技巧:一些常用且实用的快捷键
  5. python教程简书_python基础教程
  6. Java如何配置环境变量
  7. 什么是CAPL编程语言
  8. 0805,0603,1206这些封装的名字是什么来的
  9. 微信小程序 集成腾讯云IM做的聊天室
  10. 简析发送手机验证码原理
  11. 苹果bundle id是什么?
  12. C++中的函数原型和函数定义
  13. 心知天气html,Typecho 博客添加“心知天气”网页天气插件教程
  14. python中 math.isfinite返回值为false_带有Python示例的math.isfinite()方法
  15. android平台开发板外接罗技C525摄像头不支持扫码有什么办法解决
  16. 浅析Windows通信编程
  17. 用java编写天天爱消除_jQuery实现简易的天天爱消除小游戏
  18. Leapfrog Triejoin:最坏情况下的最优连接算法
  19. firefox添加搜狗搜索引擎搜索时乱码
  20. 时间戳转换成日期格式

热门文章

  1. Nginx之proxy_pass详解
  2. Python pass 用法
  3. 招式与内功谈起——设计模式概述(一)
  4. 热温冷冰,数据存储需要全生命周期管理
  5. 谷胱甘肽修饰CdTe/CdS量子点(GSH-CdTe/CdSQDs);溶菌酶(Lyz)修饰Ag2S量子点(Lyz-Ag2S QDs)齐岳定制服务
  6. Nginx系列教程(07) - Location正则表达式
  7. H5实现调用本地摄像头实现实时视频以及拍照功能
  8. flutter笔记 图片组件使用base64数据,数据格式报错
  9. Ceph 集群监控之Calamari 安装部署
  10. 将m3u8文件转MP4、TS、flv、mkv等文件