如何从流生成器返回 null

Posted

技术标签:

【中文标题】如何从流生成器返回 null【英文标题】:How to return null from stream builder 【发布时间】:2020-07-15 17:51:40 【问题描述】:

我有一个想以编程方式移除抽屉的场景。 我使用流构建器来获取值并决定显示或删除抽屉,例如,当流值为真时,我返回我的抽屉小部件,否则返回 null 以删除抽屉,但流构建器不允许我返回 null,如果我return empty Container flutter 不会从应用栏中删除抽屉图标,所以我怎样才能实现我的目标并使用流构建器删除抽屉。 这是我的代码

new Scaffold(
      appBar: PreferredSize(
        child: MyAppBar(
          title: "Settings",
        ),
        preferredSize: Size.fromHeight(55),
      ),
      drawer: StreamBuilder(
        stream: settingService.getSettings,
        builder: (BuildContext context, snapshot) 
          if (snapshot.hasData) 
            final drawer= snapshot.data;
            if (drawer.visibility) 
              return myAppDrawerWidget(
                activeIndex: 13,
              );
            
          
          
        ,
      ),
);

【问题讨论】:

【参考方案1】:

AppBar()中添加automaticallyImplyLeading

  `automaticallyImplyLeading`: false, // this will hide Drawer hamburger icon

代码:

Scaffold(
      appBar: PreferredSize(
        child: AppBar(
          title: Text('Settings'),
          automaticallyImplyLeading: _isDrawerShowing,
        ),
        preferredSize: Size.fromHeight(55),
      ),
      drawer: StreamBuilder(
        stream: settingService.getSettings,
        builder: (BuildContext context, snapshot) 
          if (snapshot.hasData) 
            final drawer= snapshot.data;
            setState(() 
              _isDrawerShowing = drawer.visibility;
            );
            if (drawer.visibility) 
              return myAppDrawerWidget(
                activeIndex: 13,
              );
            
          
        ,
      ),
    );

当你不必显示Drawer时返回null

  drawer: null,

【讨论】:

您的解决方案存在问题,它没有删除抽屉,只是隐藏了抽屉图标,并且可以通过屏幕滑动打开抽屉。 流生成器不允许我返回 null 我如何设置抽屉:当我的流值为 false 时为 null

以上是关于如何从流生成器返回 null的主要内容,如果未能解决你的问题,请参考以下文章

如何将流生成器中的数据显示到文本字段中并更新来自列表视图?

Flutter:拉动刷新和流生成器

更新时删除图像数据的流生成器

使用流生成器时数据未存储在列表变量中

选择查询生成器返回 null

java中把列表用流生成了Excel表格中的时间显示问题