0Day Forums
Horizontal ListView flutter WITHOUT explicit height - Printable Version

+- 0Day Forums (https://0day.red)
+-- Forum: Coding (https://0day.red/Forum-Coding)
+--- Forum: Flutter & Dart (https://0day.red/Forum-Flutter-Dart)
+--- Thread: Horizontal ListView flutter WITHOUT explicit height (/Thread-Horizontal-ListView-flutter-WITHOUT-explicit-height)



Horizontal ListView flutter WITHOUT explicit height - bullom76406 - 07-21-2023

I'm trying to create a Horizontal scrolling `listview.builder()` with no pre-set height.

I've tried setting `shrinkwrap` to true and wrapping it inside an Expanded/Flexible.

The only way (that i have found) to currently achieve the desired effect is to wrap a row inside a `singlechildscrollview` inside a column, as per this answer (

[To see links please register here]

).

The problem with that method is that there is no builder method to load dynamic data into the Cards inside the `singlechildscrollview`.

My question is how do i create a Horizontal `listview` that that generates the output by the `row` nested inside the `singlechildscrollview` (

[To see links please register here]

) but with a builder method?

**With Flexible**

Scaffold(
body: Container(
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Flexible(
child: ListView.builder(
scrollDirection: Axis.horizontal,
itemCount: 3,
itemBuilder: (BuildContext context, int index) {
return FeaturedCard();
},
),
),
Flexible(
child: ListView.builder(
shrinkWrap: true,
itemCount: 10,
itemBuilder: (BuildContext context, int index) {
return FeaturedCard();
},
),
),
],
),
),
)

**Result**:




**With nested `row` inside `singlechildscrollview`** (The method that works)

Container(
padding: EdgeInsets.only(top: 16, bottom: 8),
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: Row(
children: <Widget>[
FeaturedCard(),
FeaturedCard(),
],
),
),
],
),
)

**Result:**


Notice the added space inside the card when using flexible (this actually renders worse on different devices)



RE: Horizontal ListView flutter WITHOUT explicit height - Sirembrowned28 - 07-21-2023

The Flutter framework can only know the height of a widget once it's been built.

If you're building `ListView` children dynamically, it can't calculate the required height of the `ListView` until all it's children have been built, which might never happen (infinite `ListView`).

You can either give the `ListView` a fixed height and build its children dynamically or have the `ListView's` height depend on it's children, in which case you'd need to build all it's children upfront.


RE: Horizontal ListView flutter WITHOUT explicit height - neenak - 07-21-2023

*Posting answer for OP who edited their answer into their question*

Solved the problem by creating a custom builder method like so:
```dart
Widget _buildFeaturedCards(List<Product> product) {
final cards = <Widget>[];
Widget FeautredCards;

if (product.length > 0) {
for (int i = 0; i < product.length; i++) {
cards.add(FeaturedCard(product[i]));
print(product.length);
}
FeautredCards = Container(
padding: EdgeInsets.only(top: 16, bottom: 8),
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: Row(children: cards),
),
],
),
);
} else {
FeautredCards = Container();
}
return FeautredCards;
}
```

This creates the necessary scrolling widgets upfront instead of lazily like `ListView.builder` would.