Flutter Drawer настроить AppBar на экранах - PullRequest
0 голосов
/ 06 февраля 2019

Я новичок в трепетании и не знаю, как структурировать свое новое приложение.

У меня есть ящик, который показывает разные экраны (как стиль фрагмента в разработке для Android), и я хочу изменить панель приложений для каждого из экранов (добавить кнопки или даже изменить панель приложения на sliverAppBar), но я неВот как этого добиться.

class Main extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'My App',
      theme: new ThemeData(
        primarySwatch: Colors.teal,
      ),
      home: MyDrawer(),
    );
  }
}

И в этом ящике:

return Scaffold(
  appBar: AppBar(
    title: Text(widget.appDrawerItems[_selectedDrawerIndex].title),
  ),
  drawer: new Drawer(
    child: new ListView(
      children: <Widget>[            
        new Column(children: appDrawerOptions),
        new Divider(),
        new Column(children: configurationDrawerOptions)
      ],
    ),
  ),
  body: _getDrawerItemWidget(_selectedDrawerIndex),
);

Не могли бы вы указать мне правильное направление?

Ответы [ 2 ]

0 голосов
/ 21 апреля 2019

Я предполагаю, что вы нажимаете на экраны, используя Navigator.push() или Navigator.pushNamed() в вашем Drawer, и что новые экраны, которые вы нажимаете, являются виджетами.если эти новые экраны Scaffolds, скажем, вместо Columns, вы можете определить appBar для каждого из них.Вот пример:

В вашем ящике, куда бы вы ни позвонили Navigator.pushNamed():

ListTile(
 title: DrawerText(text: 'Second Screen'),
 onTap: () {
   Navigator.pushNamed(context, 'my_second_screen');
 },
),

В вашем main:

void main() {
  runApp(MaterialApp(
    home: MyHomeScreen(title: 'MyHomeScreen'),
    routes: <String, WidgetBuilder>{
      // define the routes
      'my_second_screen': (BuildContext context) => MySecondScreen(),
    },
  ));
}

И на экране выMySecondScreen будет выглядеть следующим образом:

class MySecondScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        // This is your custom app bar specific for this screen.
      ),
      body: SecondScreenBody(),
      drawer: MyDrawer(),
    );
  }
}

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

0 голосов
/ 06 февраля 2019

Я не уверен, правильно ли я понял ваш вопрос.Если вы хотите открывать разные экраны при нажатии элементов выдвижного ящика, вы можете использовать ListTile и, используя свойство onTap, вы можете перейти к своему экрану (используя Navigator).

Вы можете использовать tabcontroller соответствует фрагментам.См. this для того же.

...