Mus
Mus

Reputation: 97

LayoutBuilder does not support returning intrinsic dimensions

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

Answers (1)

Ante Bule
Ante Bule

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

Related Questions