Home > OS >  Error in ListView in SimpleDialog in Flutter
Error in ListView in SimpleDialog in Flutter

Time:11-11

I want to display in a SimpleDialog a ListView that I get from my api. But it throws this error

The following assertion was thrown during performLayout(): 'package:flutter/src/rendering/viewport.dart': Failed assertion: line 1895 pos 16: 'constraints.hasBoundedHeight': is not true. The relevant error-causing widget was ListView

my SimpleDialog

showDialog(
  context: context,
   builder: (BuildContext context) {
    return SimpleDialog(
    contentPadding: EdgeInsets.zero,
     children: [
        Column(
         mainAxisSize:MainAxisSize.min,
             children: [
                Container(
                  child: Column(
                      children: [
                          const Text('Athletes'),
                          FutureBuilder<List<Presence>>(
                         future: getPresencesByAthleteId(_athlete[i].department!.id, widget._team.teamKey!.teamId, _athlete[i].id, context),                                                                 
                       builder: (BuildContext context, AsyncSnapshot snapshot) {                                                                                
                      if (snapshot.hasData) {                                                                         
                       return Container(
                       height: 300,
                       width: double.maxFinite,
                       child: ListView.builder(
                       shrinkWrap: true,
                       primary: true,
                       physics: const ClampingScrollPhysics(),
                       scrollDirection: Axis.horizontal,
                      itemCount: snapshot.data.length,
                       itemBuilder: (BuildContext context, int index) {
                       return ListTile(
                      title: Column(
                      mainAxisSize: MainAxisSize.min,
                      crossAxisAlignment: CrossAxisAlignment.start,
                      children: [
                       Row(
                         children: [
                        Flexible(child: Text('${(index   1).toString()}.')),
                       Flexible(child: Text(snapshot.data[index].date)),
                      Flexible(
                                                                                                      child: Text(
                      snapshot.data[index].count.toString(),
                      style: const TextStyle(color: Colors.blue),
                     ),
                  )
                ],
                )
               ],
              ),
             );
            }),
            );
           } else if (snapshot.hasError) {
          logger.e('${snapshot.error}');
         }
         return const Center(
         heightFactor: 20,
        child: CircularProgressIndicator.adaptive(),
        );
      }),

CodePudding user response:

You need to provide height for horizontal ListView,

 FutureBuilder<List>(
    builder: (BuildContext context, AsyncSnapshot snapshot) {
  return Container(
    height: 100, // the one  you prefer
    child: ListView.builder(
showDialog(
  context: context,
  builder: (BuildContext context) {
    return SimpleDialog(
      contentPadding: EdgeInsets.zero,
      children: [
        Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            Container(
              child: Column(
                children: [
                  const Text('Athletes'),
                  Container(
                    height: 300,
                    width: double.maxFinite,
                    child: ListView.builder(
                        scrollDirection: Axis.horizontal,
                        itemCount: 444,
                        itemBuilder:
                            (BuildContext context, int index) {
                          return Column(
                            mainAxisSize: MainAxisSize.min,
                            crossAxisAlignment:
                                CrossAxisAlignment.start,
                            children: [
                              Row(
                                children: [
                                  Text('{(index   1).toString()}.'),
                                  Text("snap"),
                                  Text(
                                    "t",
                                    style: const TextStyle(
                                        color: Colors.blue),
                                  ),
                                ],
                              )
                            ],
                          );
                        }),
                  ),
                ],
              ),
            )
          ],
        )
      ],
    );
  },
);

  • Related