我尝试使用这种方法在状态栏的应用程序 中拥有我的所有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
。
我的代码给了我以下结果:
但我想看到这个:
现在要明确我的问题和其他问题之间的区别:我没有搜索边距,我正在寻找一种合法的惯用方法。我的意思可能是这样的:
ScaffoldWithoutAppBar(body: ...
显然这不存在,但我不希望保证金修复。
答案 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();
}),
],
);
}