RenderPointerListener 对象在布局期间被赋予无限大小

问题描述 投票:0回答:1

我正在尝试将抽屉与主体一起用作ListView,但是当我尝试单击抽屉图标时,它给出了我的错误,所以我认为抽屉高度有问题,所以我用高度的大小框包裹了抽屉小部件但什么都没有改变

我尝试用尺寸框包裹列表视图并给它固定的高度,但没有任何改变

那么有什么办法可以解决这个问题吗

这是包的代码

    import 'package:flutter/material.dart'; 
import 'package:sakani/constants.dart';
import 'package:sakani/models/picture_cat_model.dart';
import 'package:sakani/widgets/custom_drawer.dart';
import '../widgets/image_cards_builder.dart';

class PrevieView extends StatelessWidget {
  const PrevieView({
    super.key,
    required this.image,
  });
  static String id = 'Previeview';
  final PicCat image;

  @override
  Widget build(BuildContext context) {
    final List<String> type = image.type.split(',');
    return Scaffold(
        appBar: AppBar(
          centerTitle: true,
          title: Text(type.first),
          elevation: 0,
          foregroundColor: Colors.black,
          backgroundColor: Colors.transparent,
        ),
        drawer: const CustomDrawer(),
        body: Padding(
          padding: const EdgeInsets.all(5),
          child:ListView(
        
            children: [
              SizedBox(
                  child: Stack(
                    children: [
                      SizedBox(
                        width: double.infinity,
                        child: ClipRRect(
                          borderRadius: BorderRadius.circular(kPrimaryPadding),
                          child: Image.network(
                            image.image,
                          ),
                        ),
                      ),
                      Positioned(
                          child: IconButton(
                        onPressed: () {},
                        icon: const ImageIcon(
                            AssetImage("assets/icons/dots.png")),
                        color: Colors.white,
                      ))
                    ],
                  ),
                ),
                Padding(
                  padding: const EdgeInsets.only(
                    left: 10,
                  ),
                  child: Row(
                    children: [
                      const Expanded(
                        child: Text(
                          "more similar photos",
                          style: TextStyle(
                            fontSize: 20,
                            color: Colors.black,
                          ),
                        ),
                      ),
                      IconButton(
                          onPressed: () {},
                          icon: Icon(
                            Icons.favorite,
                            color: Colors.red[700],
                          ))
                    ],
                  ),
                ),
                ImagesBuilder(type: type.first),
        
            ],
          ),
        
        ));
  }
}

这是抽屉密码

 import 'package:flutter/material.dart';
import 'package:sakani/constants.dart';

import '../views/general_page.dart';

class CustomDrawer extends StatelessWidget {
  const CustomDrawer({super.key});
  @override
  Widget build(BuildContext context) {
    return Drawer(
      width: 200,
      child: Column(
        mainAxisSize: MainAxisSize.min,
        children: [
          DrawerHeader(
              child: Row(
            crossAxisAlignment: CrossAxisAlignment.start,
            mainAxisAlignment: MainAxisAlignment.end,
            children: [
              const Spacer(
                flex: 100,
              ),
              const Padding(
                padding: EdgeInsets.only(top: 60),
                child: Text(
                  kPrimaryAppName,
                  style: TextStyle(fontSize: 30),
                ),
              ),
              const Spacer(),
              IconButton(onPressed: () {}, icon: const Icon(Icons.light_mode)),
            ],
          )),
          GestureDetector(
            onTap: () {
              Navigator.pop(context);
            },
            child: const ListTile(
              title: Text("General"),
            ),
          ),
          GestureDetector(
            onTap: () {
              Navigator.push(context, MaterialPageRoute(builder: (context) {
                return const GeneralView(
                  type: "nature",
                );
              }));
            },
          ),
        ],
      ),
    );
  }
}'
flutter dart rendering drawer
1个回答
0
投票

因为您已在 DrawerHeader 中添加了 Spacer(),请删除此间隔符并使用 SizedBox(width: "your value") 代替。

切勿在不使用 Expanded 的情况下在行/列中使用 Spacer()

DrawerHeader( child: Row( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.end, children: [ const Spacer( //remove this flex: 100, ), const Padding( padding: EdgeInsets.only(top: 60), child: Text( kPrimaryAppName, style: TextStyle(fontSize: 30), ), ), const Spacer(), //remove this IconButton(onPressed: () {}, icon: const Icon(Icons.light_mode)), ], ))
    
© www.soinside.com 2019 - 2024. All rights reserved.