FlexGap is a Flutter library for managing spaces and flexibility in your layouts.
![](https://private-user-images.githubusercontent.com/53523825/306771892-44dcda71-761d-4284-bd40-a969eb3f893c.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzMDM5OTcsIm5iZiI6MTczOTMwMzY5NywicGF0aCI6Ii81MzUyMzgyNS8zMDY3NzE4OTItNDRkY2RhNzEtNzYxZC00Mjg0LWJkNDAtYTk2OWViM2Y4OTNjLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjExVDE5NTQ1N1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTAwZTAzMmY4OTIzNjY4ZTU3OWI2OWYwYzk1NTg5YjgwZTdjNTAxNTRjNjYyZTcwMmIzMGUzZTRiMmFjMWViMzAmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.bCC7m1K3BuWIa-9KFVb3bCagnXYBjwukTyc0QbqACX4)
Add the following dependency to your pubspec.yaml
file:
dependencies:
flex_gap: ^0.3.3
Or
$ flutter pub add flex_gap
Then, run flutter pub get
in your terminal.
Generates a space up to the maximum width or height of the parent widget from selected index.
FlexGap(
axis: Axis.vertical,
crossAxisAlignment: CrossAxisAlignment.center,
startSpacerIndex: 2,
children: [
_listElements[1],
_listElements[2],
_listElements[3],
_listElements[4],
_listElements[5],
],
),
![wrong_data](https://private-user-images.githubusercontent.com/53523825/306772227-1f20b421-9453-4fbc-a975-ec5a4d61dff0.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzMDM5OTcsIm5iZiI6MTczOTMwMzY5NywicGF0aCI6Ii81MzUyMzgyNS8zMDY3NzIyMjctMWYyMGI0MjEtOTQ1My00ZmJjLWE5NzUtZWM1YTRkNjFkZmYwLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjExVDE5NTQ1N1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWU5OTQzZjllNjk1MzlhMTYwYWEyMTIwZmJmMzRkMmVhYThmNmNjNTJkYTJmNDU5NzE3ZWMzMDg0Y2YwM2RlODYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.wSeIKIpKQ62vByxKDeFEnXlNloO6vqIEVBD_srCW0q0)
isScrollable
Adds scroll functionality, no matter if it is vertical or horizontal, you cannot use "startIndexSpace" with "isScrollable" at the same time.
FlexGap(
axis: Axis.vertical,
crossAxisAlignment: CrossAxisAlignment.center,
isScrollable: true,
children: [
_listElements[1],
_listElements[2],
_listElements[3],
_listElements[4],
_listElements[5],
],
),
![wrong_data](https://private-user-images.githubusercontent.com/53523825/306772392-f5f326aa-4350-4ec6-9af8-6e4f46f45fb6.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzMDM5OTcsIm5iZiI6MTczOTMwMzY5NywicGF0aCI6Ii81MzUyMzgyNS8zMDY3NzIzOTItZjVmMzI2YWEtNDM1MC00ZWM2LTlhZjgtNmU0ZjQ2ZjQ1ZmI2LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjExVDE5NTQ1N1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTA5YmY5OTVkNzVkOWU2MDAzMTQyZDRmOTJkOGUxYWFiM2FmYThmMzRiMjIwNDcyMGMwNjJjYTc5MTVhNGNjZTUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.QzlvYUwzux3kyOHD7dU-bRUxmVqV-YDi3mw6HStW5-E)
locatedSpace
We select the index where we want to apply a specific space.
FlexGap(
axis: Axis.vertical,
crossAxisAlignment: CrossAxisAlignment.center,
locatedSpace: const {
3 : 50
},
children: [
_listElements[1],
_listElements[2],
_listElements[3],
_listElements[4],
_listElements[5],
],
),
![wrong_data](https://private-user-images.githubusercontent.com/53523825/306772531-6b1292c1-02a7-4ed4-9548-7ed8f91d2ad9.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzMDM5OTcsIm5iZiI6MTczOTMwMzY5NywicGF0aCI6Ii81MzUyMzgyNS8zMDY3NzI1MzEtNmIxMjkyYzEtMDJhNy00ZWQ0LTk1NDgtN2VkOGY5MWQyYWQ5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjExVDE5NTQ1N1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTI1Y2I0YjZjYjhiNjllOTUyYjhlZWViN2VmZjI2MWIwMWZjZWExMzU3MTAyNjZiOGZkNGQ4OTY4ZDEwMzAwNGQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.Hm-swVcUBb1Aivr0cjnSYL5vCPOeWPnoU94O1LgRHzQ)
globalSpace
Adds a specific space to all elements using RederBox so it is an invisible element in the widget tree.
FlexGap(
axis: Axis.vertical,
crossAxisAlignment: CrossAxisAlignment.center,
globalSpace: 20,
children: [
_listElements[1],
_listElements[2],
_listElements[3],
_listElements[4],
_listElements[5],
],
),
![wrong_data](https://private-user-images.githubusercontent.com/53523825/306772650-ea8bb401-5aca-41b7-a25b-2c56722b4b77.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzMDM5OTcsIm5iZiI6MTczOTMwMzY5NywicGF0aCI6Ii81MzUyMzgyNS8zMDY3NzI2NTAtZWE4YmI0MDEtNWFjYS00MWI3LWEyNWItMmM1NjcyMmI0Yjc3LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjExVDE5NTQ1N1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTdmZmY0YzJlMWFhZWI1NmYwZTMwNmNmMmMwYTRmNjI2Y2ZkY2YyOTRhM2Q5ZGE1YjY4MWJmZWIwNmQ0OTI1MDYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.qBaIJ9zfEQUYCiX1XcDsg0XEq_x7ThzEyEXDOF24p8A)
isAdaptive
Use all the elements to organize them in a coherent way in the available space.
FlexGap(
axis: Axis.vertical,
crossAxisAlignment: CrossAxisAlignment.center,
isAdaptive: true,
children: _listElements,
),
![wrong_data](https://private-user-images.githubusercontent.com/53523825/306772810-ae7edb41-b308-44a2-8c0f-7489b0685ee4.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzMDM5OTcsIm5iZiI6MTczOTMwMzY5NywicGF0aCI6Ii81MzUyMzgyNS8zMDY3NzI4MTAtYWU3ZWRiNDEtYjMwOC00NGEyLThjMGYtNzQ4OWIwNjg1ZWU0LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjExVDE5NTQ1N1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWZlZWI0YzI0N2RhMjMwOTU4ZjYwM2JmYmRlYjI2M2I2ZTM2OWVmYWM2OWQ2MjAwYzA2NGQ4ZjIwYTkzYTdjYmYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.IK9K5dOP4dPGJzDuJoREBX9oLTK2q6tTC6ZszH9GP44)
You can use all MainAxisAlignment and CrossAxisAlignment elements to establish standard separation patterns.
FlexGap(
axis: Axis.vertical,
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
_listElements[1],
_listElements[2],
_listElements[3],
_listElements[4],
_listElements[5],
],
),
![wrong_data](https://private-user-images.githubusercontent.com/53523825/306772915-a7daf786-cad3-4c08-a56c-f0a7f605de15.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzMDM5OTcsIm5iZiI6MTczOTMwMzY5NywicGF0aCI6Ii81MzUyMzgyNS8zMDY3NzI5MTUtYTdkYWY3ODYtY2FkMy00YzA4LWE1NmMtZjBhN2Y2MDVkZTE1LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjExVDE5NTQ1N1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWQwODAwOTAxNWZkMDZiNzMwODAyNTFlNGMxM2JmYjE4MGI0NmM3MzgxMjA4YzRhNDUyMTFmOTRiMmEzMTVkYmQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.lgA1gj-wxzMSuvL38OgUVmJb153SDXSgC8_AKhmYlQU)
For this behavior you can also apply spaces in the desired index, enjoy experimenting and helping improve this library 🙃.
Contributions are welcome. If you find an issue or want to improve the library, create an issue or submit a pull request.
This project is licensed under the MIT License. See the LICENSE file for more details.