Line data Source code
1 : import 'package:flutter/cupertino.dart'; 2 : import 'package:flutter/material.dart'; 3 : import 'package:widgetbook/src/models/app_info.dart'; 4 : import 'package:widgetbook/src/models/organizers/organizers.dart'; 5 : import 'package:widgetbook/src/navigation/ui/tiles/category_tile.dart'; 6 : import 'package:widgetbook/src/widgets/header.dart'; 7 : 8 : class NavigationPanel extends StatefulWidget { 9 0 : const NavigationPanel({ 10 : Key? key, 11 : required this.appInfo, 12 : required this.categories, 13 0 : }) : super(key: key); 14 : 15 : final AppInfo appInfo; 16 : final List<Category> categories; 17 : 18 0 : @override 19 0 : _NavigationPanelState createState() => _NavigationPanelState(); 20 : } 21 : 22 : class _NavigationPanelState extends State<NavigationPanel> { 23 : final ScrollController controller = ScrollController(); 24 : Story? selectedComponent; 25 : 26 : final TextEditingController search = TextEditingController(); 27 : String query = ''; 28 : 29 0 : Widget _buildCategory(BuildContext context, int i) { 30 0 : final Category item = widget.categories[i]; 31 0 : return CategoryTile(category: item); 32 : } 33 : 34 0 : @override 35 : Widget build(BuildContext context) { 36 0 : return Container( 37 : constraints: const BoxConstraints(minWidth: 50, maxWidth: 400), 38 0 : child: Column( 39 : crossAxisAlignment: CrossAxisAlignment.start, 40 0 : children: [ 41 0 : Header( 42 0 : appInfo: widget.appInfo, 43 : ), 44 : const SizedBox( 45 : height: 16, 46 : ), 47 0 : Expanded( 48 0 : child: Container( 49 0 : decoration: BoxDecoration( 50 0 : color: Theme.of(context).colorScheme.surface, 51 0 : borderRadius: BorderRadius.circular( 52 : 8, 53 : ), 54 : ), 55 : padding: const EdgeInsets.all(16), 56 0 : child: Builder( 57 0 : builder: (context) { 58 0 : return ListView.separated( 59 0 : controller: controller, 60 : physics: const AlwaysScrollableScrollPhysics(), 61 0 : itemCount: widget.categories.length, 62 0 : itemBuilder: _buildCategory, 63 : padding: const EdgeInsets.only(bottom: 8), 64 0 : separatorBuilder: (context, index) => 65 : const SizedBox(height: 8), 66 : ); 67 : }, 68 : ), 69 : ), 70 : ), 71 : ], 72 : ), 73 : ); 74 : } 75 : }