颤振小部件中的静态变量,坏主意?

Posted

技术标签:

【中文标题】颤振小部件中的静态变量,坏主意?【英文标题】:Static variables in flutter widgets, bad idea? 【发布时间】:2020-02-27 01:16:59 【问题描述】:

在颤振小部件中制作静态变量是个坏主意吗? 例如,如果我有一个带有脚手架的***有状态小部件,并且我将 globalKey 传递给脚手架,如下所示:

class DemoScreen extends StatefulWidget 
  createState() => DemoScreenState();


class DemoScreenState extends State<DemoScreen> 
final scaffoldKey = GlobalKey<ScaffoldState>();

@override
  Widget build(BuildContext context) 
    return Scaffold(
      key: scaffoldKey,
      body: Builder(
        builder: (BuildContext context) 
          return ...

我想在树中较低的小部件中访问该键,我可以创建这个final scaffoldKey static 并使用DemoScreenState.scaffoldKey 访问这个键吗?或者这是一个坏主意?为什么?

为什么还要在DemoScreenState 而不是DemoScreen 中定义最终变量?不使用widget.scaffoldKey 只是为了让您的代码更具可读性吗?

【问题讨论】:

是的。这是个坏主意。您应该改用 Inheritedwidget,例如 provider 是什么原因?仅仅为了使用scaffoldstate可以吗? 【参考方案1】:

1 - DemoScreenState 应该像这样 _DemoScreenState 是私有的

2 - 仅当您想从另一个小部件访问 GlobalKeyScaffoldState>() 是的,将其放入演示屏幕并使其成为静态变量并使用 widget.ScaffoldKey。

3 - 你想在代码中做的所有事情,只要想想是什么让代码易于阅读、更灵活、性能更好

希望我的评论对你有帮助

【讨论】:

以上是关于颤振小部件中的静态变量,坏主意?的主要内容,如果未能解决你的问题,请参考以下文章

颤振更新文本小部件变量而无需重新加载

请解释语法 - 使用继承小部件的颤振块提供程序

静态变量初始化顺序

静态变量初始化顺序

它在声明变量性别时出错(颤振)

我在颤振中正确运行 multi_select_flutter 小部件时遇到问题