Reputation: 97
I am trying to show an AlertDialog when ListTile is tapped but I always have this error:LayoutBuilder does not support returning intrinsic dimensions. I tried to wrap AlertDialog with a container and give height and with but didn't work. I am not sure why this is happening. Can you help me? Here is my code:
class Settings extends StatelessWidget {
const Settings({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Settings'),
titleTextStyle: Theme.of(context).textTheme.headline4,
automaticallyImplyLeading: false,
),
body: SingleChildScrollView(
child: Column(
children: [
TileSettings(
title: StringManager.changeLanguage.tr,
leading: const Icon(FontAwesomeIcons.language),
trailing: const FaIcon(
FontAwesomeIcons.angleRight,
size: 20,
),
onTap: () => showDialog<String>(
context: context,
builder: (BuildContext context) => LanguageDialog(),
)),
],
),
),
);
}
}
class LanguageDialog extends StatelessWidget {
LanguageDialog({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container(
child: AlertDialog(
title: AutoSizeText('Select language'),
),
);
}
}
class TileSettings extends StatelessWidget {
const TileSettings({
Key? key,
required this.title,
required this.leading,
required this.onTap,
required this.trailing,
}) : super(key: key);
final String title;
final Widget leading;
final Function() onTap;
final Widget trailing;
@override
Widget build(BuildContext context) {
return Padding(
padding: EdgeInsets.symmetric(vertical: 0.5.h),
child: ListTile(
contentPadding: const EdgeInsets.symmetric(horizontal: 20),
leading: leading,
title: AutoSizeText(
title,
maxLines: 1,
),
trailing: trailing,
onTap: onTap,
),
);
}
}
Upvotes: 2
Views: 3095
Reputation: 2136
AutoSizeText
creates that error inside your AlertDialog
. So you can give it some constraints
by wrapping it inside SizedBox
and assigning some height
and width
like so:
AlertDialog(
title: SizedBox(
height: 100,
width: 100,
child: AutoSizeText(
'Select language',
maxLines: 1,
),
),
)
Or use Text
widget instead of AutoSizeText
if you don't need it in this particular situation.
Upvotes: 2