Line data Source code
1 : import 'package:flutter/material.dart'; 2 : import 'package:widgetbook/src/navigation/navigation.dart'; 3 : import 'package:widgetbook/src/providers/canvas_provider.dart'; 4 : import 'package:widgetbook/src/providers/canvas_state.dart'; 5 : import 'package:widgetbook/src/providers/organizer_provider.dart'; 6 : import 'package:widgetbook/src/routing/story_route_path.dart'; 7 : import 'package:widgetbook/src/styled_widgets/styled_scaffold.dart'; 8 : import 'package:widgetbook/src/widgets/wrapper.dart'; 9 : 10 : import '../../widgetbook.dart'; 11 : 12 : class StoryRouterDelegate extends RouterDelegate<StoryRoutePath> 13 : with ChangeNotifier, PopNavigatorRouterDelegateMixin<StoryRoutePath> { 14 : @override 15 : final GlobalKey<NavigatorState> navigatorKey; 16 : 17 : final AppInfo appInfo; 18 : final CanvasState canvasState; 19 : 20 0 : StoryRouterDelegate({ 21 : required this.appInfo, 22 : required this.canvasState, 23 0 : }) : navigatorKey = GlobalKey<NavigatorState>(); 24 : 25 0 : @override 26 : Widget build(BuildContext context) { 27 0 : return Navigator( 28 0 : pages: [ 29 0 : MaterialPage( 30 0 : key: ValueKey(currentConfiguration.path), 31 0 : child: StyledScaffold( 32 0 : body: Padding( 33 : padding: const EdgeInsets.all(16.0), 34 0 : child: Builder(builder: (context) { 35 0 : var state = OrganizerProvider.of(context)!.state; 36 0 : return Row( 37 0 : children: [ 38 0 : NavigationPanel( 39 0 : appInfo: appInfo, 40 0 : categories: state.filteredCategories, 41 : ), 42 : const SizedBox( 43 : width: 16, 44 : ), 45 : const Expanded( 46 : child: Editor(), 47 : ), 48 : ], 49 : ); 50 : }), 51 : ), 52 : ), 53 : ) 54 : ], 55 0 : onPopPage: (route, result) { 56 0 : if (!route.didPop(result)) { 57 : return false; 58 : } 59 : 60 0 : CanvasProvider.of(context)!.deselectStory(); 61 : 62 0 : notifyListeners(); 63 : 64 : return true; 65 : }, 66 : ); 67 : } 68 : 69 0 : @override 70 0 : StoryRoutePath get currentConfiguration => StoryRoutePath( 71 0 : path: canvasState.selectedStory == null 72 : ? '/' 73 0 : : '/stories/${canvasState.selectedStory!.path}', 74 : ); 75 : 76 : @override 77 0 : Future<void> setNewRoutePath(StoryRoutePath configuration) async {} 78 : }