dart 尝试创建抽屉式菜单时不正确使用ParentDataWidget

tpxzln5u  于 2023-06-03  发布在  其他
关注(0)|答案(1)|浏览(283)

我先看看这个文件:https://docs.flutter.dev/testing/common-errors#incorrect-use-of-parentdata-widget并知道通常情况下使用扩展或错误的父部件下的一些部件。但这不是我的工作
我实际上试着做了一个像这样的多级菜单

我的抽屉代码就像这个抽屉一样dart

import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';

class MyDrawer extends StatefulWidget {
  const MyDrawer({super.key});

  @override
  State<MyDrawer> createState() => _MyDrawerState();
}

class _MyDrawerState extends State<MyDrawer> {
  bool showHistory = false;
  bool showConfig = false;
  @override
  Widget build(BuildContext context) {
    return Drawer(
      child: ListView(
        children: <Widget>[
          DrawerHeader(
            child: Stack(
              children: <Widget>[
                SvgPicture.asset(
                  'assets/images/logo.svg',
                ),
               
              ],
            ),
          ),
          ListTile(
            leading: SvgPicture.asset(
              'assets/images/speedometer.svg',
            ),
            title: const Text('Dashboard'),
            onTap: () {
              Navigator.pushNamed(context, '/');
            },
          ),
          ListTile(
            leading: SvgPicture.asset(
              'assets/images/chemical_bottles.svg',
            ),
            title: const Text('Jobs'),
            onTap: () {
              Navigator.pushNamed(context, '/jobs');
            },
          ),
          ListTile(
            leading: SvgPicture.asset(
              'assets/images/box.svg',
            ),
            title: const Text('History'),
            onTap: () {
              setState(() {
                showHistory = !showHistory;
              });
            },
          ),
          if (showHistory) ...[
            ListTile(
              leading: const Spacer(),
              title: const Text('Batches'),
              onTap: () {
                // Navigator.pushNamed(context, '/history');
              },
            ),
            ListTile(
              leading: const Spacer(),
              title: const Text('Shipments'),
              onTap: () {
                // Navigator.pushNamed(context, '/history');
              },
            ),
            ListTile(
              leading: const Spacer(),
              title: const Text('Supplier Invoices'),
              onTap: () {
                Navigator.pushNamed(context, '/supplierivcs');
              },
            ),
          ],
          ListTile(
            leading: SvgPicture.asset(
              'assets/images/cog.svg',
            ),
            title: const Text('Configurations'),
            onTap: () {
              setState(() {
                showConfig = !showConfig;
              });
            },
          ),
          if (showConfig) ...[
            ListTile(
              leading: const Spacer(),
              title: const Text('Currency'),
              onTap: () {
                // Navigator.pushNamed(context, '/history');
              },
            )
          ]
        ],
      ),
    );
  }
}

如果我点击了第一级菜单(如图片中的历史),尝试显示那些第二级,此错误将发生
有帮助吗?

avwztpqn

avwztpqn1#

leading: const Spacer(),

一个spacer就是一个没有孩子的Expanded。我不知道你想要什么,但你可以只留下leading或把一个SizedBox与一些宽度在那里

相关问题