Как обновить макет для приложения Flutter с Backdrop в качестве главного меню приложения - PullRequest
0 голосов
/ 14 января 2019

Я совершенно новичок во Флаттере, поэтому, пожалуйста, примите мои извинения за глупый вопрос (возможно, это глупо). У меня вопрос, если бы реализовал фон для моего меню приложения, смог бы ли я обновить любой определенный экран новым. Например, если бы я был на Android с домашним экраном приложения с фоном, после нажатия на меню я бы показал фрагмент, а после некоторых взаимодействий с ним со стороны пользователя, я бы показал другой фрагмент в зависимости от дизайна и поток приложения. Мой вопрос заключается в том, что мне делать во Flutter для обновления экрана, а не использовать MaterialPageRoute для изменения всего экрана.

1 Ответ

0 голосов
/ 14 января 2019

Вы можете использовать PageView виджет, если вы не хотите использовать Navigator.

PageController _pageController;
int _page = 0; // initial page index

@override
void initState() {
  super.initState();
  _pageController = PageController(keepPage: true);
}

@override
void dispose() {
  _pageController.dispose();
  super.dispose();
}

void onPageChanged(int value) {
  setState(() {
    this._page = value;
  });
}

void go(int index) {
  _pageController.jumpToPage(index); //this will change the current page in view.
}

Перейдите в виджет Backdrop и измените его следующим образом.

backLayer: Container(
  color: Colors.blue,
  child: ListView(
    children: <Widget>[
      ListTile(
        title: Text("Screen two"),
        onTap: () {
          go(1); //page index
        },
      ),
      ListTile(
        title: Text("Screen three"),
        onTap: () {
          go(2);
        },
      )
    ],
  ),
),


frontLayer: Container(
  color: Colors.white,
  child: PageView(
    onPageChanged: onPageChanged, //page changed function
    controller: _pageController, //controller
    physics: NeverScrollableScrollPhysics(), //disable swipe
    children: <Widget>[
      HelloScreen(), //put your screens here.
      ScreenTwo(),
      ScreenThree(),
    ],
  ),
),
...