【问题标题】:Flutter side drawer as a widgetFlutter 侧抽屉作为一个小部件
【发布时间】:2023-03-07 18:18:01
【问题描述】:

我正在尝试将侧抽屉实现为我的颤振应用程序中的小部件

home.dart

import '../widgets/navigation_drawer_widget.dart'; //imported the nav drawer class from widgets directory

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return DefaultTabController(length: 2,
        child: Scaffold(
          drawer: DrawerWidget(),
          appBar: AppBar(
            title: Text('Home'),
            bottom: TabBar(tabs: <Widget>[
              Tab(
                icon: Icon(Icons.access_time),
                text: 'Tab 1',
              ),
              Tab(
                icon: Icon(Icons.calendar_today),
                text: 'Tab 2',
              )
            ]),
          ),
          body: TabBarView(children: <Widget>[
            Tab1(),
            Tab2()
          ]),
        )
    );
  }
}

我的抽屉小部件** navigation_drawer_widget.dart** 文件

import 'package:flutter/material.dart';

class DrawerWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Column(
      children: <Widget>[
        AppBar(
          automaticallyImplyLeading: false,
          title: Text('Menu'),
        ),
        ListTile(
          leading: Icon(Icons.home),
          title: Text('Home'),
          onTap: () {
            Navigator.pushReplacementNamed(context, '/home');
          },
        ),
        ListTile(
          leading: Icon(Icons.person),
          title: Text('My Profile'),
          onTap: () {
            Navigator.pushReplacementNamed(context, '/profile');
          },
        ),
        ListTile(
          leading: Icon(Icons.school),
          title: Text('My Education'),
          onTap: () {
            Navigator.pushReplacementNamed(context, '/education');
          },
        ),
      ],
    );
  }
}

但是当我点击导航汉堡图标时,它会显示类似这样的内容

如您所见,导航抽屉变得透明并延伸到页面的整个宽度。如果我将抽屉代码移动到主页(而不是执行 DrawerWidget() ),它将显示常规良好的 ol 导航抽屉。

知道这里发生了什么吗?

【问题讨论】:

    标签: dart flutter navigation-drawer


    【解决方案1】:

    如果你想要默认的材料设计抽屉,你需要用DrawerColumn 包裹在DrawerWidget 中。

    来自文档:

    抽屉可以是任何小部件,但通常最好使用材质库中的 Drawer 小部件,它符合 Material Design 规范。

    https://flutter.io/cookbook/design/drawer/

    【讨论】:

      【解决方案2】:

      您可以将Drawer 声明为Widget 而不是Class,然后导入到您的文件中。

      Widget myDrawer = Drawer(
        child: ListView(
          padding: EdgeInsets.zero,
          children: <Widget>[
            DrawerHeader(...),
            ListTile(...)
          ],
        ),
      );
      

      然后只是:

      import 'mydrawer.dart';
      
      class MyApp extends StatelessWidget {
        @override
        Widget build(BuildContext context) {
          return Scaffold(
            appBar: AppBar(...),
            body: Container(...),
            drawer: myDrawer
          );
        }
      }
      

      【讨论】:

        【解决方案3】:

        使用Container改变透明抽屉

        例子:

         class DrawerWidget extends StatelessWidget {
          @override
          Widget build(BuildContext contx) {
            return Container(
              color: Colors.amber[600],
              child: Column(
                children: <Widget>[
                  AppBar(automaticallyImplyLeading: false, title: Text('menu')),
                  ListTile(
                    leading: Icon(Icons.home),
                    title: Text('Home'),
                    onTap: () {
                      Navigator.pushReplacementNamed(contx, '/home');
                    },
                  ),
                  ListTile(
                    leading: Icon(Icons.person),
                    title: Text('My Profile'),
                    onTap: () {
                      Navigator.pushReplacementNamed(contx, '/profile');
                    },
                  ),
                  ListTile(
                    leading: Icon(Icons.school),
                    title: Text('My Education'),
                    onTap: () {
                      Navigator.pushReplacementNamed(contx, '/education');
                    },
                  ),
                ],
              ),
            );
          }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-03-24
          • 1970-01-01
          • 1970-01-01
          • 2021-10-13
          • 2019-10-31
          • 1970-01-01
          • 2019-02-07
          • 1970-01-01
          相关资源
          最近更新 更多