Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/aloisdeniel/spaces

Defining global spacing constants for building consistent and responsive apps.
https://github.com/aloisdeniel/spaces

flutter responsive spacing ui

Last synced: 2 months ago
JSON representation

Defining global spacing constants for building consistent and responsive apps.

Awesome Lists containing this project

README

        

![logo](https://github.com/aloisdeniel/spaces/raw/master/logo.png)

# Spaces






Defining global spacing constants for building consistent and responsive apps.

## Install

Add the dependency to your `pubspec.yaml` :

```yaml
dependencies:
spaces:
```

## Quick start

```dart
return MaterialApp(
// Defining
builder: (context, child) => Spacing(
dataBuilder: (context) {
final mediaQuery = MediaQuery.of(context);
if (mediaQuery.size.width > 500) {
return SpacingData.generate(30);
}
return SpacingData.generate(10);
},
child: child,
),
home:Builder(builder: (context) {
// Using
final spacing = Spacing.of(context);
return SpacedColumn.normal(
padding: spacing.insets.all.semiBig,
children: [
Text('hello'),
Space.big(),
Text('world'),
],
);
})
),
)
```

# Usage

## Configuring spacing

A `Spacing` widget should declare a global spacing configuration for your application.

```dart
return MaterialApp(
builder: (context, child) => Spacing.fixed(
data: SpacingData.generate(10.0), // This generates a set of spacing constants for your apps, from a base space of `10.0`.
child: child,
),
/// ...
)
```

### Generate

By calling the `Spacing.generate` constructor, a set of constants are automatically generated from a single base value.

The generated values are :

* **extraSmall** : `value * 0.2`
* **small** : `value * 0.4`
* **semiSmall** : `value * 0.6`
* **normal** : `value`
* **semiBig** : `value * 1.5`
* **big** : `value * 2.5`
* **extraBig** : `value * 5.0`

```dart
SpacingData.generate(10.0)
```

### From spaces

If you want to define the various spacing values, you can use the

```dart
SpacingData.fromSpaces(
extraSmall: 1.0,
small: 2.0,
semiSmall: 4.0,
normal: 8.0,
semiBig: 12.0,
big: 20.0,
extraBig: 100.0,
)
```

## Responsive spacing

You can define the `dataBuilder` property of the `Spacing` constructor to generate a configuration from the given context.

```dart
Spacing(
dataBuilder: (context) {
final mediaQuery = MediaQuery.of(context);
return SpacingData.generate(mediaQuery.size.width > 300.0 ? 20.0 : 10.0),
},
child: child,
)
```

## Using constants

To access various spacing constants, simply use the `Spacing.of(context)` getter, or the `context.spacing()` extension method.

```dart
final spacing = Spacing.of(context);
// spacing.spaces.semiBig
```

### Size variants

There are seven availables spacing constants : `extraSmall`, `small`, `semiSmall`, `normal`, `semiBig`, `big`, `extraBig`;

```dart
final spacing = Spacing.of(context);
return SizedBox(
width: spacing.spaces.semiSmall,
);
```

### Insets helpers

You have `EdgeInsets` presets available from `.insets..`.

The available selectors are : `all`, `horizontal`, `vertical`, `onlyLeft`, `onlyTop`, `onlyRight`, `onlyBottom`, `exceptLeft`, `exceptRight`, `exceptTop`, `exceptBottom`.

```dart
final spacing = Spacing.of(context);
return Padding(
padding: spacing.insets.exceptLeft.semiBig,
child: Text('Hello'),
);
```

## Widgets

### Space

The `Space` widget uses [gap](https://pub.dev/packages/gap) under the hood to define a space in a `Flex`, `Column`, `Row` or `Scrollable` (such as `ListView`).

```dart
return Column(
children: [
Text('hello'),
const Space.semiSmall(),
Text('world'),
],
);
```

### SpacedFlex / SpacedColumn / SpacedRow

Like `Flex` / `Column` / `Row`, but with additional `padding` and `spaceBetween` properties.

```dart
final spacing = Spacing.of(context);
return SpacedColumn.small(
padding: spacing.insets.all.normal,
children: [
Text('hello'),
Text('world'),
],
);
```