Flutter: особенности отображения listview внутри виджета showdialog
А именно, проблема заключается в том, что ничего не отображается, пока listview не будет обёрнут в контейнер с указанной высотой. И это на самом деле проблема, т.к. в этом случае нельзя указать «резиновую» высоту. Обёртывание в виджет Expanded тоже не поможет. Остаётся один выход — рассчитывать высоту в случае динамического списка. Например:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
Container( height: EzsInfo["connectors"].length.toDouble()*72, width: double.maxFinite, child: ListView.builder( shrinkWrap: true, physics: NeverScrollableScrollPhysics(), padding: const EdgeInsets.all(8), itemCount: EzsInfo["connectors"].length, itemBuilder: (BuildContext context, int index) { return Container( //padding: EdgeInsets.symmetric(vertical: 10), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.start, children: [ Padding( padding: const EdgeInsets.only(bottom: 0,left: 0,right: 10), child: Text(EzsInfo["connectors"][index]["station_name"],style: TextStyle(fontWeight: FontWeight.w100, fontSize: 8.0, color: Colors.black)), ), Container( width: 6.0, height: 6.0, decoration: BoxDecoration( color: EzsInfo["connectors"][index]["status"]==3?Colors.grey:Colors.green, shape: BoxShape.circle, ),), Padding( padding: const EdgeInsets.only(bottom: 0,left: 2,right: 0), child: Text(EzsInfo["connectors"][index]["status_name"],style: TextStyle(fontWeight: FontWeight.w100, fontSize: 8.0, color: Colors.black)), ), ], ), Row( children: [ IconButton ( padding: const EdgeInsets.only(bottom: 0,left: 0,right: 0), icon: Image.asset('lib/images/'+EzsInfo["connectors"][index]["url_connector"],height: 32,), onPressed: () {print('IconButton pressed ...');}, ), Container( alignment: Alignment.topLeft, width: 150, child: Column( children: [ Align( alignment: Alignment.topLeft, child: Text(EzsInfo["connectors"][index]["connector_name"],style: TextStyle(fontSize: 12.0, color: Colors.black),textAlign: TextAlign.left,), ), Align( alignment: Alignment.topLeft, child: Text(EzsInfo["connectors"][index]["maxpower"].toString()+" кВт",style: TextStyle(fontSize: 12.0, color: Colors.black),textAlign: TextAlign.left), ), ], ), ), Text(EzsInfo["connectors"][index]["price"].toString()+"Р кВт*ч",style: TextStyle(fontSize: 12.0, color: Colors.black)), ], ), new Divider(), ], ) ); } ), ) |
Результат: