【问题标题】:bottomNavigationBar do what I want only while hot reloadingbottomNavigationBar 只在热重载时做我想做的事
【发布时间】:2018-06-26 14:03:39
【问题描述】:

我想为我的应用设置一个静态底栏。 这个栏应该在中间显示一个设备的小时,在右侧显示另一个设备读取的温度。

我的问题只是定位/大小。

当我启动它时(使用 android studio,在真实或虚拟设备上),它不起作用:预览不是我例外,我选择的尺寸似乎已经改变。

但是当我热重载它时,它就变成了我想要的样子:

问题是最终的应用程序不是热重载的应用程序..

我可能已经确定了问题所在, 我使用 MediaQuery.of(context).size 和构建器来获取上下文,以适应所有考虑尺寸的设备。这个解决方案一定很脏,但我没有找到其他任何东西..

这是我的代码,希望情况清楚...

return new MediaQuery(
    data: MediaQueryData.fromWindow(ui.window),
    child: Builder(
        builder: (context) {
          return  new Builder(
              builder: (
                  context) {
                return
                new MaterialApp(
                    home: new DefaultTabController(
                      length: 6,
                      child: Scaffold(
                        bottomNavigationBar:



                          new Container(
                            color: Colors.white,
                            width: MediaQuery.of(context).size.width,
                            height: MediaQuery.of(context).size.height*0.1,
                            alignment: Alignment.centerRight,
                            child: new Container(
                                      color: Colors.blue,
                                      width: MediaQuery.of(context).size.width* 2/3,
                                      alignment: Alignment.centerRight,
                                      child: new Row(
                                                children: <Widget>[
                                                  new Expanded(child: new Container(
                                                    color : Colors.yellow,
                                                    child: new Text('22 : 22' ),
                                                    alignment: Alignment.center,
                                                  )),
                                                  new Expanded(child:new Container(
                                                    color: Colors.pink,
                                                    child: new Text(' 37.8 °C'),
                                                    margin: new EdgeInsets.all(MediaQuery.of(context).size.width*0.02),
                                                    alignment: Alignment.centerRight,
                                                  ))
                                                ],
                                              ),
                                    ),


                          ),

感谢您的帮助。

【问题讨论】:

  • 也许您在更新模型值时没有使用setState(...)?我没有完全深入研究您的代码。

标签: flutter flutter-layout


【解决方案1】:

您可以使用Stack 并将其中一个小部件绝对定位在另一个之上:

new Stack(
    children: <Widget> [
        new Row(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget> [
                new Text(time),
            ],
        ),
        new Row(
            mainAxisAlignment: MainAxisAlignment.end,
            children: <Widget> [
                new Text(temperature)
            ],
        ),
    ],
),

其中timetemperature 是在状态(Stateful Widgets))内设置的变量。然后只需将其包含在bottomNavigationBar 中。

【讨论】:

    【解决方案2】:

    我最终在StatelessWidget 中添加了我之前的代码,并在ScaffoldbottomNavigationBar 字段中调用它:它完成了这项工作。

    我在创建的StatelessWidget 中调用 MediaQuery.of(context)

    谢谢。

    【讨论】:

      猜你喜欢
      • 2011-02-27
      • 2014-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-14
      相关资源
      最近更新 更多