Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/docs.json
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@
"widgets/row",
"widgets/safe_area",
"widgets/sized_box",
"widgets/sliver_to_box_adapter",
"widgets/spacer",
"widgets/stack",
"widgets/wrap",
Expand Down
41 changes: 41 additions & 0 deletions docs/widgets/sliver_to_box_adapter.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
---
title: "SliverToBoxAdapter"
description: "A sliver that contains a single box widget."
---

The Stac SliverToBoxAdapter allows you to build a Flutter sliver-to-box-adapter widget using JSON. It creates a sliver that contains a single box widget.
To know more about the sliver-to-box-adapter widget in Flutter, refer to
the [official documentation](https://api.flutter.dev/flutter/widgets/SliverToBoxAdapter-class.html).

## Properties

| Property | Type | Description |
|----------|-------------------------|--------------------------------------|
| child | `Map<String, dynamic>?` | The widget contained by this sliver. |

## Example JSON

```json
{
"type": "sliverPadding",
"padding": 16,
"sliver": {
"type": "sliverToBoxAdapter",
"child": {
"type": "container",
"height": 150,
"color": "#4CAF50",
"child": {
"type": "center",
"child": {
"type": "text",
"data": "I am a Box inside a SliverToBoxAdapter!",
"style": {
"color": "#FFFFFF",
"fontWeight": "bold"
}
}
}
}
}
}
24 changes: 24 additions & 0 deletions examples/stac_gallery/assets/json/home_screen.json
Original file line number Diff line number Diff line change
Expand Up @@ -1236,6 +1236,30 @@
}
}
},
{
"type": "listTile",
"leading": {
"type": "icon",
"iconType": "cupertino",
"icon": "app_fill"
},
"title": {
"type": "text",
"data": "Stac Sliver To Box Adapter"
},
"subtitle": {
"type": "text",
"data": "A sliver that contains a single box widget."
},
"style": "list",
"onTap": {
"actionType": "navigate",
"widgetJson": {
"type": "exampleScreen",
"assetPath": "assets/json/sliver_to_box_adapter_example.json"
}
}
},
{
"type": "listTile",
"leading": {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
{
"type": "scaffold",
"body": {
"type": "customScrollView",
"slivers": [
{
"type": "sliverPadding",
"padding": 16.0,
"sliver": {
"type": "sliverToBoxAdapter",
"child": {
"type": "container",
"height": 150,
"color": "#4CAF50",
"child": {
"type": "center",
"child": {
"type": "text",
"data": "I am a Box inside a SliverToBoxAdapter!",
"style": {
"color": "#FFFFFF",
"fontWeight": "bold"
}
}
}
}
}
}
]
}
}
1 change: 1 addition & 0 deletions packages/stac/lib/src/framework/stac_service.dart
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ class StacService {
const StacRadioGroupParser(),
const StacSliderParser(),
const StacSliverAppBarParser(),
const StacSliverToBoxAdapterParser(),
const StacOpacityParser(),
const StacPlaceholderParser(),
const StacAspectRatioParser(),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import 'package:flutter/material.dart';
import 'package:stac/src/parsers/core/stac_widget_parser.dart';
import 'package:stac_core/stac_core.dart';
import 'package:stac_framework/stac_framework.dart';

class StacSliverToBoxAdapterParser extends StacParser<StacSliverToBoxAdapter> {
const StacSliverToBoxAdapterParser();

@override
String get type => WidgetType.sliverToBoxAdapter.name;

@override
StacSliverToBoxAdapter getModel(Map<String, dynamic> json) =>
StacSliverToBoxAdapter.fromJson(json);

@override
Widget parse(BuildContext context, StacSliverToBoxAdapter model) {
return SliverToBoxAdapter(child: model.child?.parse(context));
}
}
1 change: 1 addition & 0 deletions packages/stac/lib/src/parsers/widgets/widgets.dart
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ export 'package:stac/src/parsers/widgets/stac_single_child_scroll_view/stac_sing
export 'package:stac/src/parsers/widgets/stac_sized_box/stac_sized_box_parser.dart';
export 'package:stac/src/parsers/widgets/stac_slider/stac_slider_parser.dart';
export 'package:stac/src/parsers/widgets/stac_sliver_app_bar/stac_sliver_app_bar_parser.dart';
export 'package:stac/src/parsers/widgets/stac_sliver_to_box_adapter/stac_sliver_to_box_adapter_parser.dart';
export 'package:stac/src/parsers/widgets/stac_spacer/stac_spacer_parser.dart';
export 'package:stac/src/parsers/widgets/stac_stack/stac_stack_parser.dart';
export 'package:stac/src/parsers/widgets/stac_switch/stac_switch_parser.dart';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,9 @@ enum WidgetType {
/// Sliver app bar widget
sliverAppBar,

/// Sliver to box adapter widget
sliverToBoxAdapter,

/// Spacer widget
spacer,

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
import 'package:json_annotation/json_annotation.dart';
import 'package:stac_core/core/stac_widget.dart';
import 'package:stac_core/foundation/foundation.dart';

part 'stac_sliver_to_box_adapter.g.dart';

/// A Stac model representing Flutter's [SliverToBoxAdapter] widget.
///
/// A sliver that contains a single box widget.
///
/// {@tool snippet}
/// ```dart
/// const StacSliverPadding(
/// padding: StacEdgeInsets.all(16),
/// sliver: StacSliverToBoxAdapter(...),
/// )
/// ```
/// {@end-tool}
///
/// {@tool snippet}
/// JSON Example:
/// ```json
/// {
/// "type": "sliverPadding",
/// "padding": 16.0,
/// "sliver": {
/// "type": "sliverToBoxAdapter",
/// "child": {
/// "type": "container",
/// "height": 150,
/// "color": "#4CAF50",
/// "child": {
/// "type": "center",
/// "child": {
/// "type": "text",
/// "data": "I am a Box inside a SliverToBoxAdapter!",
/// "style": {
/// "color": "#FFFFFF",
/// "fontWeight": "bold"
/// }
/// }
/// }
/// }
/// }
/// }
/// ```
/// {@end-tool}
///
/// See also:
/// * Flutter's [SliverToBoxAdapter documentation](https://api.flutter.dev/flutter/widgets/SliverToBoxAdapter-class.html)
@JsonSerializable()
class StacSliverToBoxAdapter extends StacWidget {
/// Creates a [StacSliverToBoxAdapter].
const StacSliverToBoxAdapter({this.child});

/// The widget contained by this sliver.
final StacWidget? child;

/// Widget type identifier.
@override
String get type => WidgetType.sliverToBoxAdapter.name;

/// Creates a [StacSliverToBoxAdapter] from a JSON map.
factory StacSliverToBoxAdapter.fromJson(Map<String, dynamic> json) =>
_$StacSliverToBoxAdapterFromJson(json);

/// Converts this [StacSliverToBoxAdapter] instance to JSON.
@override
Map<String, dynamic> toJson() => _$StacSliverToBoxAdapterToJson(this);
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions packages/stac_core/lib/widgets/widgets.dart
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ export 'single_child_scroll_view/stac_single_child_scroll_view.dart';
export 'sized_box/stac_sized_box.dart';
export 'slider/stac_slider.dart';
export 'sliver_app_bar/stac_sliver_app_bar.dart';
export 'sliver_to_box_adapter/stac_sliver_to_box_adapter.dart';
export 'spacer/stac_spacer.dart';
export 'stack/stac_stack.dart';
export 'switch/stac_switch.dart';
Expand Down