Разработка приложений для флаттера без AppBar - PullRequest
0 голосов
/ 30 апреля 2018

Я пытался использовать такой подход, чтобы весь мой пользовательский интерфейс (здесь только Text) находился в приложении ниже в строке состояния , но без AppBar :

import 'package:flutter/material.dart';

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

Этот вопрос уже был задан , когда-то похожий на мой текст, но ответ на него (который также принят ) учитывает только margin , Мне это не кажется удовлетворительным решением, особенно потому, что вам нужен доступ к MediaQuery.of(context).padding, где я даже не мог понять, как использовать context в моем простом примере.

Мой код дает мне следующий результат:

get

Но я хочу увидеть это:

want

Теперь, чтобы прояснить разницу между моим вопросом и другим вопросом: я не ищу margin , я ищу законный идиоматический способ сделать это. То, что я имею в виду, может выглядеть так:

ScaffoldWithoutAppBar(body: ...

Очевидно, что этого не существует, но я не хочу исправление поля .

Ответы [ 2 ]

0 голосов
/ 22 июня 2018

Вы можете обернуть 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();
      }),
    ],
  );
}
0 голосов
/ 30 апреля 2018

Оберните содержимое своей страницы (текст или скаффолд) в SafeArea виджет

Виджет, который вставляет своего потомка достаточным заполнением, чтобы избежать вторжений в операционную систему.

return new SafeArea(child: new Text('text widget'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...