我正在尝试使用我的脚手架列小部件中的 MainAxisSize.min 让对话框自动调整大小以适应其所有内容,但我仍然得到该小部件的完整长度。为什么 MainAxisSize.min 在这里不起作用?
这是对话框的代码:
class AddSockPopup extends Dialog {
const AddSockPopup({super.key});
@override
Widget build(BuildContext context) {
return StatefulBuilder(
builder: (context, StateSetter setState){
return Dialog(
elevation: 0,
backgroundColor: Colors.transparent,
child: _buildChild(context, setState),
);
},
);
}
_buildChild(BuildContext context, StateSetter setState) {
return ClipRRect(
borderRadius: BorderRadius.all(Radius.circular(12)),
child: Scaffold(
backgroundColor: Colors.grey[300],
appBar: AppBar(
title: Text('Sock details'),
centerTitle: true,
backgroundColor: Colors.purple[400],
automaticallyImplyLeading: false,
),
body: Padding(
padding: EdgeInsets.all(20.0),
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.center,
children: [...],
),
),
),
);
}
}
用
Scaffold
包裹您的 Column
并设置 mainAxisSize: MainAxisSize.min
:
return ClipRRect(
borderRadius: BorderRadius.all(Radius.circular(12)),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Scaffold(
// ...
),
],
),
);
@Babushka 使用
ConstrainedBox
小部件可以动态调整对话框的高度。它会根据您的内容自动调整。
ConstrainedBox(
constraints: BoxConstraints(
minWidth: MediaQuery.of(context).size.width * 0.80,
maxWidth: MediaQuery.of(context).size.width * 0.80,
minHeight: MediaQuery.of(context).size.height * 0.30,
),
child: [Your widget]
),
我希望这会有所帮助!