Skip to Content
WidgetsMulti-Child Layout widgets

Multi-Child Layout widgets

Options for Multi-Child Layout widgets

  1. Column: Ensemble’s Column widget displays its children in a vertical array, similar to Flutter. Use Column when you want to arrange widgets vertically. The Column widget doesn’t scroll. If you need scrolling functionality, consider using ListView. If there’s only one child, consider using Align or Center to position it.

  2. Flow: Ensemble’s Flow widget is designed to flow its children horizontally or vertically based on available space. The Flow container is useful for creating dynamic layouts with elements that automatically wrap to the next line when they exceed the available width

  3. GridView Ensemble’s GridView widget is useful for creating a 2D array of widgets. Use GridView when you need a grid layout.

  4. Flex: Ensemble’s Flex widget is similar to Flutter’s Flex and is used to create flexible layouts. Use Flex when you need - Flexible arrangements of widgets. - To switch between row and column layouts based on certain conditions, such as device screen size.

  5. Row: Ensemble’s Row widget arranges its children in a horizontal array. Use Row when you want to arrange widgets horizontally. Utilize mainAxis property to control the positioning of children along the main axis (horizontal). Use crossAxis property to align children along the cross axis. Employ expanded: true property for a child widget when you want it to take as much space as possible.

  6. ListView: Ensemble’s ListView widget is suitable for scrolling lists of widgets. Use ListView when you need a scrollable list. Implement pull-to-refresh functionality for updating the list content from an API.

Examples:

1. Column:

Column Layout

Column: styles: gap: 16 padding: 24 children: - Text: text: Column lays out its children vertically. - Column: styles: gap: 4 children: - Smile - Beam - Divider

2. Flow

Flow with Simple Tags

Flow: styles: gap: 8 lineGap: 8 children: - SimpleTag: inputs: label: Travel - SimpleTag: inputs: label: Nature

Flow with Bold Tags and Background Images

Flow: styles: gap: 8 lineGap: 8 children: - BoldTag: inputs: label: Travel background: https://.../flow_travel.png - BoldTag: inputs: label: Nature background: https://.../flow_nature.png

3. GridView:

Grid View with response

GridView: styles: height: 400 horizontalTileCount: 2 itemHeight: 128 item-template: data: ${getPeople.body.results} name: person template: PersonCard

4. Flex:

Flex Direction Switching

Flex: styles: direction: '${device.width > 400 ? "horizontal" : "vertical"}' gap: 4 children: - Image: source: https://images.unsplash.com/photo-1550684848-86a5d8727436 styles: { width: 90, height: 90, borderRadius: 90, fit: cover } - Image: source: https://images.unsplash.com/photo-1550684848-fac1c5b4e853 styles: { width: 90, height: 90, borderRadius: 90, fit: cover } - Image: source: https://images.unsplash.com/photo-1551651057-f3f83700a831 styles: { width: 90, height: 90, borderRadius: 90, fit: cover }

5. Row:

Row Layout

Row: styles: gap: 8 children: - Smile - Beam - Wink

Main Axis Positioning

Row: styles: mainAxis: spaceBetween backgroundColor: 0xFFCCDFE5 padding: 4 borderRadius: 4 children: - Smile - Beam

Similar examples for mainAxis: spaceAround, mainAxis: center, and mainAxis: end

Child Widget Expansion

Row: styles: gap: 8 children: - Button: label: First button styles: expanded: true - Button: label: Second button

6. ListView:

ListView

ListView: id: listView onPullToRefresh: invokeAPI: name: getPeople onItemTap: navigateScreen: name: ListView - Detail Page inputs: doc_type: ${getPeople.body.users[this.selectedItemIndex]} styles: { expanded: true } item-template: data: ${getPeople.body.users} name: users template: MyRow: inputs: p: ${users}
Last updated on