首页
学习
活动
专区
工具
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类參数;并且假设还须要调用类中其它的静态方法。

25620

【-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.5K61

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

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

    2.4K41

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

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

    1.2K41

    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.3K10

    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.5K31

    不使用全局变量在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

    16210

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

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

    1.6K10

    Flutter BaseWidget 实现onResume、onPause()

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

    83930

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

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

    2.3K21

    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

    4.4K52

    每个 Flutter 开发人员都应该知道的 16 个 Dart 技巧(第三节)

    使用匿名函数和函数作为参数 在 Dart 中,函数是一等公民,可以作为参数传递给其他函数。...在读取值时需要使用断言运算符 ( ),因为 Dart 不能保证给定键的值存在。 8. 使用命名构造函数和初始化列表以获得更符合人体工程学的 API。 假设您要声明一个表示温度值的类。...需要一个只能实例化一次的类(又名单例)?使用带有私有构造函数的静态实例变量。 单例最重要的特性是整个程序中只能有一个它的实例。这对于建模文件系统之类的东西很有用。...._(); } 要在 Dart 中创建单例,您可以声明一个命名构造函数并使用_语法将其设为私有。 然后,您可以使用它来创建类的一个静态最终实例。...您可以将 a 指定Duration为事件之间的时间间隔,并指定一个匿名函数来生成给定其在流中的索引的每个值。 16.

    1.2K10
    领券