没有AppBar的颤动应用程序设计

时间:2018-04-29 21:51:56

标签: dart flutter

我尝试使用这种方法在状态栏的应用程序 中拥有我的所有UI(此处只有Text),但< em>没有 AppBar

import 'package:flutter/material.dart';

void main() => runApp(MaterialApp(
      title: "example",
      home: Scaffold(
        body: Text("text widget"),
      ),
    ));

此问题已经询问一次与我的文字类似,但the answer to it (which is also accepted)仅考虑margin。对我而言,这似乎不是一个令人满意的解决方案,特别是因为您需要访问MediaQuery.of(context).padding,我甚至无法弄清楚如何在我的简单示例中使用context

我的代码给了我以下结果:

get

但我想看到这个:

want

现在要明确我的问题和其他问题之间的区别:我没有搜索边距,我正在寻找一种合法的惯用方法。我的意思可能是这样的:

ScaffoldWithoutAppBar(body: ...

显然这不存在,但我不希望保证金修复

2 个答案:

答案 0 :(得分:9)

将您的网页内容(文字或脚手架)包裹在SafeArea小部件

  

一个小部件,通过足够的填充来保护其子级,以避免操作系统的入侵。

return new SafeArea(child: new Text('text widget'));

答案 1 :(得分:-1)

您可以将Scaffold包裹到SafeArea中,如下所示:

import 'package:flutter/material.dart';

void main() => runApp(MyApp(
  textInput: Text("Text Widget"),
));

class MyApp extends StatefulWidget {
  final Widget textInput;
  MyApp({this.textInput});

  @override
  State<StatefulWidget> createState() => MyAppState();
}

class MyAppState extends State<MyApp> {
  bool checkBoxValue = false;
  @override
  Widget build(BuildContext ctxt) {
    return new MaterialApp(
      home: SafeArea(
           child: Scaffold(
              body: new Center(
              child: new Column(
              children: <Widget>[
                widget.textInput,
                Checkbox(
                    value: checkBoxValue,
                    onChanged: (bool newValue){
                      setState(() {
                        checkBoxValue = newValue;
                      });
                    }
                )
              ],
            ))),
          ),
      );
  }
}

相反,如果您不需要在多个屏幕中重复重复AppBar,则可以创建单独的小部件:

import 'package:flutter/material.dart';
import 'state.dart';

AppBar commonAppBar(String title, void action()) {
  return new AppBar(
    title: new Text(title),
    actions: [
      new IconButton(icon: new Icon(Icons.flip), onPressed: action),
      new IconButton(icon: new Icon(Icons.exit_to_app), onPressed: () {
        new StateSubject().switchToLogin();
      }),
    ],
  );
}