社区首页 >问答首页 >调用setState后抽屉主体不更新

调用setState后抽屉主体不更新
EN

Stack Overflow用户
提问于 2018-11-06 10:48:10
回答 1查看 1.2K关注 0票数 0

我的屏幕上有一个控制器,它显示一个抽屉。控制器作为参数传递给显示抽屉的主屏幕。抽屉主体应根据所选项目进行更改。

代码语言:javascript
代码运行次数:0
复制
class HomeScreen extends StatefulWidget {
  final HomeController controller;

  HomeScreen(this.controller);

  @override
  _HomeScreenState createState() => new _HomeScreenState(this.controller);
}

class _HomeScreenState extends State<HomeScreen>
    with SingleTickerProviderStateMixin {
  HomeController controller;
  TabController _tabController;

  _HomeScreenState(this.controller);

  @override
  void initState() {
    super.initState();
    _tabController =
        TabController(length: controller.tabItems.length, vsync: this);
  }

  @override
  Widget build(BuildContext context) {
    switch (controller.getMenuType()) {
      case MenuType.drawer:
        return buildDrawer();
      case MenuType.tabbarbottom:
        return buildTopTabbar();
      case MenuType.tabbartop:
        return buildTopTabbar();
      default:
        return buildDrawer();
    }
  }

  Widget buildDrawer() {
    return Scaffold(
      appBar: AppBar(title: Text("test")),
      body: _buildDrawerBody(),
      drawer: Drawer(
        child: ListView(padding: EdgeInsets.zero, children: _getDrawerTiles()),
      ),
    );
  }

用户选择显示选项卡栏或抽屉的配置。在抽屉的情况下,问题在于,即使在调用了setState并且drawerbody函数正在使用正确的页面创建新的小部件页面生成器之后,它也不会在屏幕上反映(或刷新

代码语言:javascript
代码运行次数:0
复制
Widget _buildDrawerBody() {
    Page page = controller.getSelectedPage();
    PageBuilderController pageController = PageBuilderController(page: page);
    return PageBuilder(pageController);
  }

  List<Widget> _getDrawerTiles() {
    Widget header = DrawerHeader(
      child: Text('Drawer Header'),
      decoration: BoxDecoration(
        color: Colors.blue,
      ),
    );
    List<Widget> tiles = controller.tabItems
        .map<Widget>((tab) => ListTile(
              title: Text(tab.label),
              onTap: () {
                // Update the state of the app
                // ...
                setState(() {
                  controller.selectedTab = tab;
                  Navigator.pop(context);
                });
              },
            ))
        .toList(growable: true);
    tiles.insert(0, header);
    return tiles;
  }

我已经确保getselectedpage返回正确的结果。

EN

回答 1

Stack Overflow用户

发布于 2018-11-06 13:55:09

我遇到的情况是,当您将小部件放在build方法之外的方法中时,它们并不能像预期的那样工作。尝试在build方法中将buildDrawer和_buildDrawerBody声明为最终小部件,看看是否会有所不同。

代码语言:javascript
代码运行次数:0
复制
@override
Widget build(BuildContext context) {
  final Widget _buildDrawerBody = ...

  final Widget buildDrawer = Scaffold(
    appBar: AppBar(title: Text("test")),
    body: _buildDrawerBody,
    drawer: Drawer(
      child: ListView(padding: EdgeInsets.zero, children: _getDrawerTiles()),
    ),
  );

  switch (controller.getMenuType()) {
    case MenuType.drawer:
      return buildDrawer;
    case MenuType.tabbarbottom:
      return buildTopTabbar();
    case MenuType.tabbartop:
      return buildTopTabbar();
    default:
      return buildDrawer;
  }
}

本文可能会提供一些关于创建小部件的最佳实践的见解:https://medium.com/flutter-io/out-of-depth-with-flutter-f683c29305a8

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53170352

复制
相关文章
Springsecurity从当前请求对象中获取用户信息
SpringMVC中Controller的请求参数都是当前请求HttpServletRequest带来的,Authentication Principal也是HttpServletRequest带来的,在Controller层我们拿到的是HttpServletRequest的实例是Servlet3SecurityContextHolderAwareRequestWrapper
周杰伦本人
2022/10/25
2.9K0
如何从抓包文件中分析慢请求
大家好,我是蓝胖子,请求慢的原因很多,当出现前端反应接口慢时,而通过后端日志查看请求处理时间并不慢时,往往会手足无措,当面对网络问题出现手足无措时,这就是在提醒你该抓包分析了,那么一般如何根据抓包文件去分析慢请求呢,今天我们就来看看。
蓝胖子的编程梦
2023/06/19
7190
如何从抓包文件中分析慢请求
如何从组中删除Linux用户?
在Linux中,用户可以是一个主要组和一个或几个次要(辅助)组的成员。文件“ / etc / group”为Linux系统中的每个用户定义了组成员身份。
用户6543014
2020/04/07
19.6K0
如何从文本中构建用户画像
一文告诉你什么是用户画像 介绍了到底什么是用户画像,了解了用户画像的本质是为了让机器去看之后,这里谈一谈如何从文本中构建用户画像。
abs_zero
2018/04/11
4.8K0
如何从文本中构建用户画像
shell脚本添加用户删除用户删除文件的脚本实现
#/bin/bash # DEBUG=0 ADD=0 DEL=0 RM=0 while [ $# -gt 0 ] do case $1 in -v|-verbose) DEBUG=1 shift ;; -h|--help) #帮助文档 echo "`basename $0` --add LIST --del LIST -h|--help --rm LIST" exit 0 ;; --add
艳艳代码杂货店
2021/10/30
1.6K0
接口测试如何在post请求中传递文件
2.找到body这个选项,输入文件对应的参数名,在然后把参数名后面的text选择为file。
sik1
2022/06/21
3.4K0
油猴脚本入坑指南
即每个油猴脚本都有的,脚本开头很多行注释的内容,这是油猴脚本关键的基础部分,刚开始接触可能会一头雾水,但你绝不能忽视这部分内容
子润先生
2021/06/09
4.3K0
从Go的二进制文件中获取其依赖的模块信息
我们用 Go 构建的二进制文件中默认包含了很多有用的信息。例如,可以获取构建用的 Go 版本:
Jintao Zhang
2021/02/26
2.6K0
PHP 用户请求数据获取与文件上传
我们上篇教程提到,要获取 HTTP 请求数据,可以通过 $_GET、$_POST、$_REQUEST 等 PHP 内置的超全局变量,如果要获取 Cookie 和文件上传信息,可以通过额外的 $_COOKIE 和 $_FILES。今天,学院君就来给大家演示下如何使用这些超全局变量获取请求数据。
学院君
2020/08/04
2.6K0
携程如何从海量数据中构建精准用户画像?
用户画像作为“大数据”的核心组成部分,在众多互联网公司中一直有其独特的地位。 作为国内旅游OTA的领头羊,携程也有着完善的用户画像平台体系。目前用户画像广泛用于个性化推荐,猜你喜欢等;针对旅游市场,携程更将其应用于“房型排序”“机票排序”“客服投诉”等诸多特色领域。本文将从目的,架构、组成等几方面,带你了解携程在该领域的实践。 1.携程为什么做用户画像 首先,先分享一下携程用户画像的初衷。一般来说,推荐算法基于两个原理“根据人的喜好推荐对应的产品”“推荐和目标客人特征相似客人喜好的产品”。而这两条都离不开用
用户1263954
2018/01/30
2.7K0
携程如何从海量数据中构建精准用户画像?
Google Chrome 增加 Greasemonkey 支持
Google 浏览器一个基本的缺失就是 Firefox 已经提供很久的插件和扩展。所以很多 Firefox 用户始终无法真正用上 Google 浏览器,其实根本的原因是 Google 浏览器看起来还是非常早期 beta 版本。
Denis
2023/04/13
4800
JavaScript 中如何取消请求
持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第21天,点击查看活动详情
掘金安东尼
2022/09/19
1.3K0
JavaScript 中如何取消请求
Windows如何运行.sh脚本文件
我们都知道sh文件在Linux服务器上可以直接执行,基本没有怎么关注过在windows上是否可以执行,平时开发的过程当中,经常会需要将修改的代码提交到gitLab/gitHub,提交代码有时候是一个固定的流程,对于这种情况,是否可以通过shell来进行自动化,这是需要学习的内容,本文就当做基本入门了解
在水一方
2022/06/14
26.1K0
Windows如何运行.sh脚本文件
linux中编写同步文件的脚本
搭集群最麻烦的就是修改配置文件,如果只用修改一个机器上的配置文件,然后用一个脚本就可以把配置文件同步到其他机器上,岂不快哉!
孙晨c
2020/07/07
2.3K0
【说站】Python脚本如何指定文件
(1)dest=files,是说将命令行中,--file的参数值赋值给变量files,你可以用args.files访问。
很酷的站长
2022/11/23
4990
【说站】Python脚本如何指定文件
JavaScript中如何取消ajax请求
jQuery为我们封装了ajax请求接口,在jQuery中,取消ajax请求也是通过调用.abort()方法,只不过操作的对象不再是原生XHR对象
刘亦枫
2020/03/19
3.2K0
shell 脚本中关于用户输入参数的处理
bash shell 中有一些特殊变量, 被称为 位置参数(positional parameter).
IT工作者
2022/07/03
2.5K0
如何快速获取抓包文件中HTTP请求的响应时间
在日常的工作中经常会会遇到一些请求性能问题,原因可发生在请求的每一个环节:客户端,网络,服务端,这里我们通常需要通过抓包来定位问题出在哪个环节。本文简单介绍一个小技巧,可以快速列出所有HTTP请求的header用时,进而找到耗时异常的请求,再进一步分析问题原因。
苏东
2020/07/08
11.8K0
如何快速获取抓包文件中HTTP请求的响应时间
点击加载更多

相似问题

Android 1.3.2 + Espresso -没有发现测试

11

使用Sbt进行测试-没有发现测试

10

Android测试:没有发现测试

14

使用Espresso测试Snackbar

10

在espresso测试中超时,测试不会运行。

23
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文