第一百零五回 全局共享数据之Selector

【Flutter文件操作】File_selector全攻略:本地文件读写看这一篇就够了 在Flutter跨平台开发中,文件操作是常见的需求场景。官方推荐的插件完美解决了各平台(Android/iOS/Windows/macOS/Linux/Web)文件操作的兼容性问题。本文将带你全面掌握这个"万能文件选择器"的使用技巧,包含完整代码示例和平台适配方案。"告别平台差异,一个API搞定全平台文件操作! 阅读详情


我们在上一章回中介绍了 组件之间共享数据相关的内容,本章回中将继续介绍该内容.闲话休提,让我们一起Talk Flutter吧。

知识回顾

我们在前面章回中介绍了全局共享数据相关的内容,当时介绍了获取共享数据的三种方法,本章回将介绍其中的一种方法:使用Selector获取共享数据。

使用方法

Selector是一个Widget,它提供了builder,selector,shouldRebuild和child四个属性,一方面它可以转换数据类型,另一方面它可以获取共享数据。

我们可以通过selector属性获取到共享数据类型的对象,然后就可以使用共享类型提供的getter方法获取对象中的共享数据,把共享数据转换后再返回给builder属性。

我们重点介绍Selector的builder属性,selector属性和shouldRebuild属性,前两个属性都是必选属性,也就是说我们必须给这些属性赋值。

builder属性

该属性是方法类型,方法中包含三个参数,方法返回Widget对象,该方法和Consumer中buidler属性对应的方法相似,不同的地方只方法中第二个参数的类型,该方法中三个参数的详细功能如下:

  • context:主要用来创建Widget,为创建Widget提供上下文环境;
  • value:是泛型类型,它用来表示转换数据类型后的对象;
  • child:表示Selector组件的子组件,因此它代表的对象和Selector组件的child属性代表的对象相同;

selector属性

该属性是方法类型,方法中包含两个参数,方法返回转换后的数据类型,下面是该方法的函数原型和相关参数的详细介绍:

///函数原型
S Function(BuildContext, A) selector,
  • BuildContext:主要用来创建Widget,为创建Widget提供上下文环境;
  • A:它是泛型类型,它用来表示共享数据对象,通过该对象的getter方法可以获取到共享数据,然后就可以转换数据类型;
  • S:它是泛型类型,它用来表示转换数据类型后的对象,它和builder属性中的第二个参数类型相同;

shouldRebuild属性

该属性是方法类型,方法中包含两个参数,方法返回true或者false.返回值表示是否更新组件以及组件中的共享数据。该属性是可选属性,默认返回false.下面是该方法的函数原型和相关参数的详细介绍:

///函数原型
bool Function(T previous, T next)
  • previous:它是泛型类型,它用来表示转换前数据类型的对象;
  • next:它是泛型类型,它用来表示转换后数据类型后的对象;

注意:这两个属性的类型相同,表示把共享数据类型转换后的数据类型,也就是selecttor属性中的S。

child属性

该属性表示Selector中的子组件,它和builder属性对应方法中的child参数相同。

介绍完组件中所有属性相关的内容后,我们通过具体的代码来演示它的使用方法。

示例代码

class WidgetC extends StatelessWidget {
  const WidgetC({
    super.key,
  });

  
  Widget build(BuildContext context) {
    // TODO: implement build
    return Selector<ViewModel, ViewModelAfterTranslate>(
      ///把新类型中数据通过child显示出来
      builder: (context, viewModelAnother,child) {
        print('builder of Selector of Widget C running');
        return Text('Widget C data: ${viewModelAnother.getIntData}');
      },
      ///在selector中进行数据类型转换,通过参数传入原类型,在方法中转换后返回新类型
      selector: (context, viewModel) {
        ViewModelAfterTranslate obj = ViewModelAfterTranslate();
        ///依据共享数据的值来转换数据,转换后的数据通过builder属性显示出来
        /// 字符串是通过button修改产生的,这里写成固定的值,实际项目中不能这样写
        if(viewModel.getData == 'change data') {
          obj.setIntData = 1;
        }else if(viewModel.getData == 'another value'){
          obj.setIntData = 2;
        }else {
          obj.setIntData = 0;
        }
        return obj;
      },
      ///可以配置是否需要更新数据,默认值为false,它是可选属性
      ///注意方法中的参数类型是新数据类型,也就是转换后的数据类型
      // shouldRebuild:(previous,next) => true,
      shouldRebuild:(previous,next) {
        print(' prev: ${previous.getIntData}, next: ${next.getIntData}');
        if (previous.getIntData == next.getIntData) {
          return false;
        } else {
          return true;
        }
      },
      ///没有使用该属性
      child: Text('child'),
    );
  }
}

在上面的代码中,把Selector组件封装到了一个独立的组件中,一方面可以减少代码的耦合,另一方面可以给builder属性和slector属性传递BuildContext类型的参数,代码中相关的地方都添加了注释,我就不详细介绍了。

此外代码给Selector指定了泛型类型:ViewModel和viewModelAnother。前者是共享数据的类型,详细的定义可以参数前面章回的示例代码。后者是转换数后的类型,它和viewModel的内容类似,不同之处在于把数据类型从String变成了int.用来表示转换数据类型。

和Consumer类似,Selector也有Selector2,Selector3这些类,它们用来对多种数据类型做转换,我在这里就不详细介绍它们的使用方法了,大家可以自己动手去实践。

看官们,关于"全局共享数据之Selector"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!

Simulink中Selector的使用 simulink中关于 selector 的使用。 阅读详情

相关推荐

你必须掌握在Flutter中添加资源文件的方法

主要介绍了你必须掌握在Flutter中添加资源文件的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

Flutter状态State管理、InheritedWidget、Provider、Selector

flutter

qq_27909209的博客 859

flutter file-selector

Flutter的file_selector插件可以帮助开发者在移动应用中方便地选择文件。 要使用file_selector插件,首先需要将插件的依赖项添加到pubspec.yaml文件中,并运行flutter pub get命令获取插件的最新版本。 在插件使用方面,file_selector插件可以方便地实现文件选择功能,支持多选和所有类型的文件,并且在选择文件后可以获取到文件的路径和其他信息。 在使用file_selector插件时,需要注意以下几点: 在Android系统中,需要添加相关的权限和配置,以确保文件选择功能正常运行; 在iOS系统中,需要在Info.plist文件中添加相关的权限和配置; 在实现多选时,需要使用到Flutter的Future和async/await等技术,确保异步操作的正确处理; 在获取文件信息时,需要使用到Flutter的Intent和ActivityResult等类,以便正确处理Android系统中的Intent和返回结果。 总之,file_selector插件是Flutter中非常实用的一个插件,可以帮助开发者方便地实现文件选择功能,提高移

Flutter中的Provider(二)局部刷新-Selector

在Flutter中提供了几种局部刷新的方式,这里简单演示一下Selector的使用,代码如下: /// Provider的局部刷新 /// 上次的通用版本在数值改变的时候会触发整个Provider包裹的builder: (context, child)函数,在性能上会有一点问题 /// 通过Provider提供的局部刷新功能可以减少这个性能损耗,简单示例代码如下: import 'package:flutter/material.dart'; import 'package:provider/provid

Mr_Tony的专栏 2199

Qoder + ADB Supabase :5分钟GET超火AI手办生图APP

本文介绍如何利用Qoder、阿里云 ADB Supabase 和通义千问图像编辑模型,快速构建AI手办生图Flutter应用。无需传统后端,通过AI生成代码、BaaS服务与边缘函数调用,实现从原型到上线的敏捷开发,全流程轻量高效,助力Vibe Coding落地实践。

数据库技术 926

初识colmap

COLMAP是一款开源的计算机视觉软件,主要用于从一系列二维图像中进行三维重建。它全称为“COLLISION-MAPping”,是一个高度集成的Structure-from-Motion (SfM) 和 Multi-View Stereo (MVS) 管道工具,由斯坦福大学开发和维护。COLMAP的主要功能包括特征检测与匹配、增量式SfM、多视图立体匹配以及优化。它能够从无序或有序的二维照片集合中恢复出三维场景的几何结构(点云)以及每张图像对应的相机姿态。

Hhsjehejj的博客 5537

flutter 局部刷新控件 Selector 使用

Selector是一个非常强大的工具,可以帮助你在使用Provider进行状态管理时,只监听你关心的部分数据,从而避免不必要的 widget 重建,提高应用的性能。

zhukui66的专栏 1609

MDK开发篇:基于立创逻辑派FPGA-G1与Cortex-M1软核的按键控制LED实战

本文详细介绍了基于立创逻辑派FPGA-G1开发板与高云Cortex-M1软核的完整开发流程。通过Gowin云源软件配置软核系统与GPIO外设,并在Keil MDK环境中编写按键控制LED的C程序,最终实现程序固化与上电自启动。教程涵盖硬件配置、软件开发、在线调试与固化部署全步骤,帮助STM32开发者快速上手FPGA软核开发。

weixin_42103128的博客 141

Flutter Provider状态管理 - Selector

如果你还不了解Consumer,请移步我的上一篇博文,Flutter Provider状态管理-Consumer,此篇文章是基于上一篇的基础来的。 从上一篇中我们知道Consumer可以实现UI页面的局部刷新,摒弃掉传统的setState,让UI的表现上一个台阶。但是我在实际的业务场景使用Consumer却遇到了很多问题。 举个栗子: 一个计数器页面,这不是一个简单的计数器页面,因为它有两个Text,我们分别命名为Text1 和Text2,以及两个Button,分别是Button1和Button2。点

大灰狼的小绵羊哥哥的博客 1894

全网最详细单细胞保姆级分析教程(一) ---pbmc

通过观察热图,可以了解不同细胞在主成分上的分布情况,以及主成分与细胞特征之间的关系。数据归一化是数据分析中的常见步骤,旨在消除数据集中不同特征之间的量纲差异,并使它们在相同的尺度上进行比较。函数会根据指定的主成分维度计算数据点之间的距离,并找到每个数据点的邻居。函数会根据数据点之间的相似性将其分组到不同的聚类中。数据缩放是数据分析中的常见步骤,旨在将数据的特征值调整到相似的范围,以避免某些特征对分析结果的过度影响。通过可视化维度载荷,可以了解哪些特征对主成分的形成起到了重要作用,以及不同特征之间的相关性。

ZxVSaccount的博客 6692

Kali Linux实战:5分钟复现永恒之蓝漏洞攻击(附Win7靶机配置指南)

本文提供了一份详细的Kali Linux实战指南,指导读者在5分钟内于隔离的虚拟环境中复现经典的永恒之蓝漏洞攻击。内容涵盖从Windows 7靶机配置、网络设置,到使用Nmap进行服务发现、利用Metasploit框架进行漏洞扫描与利用的全过程,并演示了基础的Meterpreter后渗透操作,旨在帮助网络安全学习者通过亲手实践深入理解SMB协议漏洞的攻防原理。

weixin_29313547的博客 190

flutter 局部刷新控件Selector源码实现原理

包提供的一个优化工具,用于在状态管理中仅选择所需数据片段,避免不必要的 Widget 重建。:仅当特定数据变化时触发 Widget 重建,而非整个状态对象变化时都重建。:通过比较数据片段的前后值,避免无关数据变化导致的冗余重建。在复杂的状态管理中显著提升性能,避免不必要的 UI 更新。:仅当数据变化时调用,触发 Widget 重建。:仅重建依赖特定数据片段的 Widget。定义为顶层或静态方法,防止不必要的重建。获取依赖的状态对象,并监听其变化。结果,并与旧值比较,决定是否重建。:在数据变化时,重新计算。

zhukui66的专栏 722

视觉Transformer实战 | Transformer详解与实现

本文系统介绍了 Transformer 架构的核心原理与实现。相比传统 RNN 和 CNN,Transformer 凭借自注意力机制有效捕捉序列中的长距离依赖关系,支持并行训练,显著提升效率。其核心创新在于通过查询、键、值向量计算注意力权重,理解单词间的语义关联。架构包含编码器-解码器结构:编码器通过多头自注意力和前馈网络提取输入特征;解码器利用掩码自注意力和交叉注意力生成输出。本文使用 PyTorch 实现了缩放点积注意力、位置编码、层归一化等关键模块,并构建了完整的 Transformer 模型。

盼小辉丶的博客 4万+

Flutter 文件选择选择器 文件选择、选择word、pdf、excel等文件 fget_file

flutter_file_selector 文件选择插件,支持多选 ,演示示例在example目录 我代码我传到码云上了,点我跳转 下面是效果图: 第三张是ios端 本插件使用到的依赖 插件依赖 pub仓库地址 ermission_handler 权限申请 pub file_picker 调用选择器(IOS端使用的是这个) pub 使用 flutter_file_selector: # 在pubspec.yaml 中引入依赖 flutterfileselecto

jq的博客 7418

SystemUI-下拉去掉后去掉用户切换-去掉电源按键中的紧急呼叫

这里自己倒腾完成了两个常见需求:去除用户切换、去除紧急呼叫UI在去除用户切换时候,用到了Compose知识点,所以很难按照以前经验去找对应布局、找对应的View Item ,以往方法都只能部分借鉴的搞系统的还是要跟着谷歌学一点Compose技能了,方便日常开发调试。

十年饮冰,难凉热血 1452

RK3588 C++ MeloTTS 推理

本文介绍了基于RK3588平台和RKNN工具链实现的端侧语音合成(TTS)系统。该系统支持中英文混合输入处理,通过自动合并英文单词、转换标点符号等方式预处理文本,并将其转换为音素和声调序列。核心推理流程包含编码器、中间处理和解码器三个阶段:编码器将音素序列转为隐藏状态,中间处理调节音调和语速,解码器生成最终波形。代码示例展示了输入数据设置和模型推理过程,利用RK3588内置NPU实现高效语音合成。该系统展现了在边缘计算设备上实现复杂AI任务的能力。

J。 194

Selector的使用

这里没有在 Scrapy 框架中运行,而是把 Scrapy中的Selector 单独拿出来使用了,构建的时候传入text 参数,就生成了一个Selector选择器对象,然后就可以像Scrapy中的解析方式一样,调用xpath、css等方法来提取数据了。由于Selector 主要是与Scrapy结合使用,如 Scrapy的回调函数中的参数response 直接调用 xpath或者 css 方法来提取数据,所以在这里我们借助 Scrapy shell 来模拟Scrapy 请求的过程,讲解相关的提取方法。

W_chuanqi的博客 3404

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Simulink选择器模块(Selector)

Simulink选择器模块(Selector)多维模式的使用 1、模块说明 1、从向量或者矩阵和多维信号选择信号时候的说明如下: 基于您为 Number of input dimensions 参数输入的值,将显示一个索引设置表。表中的每一行对应于 Number of input dimensions 中的一个输入维度。对于每个维度,您可以定义要使用的信号元素。可将向量信号指定为一维信号,将矩阵信号指定为二维信号。当您配置 Selector 模块进行多维信号操作时,模块图标将发生变化。 例如,假设一个 6

haokeyu1752558508的博客 3万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

在 Flutter 中,Selector 和 Consumer 有什么区别和联系

性能Selector通常比Consumer更高效,因为它可以减少不必要的重建。如果你只关心数据模型中的一小部分数据,使用Selector可以避免整个数据模型变化时的重建。灵活性Consumer提供了更直接的方式来访问整个数据模型,而Selector则允许你更精细地控制数据监听和组件重建。使用场景:如果你需要使用数据模型中的多个字段,或者你不想手动处理数据解构,那么Consumer可能是更好的选择。如果你只关心数据模型中的特定字段,并且希望优化性能,那么Selector是更好的选择。总的来说,

u010805607的博客 1376

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Flutter状态管理:Provider4 Selector

前言 实在是抱歉,最近项目太忙,所以更新的太慢了。废话不多说,我们开始吧。 Selector 读文档 其实我本来是没有计划说说Selector的,但有朋友想让我介绍一下,所以先从Selector开始。 总得来说,Selector和Consumer是等价的,也是通过Provider.of获取数据的,不同的是,Selector正如他的名字一样,他会过滤掉一些不必要的数据更新从而阻止重新构建,也就是说Selector只会更新符合条件的数据。 我们先看一下Selector的定义: class Sel

大灰狼的小绵羊哥哥的博客 4412

Flutter Provider Selector

Selector 源码: class Selector<A, S> extends Selector0<S> { /// {@macro provider.selector} Selector({ Key? key, required ValueWidgetBuilder<S> builder, required S Function(BuildContext, A) selector, ShouldRebuild<S>

卓原的进化之旅 1693

flutter常用插件

barcode_scan 0.0.8#二维码识别qr_mobile_vision: ^0.1.0 #二维码识别 这个不好用。pull_to_refresh: ‘^1.1.5’#下拉刷新上拉加载更多 //flutter_easyrefresh。shared_preferences: ‘^0.4.2’#shared_preferences存储。cached_network_image: ‘0.4.1’#加载网络图片并本地缓存。flutter_staggered_grid_view:#瀑布流展示控件。

qq_36859035的博客 363

Flutter file_selector 插件:跨平台文件交互完全指南

本文全面介绍了Flutter文件管理插件file_selector的使用要点。该插件支持Android、iOS、Linux等主流平台,提供统一的文件操作接口,包括文件选择、保存和目录获取等功能。文章详细阐述了各平台的兼容性要求、配置步骤(特别是macOS的权限配置),并通过代码示例演示了核心功能实现,如单/多文件选择、文件保存和目录选择。同时强调了跨平台文件类型过滤的适配策略和不同平台的功能限制,最后给出权限适配、路径有效性等注意事项,为开发者提供了全面的使用指南。

2501_93396617的博客 1221

Flutter之provider

逐步完善… 资料 Flutter学习笔记之Provider 5.0.0入门级使用

AdrianAndroid的专栏 1522

Flutter Provider Selector数据更新问题优化_provider list update(1)

这个属性,里面有两个值,一个是收到更新通知之后新的数据,一个还是缓存的数据,通过判断这两个值来决定是否刷新,默认。(img-JkdKeQEs-1713124478588)]我们对其进行一下封装,首先定义一个类来进行承载数据,传入的泛型就会。资料的朋友,可以添加V获取:vip204888 (备注鸿蒙)**就刷新,我们可以通过这个属性来做一些处理进行优化。这虽然能够解决问题,但是非常麻烦,并且效率不高。,通过它来判断数据是否有更新便可以了。比如我们需要监听的对象是。修改数据,然后刷新UI。

2401_84164503的博客 1112
上一篇: 第一百零四回 全局共享数据之Consumer
下一篇: 第一百零六回 数据共享(状态管理)总结
talk_8
博客等级 码龄12年 1万+粉丝 2136原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

talk_8

真诚赞赏,手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值