2

ジェネリック ナビゲーション ドロワーとアプリ バー付きの下部ナビゲーション バーを作成する方法を知りたいので、中央のコンテンツのみを画面に変更します。Android フラグメントのように、ナビゲーション ドロワーとボトム ナビゲーションをメイン アクティビティに作成し、すべてのフラグメントでアクセス可能にします。メインでボトムを呼び出すと正常に動作しますが、ドロワーから同じクラスを開くと、ボトムナビゲーションが非表示になります..クラスがボトムナビゲーションドロワーと呼ばれ、ボトムナビゲーションが常にそこにある必要があり、すべてに設定する必要はありませんクラス。

class TabBarController extends StatefulWidget {
 @override
_TabBarControllerState createState() => _TabBarControllerState();
}

class _TabBarControllerState extends State<TabBarController> {
int _currentIndex = 0;

final List<Widget> _screens = [
HomeScreen(),
Helpers.hasPrivilege(Privileges.MONITORING)? MonitoringScreen() :  ShopsListScreen(),
NotificationsListScreen(),
ProfileScreen()
];

final List<Widget> _titleIcons = [
Text('HOME'),
Text('MENU'),
Text('NOTIFICATIONS'),
Text('PROFILE'),
];

@override
void initState() {
// TODO: implement initState
super.initState();

}

@override
Widget build(BuildContext context) {

return _screenView();
}



Widget _screenView() {
return Scaffold(

  body: IndexedStack(
    index: _currentIndex,
    children: _screens,
  ),
  bottomNavigationBar: BottomNavigationBar(
      showSelectedLabels: true,
      showUnselectedLabels: true,
      type: BottomNavigationBarType.fixed,
      selectedItemColor: appColor,
      unselectedItemColor: Colors.grey.withOpacity(0.5),
      currentIndex: _currentIndex,
      onTap: (index) {
        setState(() {
          _currentIndex = index;
          setState(() {});
        });
      },
      items: [

        BottomNavigationBarItem(
            icon: Icon(Icons.home), title: Text('Home')),
       BottomNavigationBarItem(icon: Icon(Icons.shop), title: Text('MENU')) ,
        BottomNavigationBarItem(
            icon: Icon(Icons.notifications), title: Text('Notifications')),
        BottomNavigationBarItem(
            icon: Icon(Icons.person), title: Text('Profile')),
      ]
  ),
  drawer: AppDrawer(),
);
}}


 class AppDrawer extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
 return Drawer(
  child: Container(
    color: Colors.red[900],
    child: Column(
      children: <Widget>[
        SizedBox(width: double.infinity,height: 200.0),
        ListTile(

          leading: Icon(FontAwesomeIcons.home,color: Colors.white),
          title: Text(AppStrings.home,style: TextStyle(color: Colors.white)),
            onTap: ()
            {
              Navigator.pop(context);
              Navigator.push(context,MaterialPageRoute(builder: (context) => 
 TabBarController()));

            }


        ),
        ListTile(

          leading: Icon(FontAwesomeIcons.user,color: Colors.white),
          title: Text(AppStrings.profile,style: TextStyle(color: Colors.white)),
            onTap: ()
            {
              Navigator.pop(context);
              Navigator.push(context,MaterialPageRoute(builder: (context) => 
 ProfileScreen()));
            }


        ),
        ListTile(

          leading: Icon(FontAwesomeIcons.store,color: Colors.white),
          title: Text(AppStrings.shops,style: TextStyle(color: Colors.white)),
            onTap: ()
            {
              Navigator.pop(context);
              Navigator.push(context,MaterialPageRoute(builder: (context) => 
 ShopsListScreen()));
            }


        ),
        ListTile(

          leading: Icon(FontAwesomeIcons.receipt,color: Colors.white),
          title: Text(AppStrings.orders,style: TextStyle(color: Colors.white)),
            onTap: ()
            {
              Utils.showToastShort(context, AppStrings.orders);
            }


        ),
        Divider(),
        Expanded(
          child: Align(
            alignment: FractionalOffset.bottomCenter,
            child:
            ListTile(

                leading: Icon(FontAwesomeIcons.powerOff,color: Colors.white),
                title: Text(AppStrings.logout,style: TextStyle(color: Colors.white)),
                onTap: ()
                {
                  Navigator.pop(context);

                  UserPreferencesManager.clearAll();
                   Navigator.push(context,MaterialPageRoute(builder: (context) => 
           LoginScreen()));
                }


                ),
          ),
          )
        ],
      ),
       ),
      );
      }
      }
4

0 に答える 0