首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

将BuildContext保存在varible中作为类实例是个好主意吗?

将BuildContext保存在variable中作为类实例是一个好主意吗?

保存BuildContext作为类实例的变量可能不是一个好主意。BuildContext是Flutter框架中的一个重要概念,它代表了当前Widget树的上下文信息。它包含了许多与构建UI相关的属性和方法,例如主题、本地化、尺寸等。

通常情况下,BuildContext应该在需要使用它的地方直接获取,而不是将它保存在变量中。这是因为BuildContext的值在每次构建UI时都会发生变化,保存它可能导致使用过时的上下文信息,从而引发错误或不一致的行为。

如果需要在类实例中使用BuildContext,可以考虑将其作为方法参数传递给需要使用它的方法。这样可以确保每次使用时都获取到最新的上下文信息。

总结:

  • 不建议将BuildContext保存在变量中作为类实例。
  • 建议在需要使用BuildContext的地方直接获取它。
  • 如果需要在类实例中使用BuildContext,可以将其作为方法参数传递。
相关搜索:在应用程序类中使用SQLiteDatabase实例作为静态字段是个好主意吗?将多个组件作为一个道具传递是个好主意吗?将主窗口指针传递给其他类是个好主意吗?将聊天消息存储在mongodb集合中是个好主意吗?将图存储在MySQL中是一个好主意吗?将db/schema.rb放到.gitignore列表中是个好主意吗?将ID存储在ElasticSearch索引的_type字段中是个好主意吗?在presenter中使用在Application类中声明静态变量是个好主意吗在React中,将文本作为道具传递给组件是一个好主意还是坏主意?通过php发送html电子邮件时,将css类存储在php字符串中是个好主意吗?将postgres函数文件放在类路径中,并在Spring Boot启动事件中执行,这是一个好主意吗?getContext()方法在片段中返回null。将上下文保存在变量中是个好主意吗?我想了解其中的利弊。使用一个唯一目的是将2个(非常相关的)对象组合在一起的类被认为是一个好主意吗?如果类路径中存在同一包的两个类,tomcat将加载两个实例。将类实例和方法作为参数传递给C++中的另一个函数如果一个类的数据成员不为空,那么它有可能只存在于该类的实例中吗?当我将一个基类用于两个不同的类,并在一个类实例中更改变量时,另一个类中的变量也会被更改吗?是否可以将JSON存储在MySQL数据库表字段中?这对我来说是个好主意吗?如果是这样的话,是如何做到的呢?
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

python面向对象具体解释(上)「建议收藏」

#实例化 通过名后跟一对圆括号实例化一 mc = MyClass() # instantiate class 初始化 ‘int()’构造器 def __int__(self):...(1.5 版本号新增) C.class 实例C相应的(仅新式) 特殊方法内建属性 dir():获得类属性或者实例属性名字列表....设置实例的属性能够在实例创建后随意时间进行,也能够在能够訪问实例的代码中进行。 构造 器init()设置这些属性的关键点之中的一。...方法属性 分为实例方法和方法.实例方法仅仅属于一实例;而方法即属于全部,也属于实例全部....静态方法级别的方法, 与静态方法不同的,它必须显示传入cls參数;并且假设还须要调用其它的静态方法。

24920

【-Flutter 探索-】AutomaticKeepAliveClientMixin 保持 State 状态

1.前置知识 先对 ListView 组件做个测试,这是一色块列表,其中每个 Item 自定义的 StatefulWidget ,名为 ColorBox ,其中状态量 Checkbox 的选择情况...item ,但是初始化了 10 ,说明 ListView 会预先初始化后面一定数目 item 的状态。...保持 State 状态 你可能会发现 ListView 存在 addAutomaticKeepAlives 属性,但是用起来似乎没有什么效果,可能很多人都不知道它的真正作用是什么,这个暂且按下不表...但可惜,这是在我的 bgm 。我轻轻地 addAutomaticKeepAlives 置为 false (默认false) 。...复制代码 那 AutomaticKeepAliveClientMixin 存在的意义是什么,当然方便使用啦。

2.1K30
  • 【源码篇】Flutter Provider的另一面(万字图文+插件)

    List类型,泛型为一抽象,初始化这个List 然后给这个List,add这个抽象的实现实例 某个合适时候,遍历这个List所有实例,触发所有实例的某个方法 如果这个思想和反射注解结合在一起,...这地方做了一很重要的操作,_CreateInheritedProvider实例赋值给 _delegate buildWithChild方法_InheritedProviderScope的owner...底下也调用了 startListening,说明从外面传进来的这个回调也调用了, 上下文实例 和 传进来的XxxProvider实例 作为入参传进了这个回调,此处传进来的回调也通过 .call 被调用了...markNeedsBuild()方法Element的 Element实现了BuildContext抽象抽象方法的抽象,该类十分重要 这个方法花里胡哨的代码写了一大堆,他最主要的功能:就是会调用...的,notifyClients()方法ProxyElement的一抽象方法,InheritedElement在此处做了一实现 notifyClients()非常非常重要的方法,它内部有

    1.4K61

    【源码篇】Flutter Bloc背后的思想,一篇纠结的文章

    大家可能在群里,经常看到一些老哥说:BlocProvider封装了一层。...对了,说不定是Bloc作者,故意留了一Provider刷新机制在Bloc,把这个作为彩蛋! 突然感觉这点疙瘩没了!...实例实例直接传入了InheritedProvider,这就是涉及到Provider,最终是储存在 _InheritedProviderScopeElement, _startListening...构造函数里面调用 _bindEventsToStates() 方法 Bloc抽象了一mapEventToState(Event event)方法,继承Bloc抽象,必须实现该方法 Bloc实例了...mapEventToState,然后mapEventToState回传State对象 然后触发listen回调,listenstate传emit,然后触发刷新控件重建 总结 上面几个关键的分析完

    2.4K41

    Flutter 对状态管理的认知与思考

    包容万千 状态管理的重点也就在其表面:状态和管理 寥寥四字,就精悍的概括了思想及其灵魂 状态页面的灵魂,业务逻辑和通用逻辑的锚定符,只要分离出状态,将其管理,就可以页面解耦 一般来说,从状态管理的概念上...;bloc需要继承,一事件 老实说,俩种框架我都用了,bloc这样写确实比较麻烦,尤其涉及传参的时候,就需要在里面定义很多变量 总结 上面几种形式对比,可以发现区别还是蛮大的 增加了Action...可以子widget的element实例,储存在自身的InheritedElement的_dependents变量 调用其notifyClients方法,会遍历_dependents的子Element...addListener(subject); } return _value; } } 需要写一非常重要的中转,这个也会储存响应式变量的监听对象 这个有着非常核心的逻辑:他响应式变量和刷新控件关联起来了...回收依赖实例需要针对处理 此处我写了一回收控件,可以完成实例的自动回收 命名的含义,实例和控件绑定,控件被回收时,逻辑层实例也将被自动回收 class EasyBindWidget extends

    1.1K41

    Widget如何工作的

    @protected Element createElement(); Element Element Widget 的一实例化对象,它承载了视图构建的上下文数据,连接结构化的配置信息到完成最终渲染的桥梁...Element在树特定位置Widget的实例; Flutter 渲染过程,可以分为这么三步: 首先,通过 Widget 树生成对应的 Element 树; 然后,创建相应的 RenderObject...(注意:这里StatelessWidget作为参数传递了进去) 然后通过build方法创建Widget并且需要传入一BuildContext 现在我们来看StatelessElement它做了什么。...不是要的BuildContext?难道StatelessElement就是BuildContext的子类?...Element 则是 Widget 的一实例化对象,我们经常用到BuildContext就是Element的子类。 RenderObject负责界面的布局和绘制。

    3.2K10

    不使用全局变量在Python函数之间传递变量

    问题背景在 Python ,如果一函数需要访问另一函数的局部变量,则需要使用全局变量。然而,使用全局变量会带来一些问题,例如:全局变量容易被意外修改,导致程序出现错误。...因此,在 Python ,尽量避免使用全局变量。解决方案1、使用函数参数传递变量函数之间传递变量最简单的方法使用函数参数。...例如,我们可以变量x作为参数传递给函数mhello():def mColor(x): color = colorchooser.askcolor() mlabel2 = Label(mGui...x = color[1] print (color[1]) return x​x = "#000000"x = mColor(x)mhello(x)2、使用成员变量传递变量如果两函数同一的成员函数...例如,我们可以变量x作为闭包变量,然后在mColor()和mhello()中使用它:def create_closure(x): def mColor(): color = colorchooser.askcolor

    12210

    Flutter的Key详解

    在Flutter,几乎每一Widget都有一key。虽然我们在日常的开发中极少会使用到这个key,但是实际上key的存在很有必要的。那么key到底是什么?它有什么作用?...但是如果同时存在多个同一型的控件的时候,此时类型已经无法作为区分的条件了,我们就需要使用到key。 举个简单的例子,如果乒乓球A和B随机打乱,从中任意挑出一,你知道你拿到的A还是B?...没有Key的时候会发生什么 先来看个例子:一Column布局垂直放置两同类型的stateful有状态组件,其中color直接作为statefulWidge的属性,而count存在于state。...我们编写的众多Widget之间的相互嵌套,最终会组合成一树,系统通过分析当前Widgets树的结构来决定这个页面应该被展示成什么样子,widget本身只是作为配置信息的载体存在,真正负责UI渲染的下面的...基于Element的复用机制的解释 在Flutter,Widget不可变的,它仅仅作为配置信息的载体而存在,并且任何配置或者状态的更改都会导致Widget的销毁和重建,但好在Widget本身是非常轻量级的

    2.4K31

    Flutter(八)--Flutter渲染逻辑+源码解读Flutter(八)--Flutter渲染逻辑+源码解读

    我们开发创建的每一Widget都会被渲染到屏幕上? 带着这三问题,开始这篇文章,阅读大概需要8-10分钟。...同时决定是否RenderObject实例attach到Render Tree上,并决定是否进行Update; 通过对三种树关系的探索,从而回答之前的问题一,其实参与渲染是以Render Tree为依据...并在刷新流程起到非常重要的作用 RenderObject RenderObject 作为抽象。每个节点需要实现它才能进行实际渲染。...扩展 RenderOject 的两最重要的RenderBox 和 RenderSliver。...这两分别是应用了 Box 协议和 Sliver 协议这两种布局协议的所有渲染对象的父,其还扩展了数十和其他几个处理特定场景的,并实现了渲染过程的细节,如 RenderShiftedBox 和

    1.5K10

    Flutter BaseWidget 实现onResume、onPause()

    任何一项目开始了,若想追求的更好,那么就需要下功夫对项目用户体验和代码效率深入的研究了。作为用户和产品经理、老板、UI、不懂技术的其他人员看到的产品只是表面的。...): BaseWidgetState__NextPageWidgetState_dispose 不难发现执行次数最多的就数deactivate()和build()函数了,灵机一动,是否可以以此内推这两函数作为类似原生...1、为每个page确立一唯一标识。 2、创建存放page唯一标识符的数组。 3、构造函数私有并实现单例。...总结: 作为一名开发者,不仅仅要呈现任何功能其表,更多的用遵循编码规范加以变化使程序更优质。...日积月累、仿佛实战,不管原生开发还是任何一混合开发的框架都需要更好的管理页面的生命周期,追求更好用户体验的同时也更好的界面的呈现比作有生命的对象,遵循生老病死又到投胎转世。

    77730

    Flutter 组件 | Builder 构造器与 BuildContext 认知

    而 Builder#build 只是使用了构造传入的 builder 函数,并将 当前的 BuildContext 作为回调传递出去。...---- BuildContext 抽象,也就是说它无法直接构造对象。 而在 Flutter 框架层,它有且仅有一实现 ---- Element ,所以两者之间的关系应该非常明确了。...值得注意的 BuildContext 并没有树状结构,也就是说它只是一种抽象,内部的结构、逻辑完全交于实现来完成,抽象只是负责暴露给用户需要的接口功能。...这里 BuildContext 的作用就是获取相关状态 XXXState。核心方法 findAncestorStateOfType,获取上层第一某类型组件对应的 State 对象。...Builder 组件本身难?10 行的源码组件肯定不难,难的你对它存在价值的思考,以及去发现更深层东西的兴趣和能力。

    2.1K21

    Flutter开发之路由与导航的实现

    作为官方提供的路由管理组件,Navigator提供了一系列方法来管理路由栈,其中最常用的两方法push()和pop(),它们的含义如下。...push():将给定的路由入栈,返回值Future对象,用以接收路由出栈时的返回数据。 pop():栈顶路由出栈,返回结果为页面关闭时返回给上一页面的数据。...要打开一新的页面,只需要创建一MaterialPageRoute对象实例,然后调用Navigator.push()方法新页面压到路由堆栈的顶部即可,如果要返回上一页面,则可以调用Navigator.pop...MaterialPageRoute继承自PageRoute,PageRoute抽象,表示占有整个屏幕空间的一模态路由页面,它还定义了路由构建及切换时过渡动画的相关接口及属性。...maintainState:默认情况下,当入栈一新路由时,原来的路由仍然会被保存在内存,如果想在路由没用的时候释放其所占用的所有资源,可以设置maintainState为false。

    3.2K10

    Flutter Widget框架之旅 顶

    MyScaffold小部件在垂直列组织其子女。在列顶部,它放置了MyAppBar的一实例应用程序栏传递给一Text小部件用作其标题。...小部件作为参数传递给其他小部件一种强大的技术,可以让您创建可以以各种方式重用的通用小部件。最后,MyScaffold使用Expanded来填充剩余空间,其中包含一中心消息。...例如,应用栏有一阴影,标题文本会自动继承正确的样式。 我们还添加了一浮动动作按钮,以便您采取措施。 请注意,我们再次小部件作为参数传递给其他小部件。...Scaffold小部件许多不同的小部件作为命名参数,每个小部件放置在适当位置的Scaffold布局。...当此小部件的父级重建时,父级创建ShoppingList的新实例,但该框架重新使用树已存在的_ShoppingListState实例 而不是再次调用createState。

    6.7K20

    【源码篇】Flutter GetX深度剖析 | 我们终将走出自己的路(万字图文)

    大家可以看看这地方单例的实现,我发现很多源码都用这种方式写的,非常简洁 全局的数据都是存在 _singl ,这是Map key:对象的runtimeType或者的Type + tag value:...初始化的时候,会实例化一 RxNotifier() 对象,使用 _observer变量接受:这个操作很重要 initState做了一比较关键的操作,_observer的listener方法...下面贴下 _observer 对象转移出去的代码:主要的逻辑就是在 notifyChilds 方法 RxInterface 中有 proxy 静态变量,这个变量十分重要,他中转变量!...正常情况为空,但是,可能作为中间变量暂存对象的情况,现在暂时将他的对象取出来,存在observer变量 RxInterface.proxy = _observer:将我们在 _ObxState实例化的...,首先必须写一依赖注入的,我们需要自己管理逻辑层的那些实例 我这边写了一极其简单,仅实现三种基础功能:注入,获取,删除 ///依赖注入,外部可将实例,注入该类,由该类管理 class Easy

    4K52
    领券