Трепетание перейти на страницу с ящиком материала по умолчанию - PullRequest
0 голосов
/ 26 марта 2020

Что лучше для перехода на страницу в флаттере, используя ящик материалов по умолчанию. Я все еще учусь работать с Flutter.

В Android мы использовали для перемещения на страницу фрагмента, но как это работает во Flutter?

Я просто хочу понять, как перейти к элементу ящика без использования blo c.

Screenshot of app

class MdDrawer extends StatelessWidget {
  final String title;

  MdDrawer({Key key, this.title}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: AppBar(
        title: Text(title),
      ),
      body: Center(
        child: Text('MyPage'),
      ),
      drawer: Drawer(

        child: ListView(
          padding: EdgeInsets.zero,
          children: <Widget>[

            UserAccountsDrawerHeader(
              accountName: const Text(_AccountName),
              accountEmail: const Text(_AccountEmail),
              currentAccountPicture: CircleAvatar(
                backgroundColor: Colors.brown,
                child: Text(_AccountAbbr),
              ),
            ),

            ListTile(
              leading: Icon(Icons.lightbulb_outline),
              title: Text('Notes'),
              onTap: () => _alertOnListTileTap(context),
            ),

            Divider(),

            ...

          ],
        ),
      ),
    );
  }

  _alertOnListTileTap(BuildContext context) {
    Navigator.of(context).pop();
    showDialog(
      context: context,
      child: AlertDialog(
        title: const Text('Not Implemented'),
        actions: <Widget>[
          FlatButton(
            child: const Text('OK'),
            onPressed: () {
              Navigator.of(context).pop();
            },
          ),
        ],
      ),
    );
  }
}

1 Ответ

0 голосов
/ 27 марта 2020

Выполнение этого без использования blo c усложнит управление вашим кодом по мере его масштабирования, если только вам не нужен прототип приложения без какой-либо бизнес-логики c.

Тем не менее, вы можете сделать это без blo c следующим образом:

  1. Поместите весь экран в body: в виде списка, который отображает соответствующий экран путем индексации. как
body: [
      Expenses(),
      Inspiration()
      Personal(),
      Work(),
      More(),
    ].elementAt(selectedIndex),
drawer: MdDrawer(onTap: (int val){
                setState(() {
                    this._selectedIndex=val;
                 });
              } 
,)

Теперь вы можете pu sh желаемое тело для отображения, предоставив индекс в качестве возвращаемого значения Navigator.of(context).pop(index) или обратного вызова функция в MdDrawer. Мы будем делать метод функции обратного вызова. Возврат индекса будет использоваться для обновления состояния с помощью setState.

class MdDrawer extends StatelessWidget {
  final String title; final Function onTap;

  MdDrawer({Key key, this.title, this.onTap}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: AppBar(
        title: Text(title),
      ),
      body: Center(
        child: Text('MyPage'),
      ),
      drawer: Drawer(


        child: ListView(
          padding: EdgeInsets.zero,
          children: <Widget>[

            UserAccountsDrawerHeader(
              accountName: const Text(_AccountName),
              accountEmail: const Text(_AccountEmail),
              currentAccountPicture: CircleAvatar(
                backgroundColor: Colors.brown,
                child: Text(_AccountAbbr),
              ),
            ),

            ListTile(
              leading: Icon(Icons.lightbulb_outline),
              title: Text('Notes'),
              onTap: () => _alertOnListTileTap(context, 0),
            ),
           ListTile(
              leading: Icon(Icons.lightbulb_outline),
              title: Text('Expenses'),
              onTap: () => _alertOnListTileTap(context, 1),
            ),

            Divider(),

            ...

          ],
        ),
      ),
    );
  }

  _alertOnListTileTap(BuildContext context, int index ) {
    onTap(indext);
    Navigator.of(context).pop();

  }
}

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...