Skip to content

Commit

Permalink
feature: navigation over real locations working 🚀
Browse files Browse the repository at this point in the history
  • Loading branch information
efraespada committed Oct 4, 2024
1 parent 62fe6d4 commit 771fb6c
Show file tree
Hide file tree
Showing 25 changed files with 516 additions and 496 deletions.
129 changes: 47 additions & 82 deletions example/assets/preview_config.json
Original file line number Diff line number Diff line change
@@ -1,38 +1,14 @@
{
"id": "catalog",
"route": "/",
"builtComponent": {
"path": "./lib/catalog/catalog_component.dart",
"route": "",
"package": "package:example/catalog/catalog_component.dart",
"clazzName": "CatalogComponent",
"preview": null
},
"builtComponents": {},
"children": {
"widgets": {
"id": "widgets",
"route": "/widgets",
"builtComponent": {
"path": "./lib/catalog/widgets/main_screen.dart",
"route": "widgets",
"package": "package:example/catalog/widgets/main_screen.dart",
"clazzName": "MainScreenPreviewPreviewPageDummy",
"preview": {
"id": "main_screen",
"path": "widgets",
"description": "",
"parameters": [
"title",
"infoText",
"counter",
"incrementCounter"
]
}
},
"route": "widgets",
"builtComponents": {
"/main_screen.dart": {
"path": "./lib/catalog/widgets/main_screen.dart",
"./example/lib/catalog/widgets/main_screen.dart": {
"path": "./example/lib/catalog/widgets/main_screen.dart",
"route": "widgets",
"package": "package:example/catalog/widgets/main_screen.dart",
"clazzName": "MainScreenPreviewPreviewPageDummy",
Expand All @@ -50,65 +26,54 @@
}
},
"children": {
"body_widget": {
"id": "body_widget",
"route": "/body_widget",
"builtComponent": {
"path": "./lib/catalog/widgets/body_widget/body_widget.dart",
"route": "widgets/body_widget",
"package": "package:example/catalog/widgets/body_widget/body_widget.dart",
"clazzName": "BodyWidgetPreviewPreviewPageDummy",
"preview": {
"id": "BodyWidgetPreview",
"path": "widgets/body_widget",
"description": "",
"parameters": [
"infoText",
"counter"
]
}
},
"builtComponents": {},
"children": {}
},
"screen": {
"id": "screen",
"route": "/screen",
"builtComponent": {
"path": "./lib/catalog/widgets/screen/fab_widget.dart",
"route": "widgets/screen",
"package": "package:example/catalog/widgets/screen/fab_widget.dart",
"clazzName": "FabWidgetPreviewPreviewPageDummy",
"preview": {
"id": "fab_widget",
"path": "widgets/screen",
"description": "Basic fab widget",
"parameters": [
"incrementCounter"
]
}
},
"builtComponents": {},
"children": {}
},
"counter_widget": {
"id": "counter_widget",
"route": "/counter_widget",
"builtComponent": {
"path": "./lib/catalog/widgets/counter_widget/counter_widget.dart",
"route": "widgets/counter_widget",
"package": "package:example/catalog/widgets/counter_widget/counter_widget.dart",
"clazzName": "CounterWidgetPreviewPreviewPageDummy",
"preview": {
"id": "CounterWidgetPreview",
"path": "widgets/counter_widget",
"description": "Basic counter widget",
"parameters": [
"counter"
]
"route": "widgets/screen",
"builtComponents": {
"./example/lib/catalog/widgets/screen/body_widget.dart": {
"path": "./example/lib/catalog/widgets/screen/body_widget.dart",
"route": "widgets/screen",
"package": "package:example/catalog/widgets/screen/body_widget.dart",
"clazzName": "BodyWidgetPreviewPreviewPageDummy",
"preview": {
"id": "body_widget",
"path": "widgets/screen",
"description": "",
"parameters": [
"infoText",
"counter"
]
}
},
"./example/lib/catalog/widgets/screen/fab_widget.dart": {
"path": "./example/lib/catalog/widgets/screen/fab_widget.dart",
"route": "widgets/screen",
"package": "package:example/catalog/widgets/screen/fab_widget.dart",
"clazzName": "FabWidgetPreviewPreviewPageDummy",
"preview": {
"id": "fab_widget",
"path": "widgets/screen",
"description": "Basic fab widget",
"parameters": [
"incrementCounter"
]
}
},
"./example/lib/catalog/widgets/screen/counter_widget.dart": {
"path": "./example/lib/catalog/widgets/screen/counter_widget.dart",
"route": "widgets/screen",
"package": "package:example/catalog/widgets/screen/counter_widget.dart",
"clazzName": "CounterWidgetPreviewPreviewPageDummy",
"preview": {
"id": "counter_widget",
"path": "widgets/screen",
"description": "Basic counter widget",
"parameters": [
"counter"
]
}
}
},
"builtComponents": {},
"children": {}
}
}
Expand Down
221 changes: 106 additions & 115 deletions example/lib/catalog/catalog_component.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,139 +2,130 @@
import 'package:flutter/material.dart';
import 'package:catalog/catalog.dart';


import 'package:example/catalog/widgets/screen/body_widget.dart';import 'package:example/catalog/widgets/screen/fab_widget.dart';import 'package:example/catalog/widgets/screen/counter_widget.dart';



import 'package:example/catalog/widgets/main_screen.dart';
import 'package:example/catalog/widgets/body_widget/body_widget.dart';
import 'package:example/catalog/widgets/screen/fab_widget.dart';
import 'package:example/catalog/widgets/counter_widget/counter_widget.dart';







class CatalogComponent extends StatefulWidget {
static String routeName = '/catalog';
static GoRoute route = GoRoute(
path: CatalogComponent.routeName,
pageBuilder: (context, state) => NoTransitionPage(
key: state.pageKey,
child: const CatalogComponent(),
),
routes: [
GoRoute(
path: MainScreenPreviewPreviewPageDummy.routeName,
pageBuilder: (context, state) => NoTransitionPage(
key: state.pageKey,
child: const MainScreenPreviewPreviewPageDummy(),
),
routes: [
GoRoute(
path: MainScreenPreviewPreviewPageDummy.routeName,
pageBuilder: (context, state) => NoTransitionPage(
key: state.pageKey,
child: const MainScreenPreviewPreviewPageDummy(),
),

static GoRoute route = GoRoute(
path: CatalogComponent.routeName,
pageBuilder: (context, state) => NoTransitionPage(
key: state.pageKey,
child: const CatalogComponent(),
),
routes: [
GoRoute(
path: 'widgets',
redirect: (context, state) {
if (state.fullPath != state.matchedLocation) return null;
return CatalogComponent.routeName;
},
routes: [

GoRoute(
path: MainScreenPreviewPreviewPageDummy.routeName,
pageBuilder: (context, state) => NoTransitionPage(
key: state.pageKey,
child: const MainScreenPreviewPreviewPageDummy(),
),
GoRoute(
path: BodyWidgetPreviewPreviewPageDummy.routeName,
pageBuilder: (context, state) => NoTransitionPage(
key: state.pageKey,
child: const BodyWidgetPreviewPreviewPageDummy(),
),
routes: const [],
)


,
GoRoute(
path: 'screen',
redirect: (context, state) {
if (state.fullPath != state.matchedLocation) return null;
return CatalogComponent.routeName;
},
routes: [

GoRoute(
path: BodyWidgetPreviewPreviewPageDummy.routeName,
pageBuilder: (context, state) => NoTransitionPage(
key: state.pageKey,
child: const BodyWidgetPreviewPreviewPageDummy(),
),
GoRoute(
path: FabWidgetPreviewPreviewPageDummy.routeName,
pageBuilder: (context, state) => NoTransitionPage(
key: state.pageKey,
child: const FabWidgetPreviewPreviewPageDummy(),
),
routes: const [],
)

,
GoRoute(
path: FabWidgetPreviewPreviewPageDummy.routeName,
pageBuilder: (context, state) => NoTransitionPage(
key: state.pageKey,
child: const FabWidgetPreviewPreviewPageDummy(),
),
GoRoute(
path: CounterWidgetPreviewPreviewPageDummy.routeName,
pageBuilder: (context, state) => NoTransitionPage(
key: state.pageKey,
child: const CounterWidgetPreviewPreviewPageDummy(),
),
routes: const [],
)
],
)

,
GoRoute(
path: CounterWidgetPreviewPreviewPageDummy.routeName,
pageBuilder: (context, state) => NoTransitionPage(
key: state.pageKey,
child: const CounterWidgetPreviewPreviewPageDummy(),
),
)


,

],
)

],
)

],
)
],
);
;

const CatalogComponent({super.key});

@override
CatalogComponentState createState() => CatalogComponentState();
}

class CatalogComponentState extends State<CatalogComponent> {
TreeController<ComponentNode>? treeController;

@override
Widget build(BuildContext context) {
return PreviewScaffold(
onBackPressed: Catalog().onBackPressed,
child: FutureBuilder<ComponentNode?>(
initialData: null,
future: Catalog().get(context),
builder: (context, data) {
if (!data.hasData || data.data == null) {
return Container();
}
final node = data.data as ComponentNode;
if (treeController == null) {
treeController = TreeController<ComponentNode>(
roots: [node],
childrenProvider: (ComponentNode node) => node.children.values,
);
if (treeController!.isTreeCollapsed) {
treeController!.expandAll();
}
}
return AnimatedTreeView<ComponentNode>(
treeController: treeController!,
nodeBuilder:
(BuildContext context, TreeEntry<ComponentNode> entry) {
return InkWell(
onTap: () {
// _nodePressed(node);
},
child: TreeIndentation(
entry: entry,
child: Row(
children: [
FolderButton(
color: Colors.black,
isOpen: entry.hasChildren ? entry.isExpanded : null,
onPressed: () => _nodePressed(entry),
),
Text(
entry.node.id,
style: const TextStyle(
color: Colors.black,
fontSize: 16,
letterSpacing: .3,
),
),
],
),
),
);
},
);
}),
return FutureBuilder<ComponentNode?>(
initialData: null,
future: Catalog().get(context),
builder: (context, data) {
if (!data.hasData || data.data == null) {
return Container();
}
final node = data.data as ComponentNode;
return PreviewScaffold(
basePath: CatalogComponent.routeName,
onBackPressed: Catalog().onBackPressed,
child: ListView(
children: [
buildTreeWidget(
context,
CatalogComponent.routeName,
node,
0,
)
],
),
);
},
);
}

void _nodePressed(TreeEntry<ComponentNode> entry) {
if (entry.node.children.isEmpty) {
if (entry.node.builtComponent?.preview?.path != null) {
context.go(
'${CatalogComponent.routeName}/${entry.node.builtComponent!.preview!.path}');
}
} else {
if (!entry.isExpanded) {
treeController?.toggleExpansion(entry.node);
} else {
treeController?.collapse(entry.node);
}
}
}
}


Loading

0 comments on commit 771fb6c

Please sign in to comment.