mirror of
				https://github.com/Nioux/AideDeJeu.git
				synced 2025-10-30 23:16:09 +00:00 
			
		
		
		
	Réorg + menu
This commit is contained in:
		
							parent
							
								
									e91e7e4a39
								
							
						
					
					
						commit
						9bb7055832
					
				
					 9 changed files with 358 additions and 309 deletions
				
			
		
							
								
								
									
										0
									
								
								aidedejeu_flutter/lib/widgets/about.dart
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								aidedejeu_flutter/lib/widgets/about.dart
									
										
									
									
									
										Normal file
									
								
							|  | @ -8,7 +8,7 @@ class RangeFilter extends StatefulWidget { | |||
|   final ValueChanged<RangeValues> updateRangeValues; | ||||
| 
 | ||||
|   RangeFilter( | ||||
|       {@required this.values, this.rangeValues, this.updateRangeValues}); | ||||
|       {Key key, @required this.values, this.rangeValues, this.updateRangeValues}) : super(key: key); | ||||
| 
 | ||||
|   @override | ||||
|   State<StatefulWidget> createState() { | ||||
|  | @ -40,7 +40,7 @@ class ChipListFilter extends StatefulWidget { | |||
|   final Set<String> selectedChoices; | ||||
|   final ValueChanged<Set<String>> updateSelectedChoices; | ||||
| 
 | ||||
|   ChipListFilter({this.choices, this.selectedChoices, this.updateSelectedChoices}); | ||||
|   ChipListFilter({Key key, this.choices, this.selectedChoices, this.updateSelectedChoices}) : super(key: key); | ||||
| 
 | ||||
|   @override | ||||
|   State<StatefulWidget> createState() { | ||||
|  | @ -85,7 +85,7 @@ class _ChipListFilterState extends State<ChipListFilter> { | |||
| class ChipFilter extends StatefulWidget { | ||||
|   final String label; | ||||
| 
 | ||||
|   ChipFilter({this.label}); | ||||
|   ChipFilter({Key key, this.label}) : super(key: key); | ||||
| 
 | ||||
|   @override | ||||
|   State<StatefulWidget> createState() { | ||||
|  |  | |||
|  | @ -1,268 +1,65 @@ | |||
| import 'package:aidedejeu_flutter/database.dart'; | ||||
| import 'package:aidedejeu_flutter/models/filters.dart'; | ||||
| import 'package:aidedejeu_flutter/widgets/filters.dart'; | ||||
| import 'package:aidedejeu_flutter/models/items.dart'; | ||||
| import 'package:aidedejeu_flutter/widgets/library.dart'; | ||||
| import 'package:flutter/material.dart'; | ||||
| import 'package:flutter/services.dart'; | ||||
| import 'package:flutter_markdown/flutter_markdown.dart'; | ||||
| import 'package:flutter_svg/flutter_svg.dart'; | ||||
| 
 | ||||
| class MyHomePage extends StatefulWidget { | ||||
|   MyHomePage({Key key, @required this.id}) : super(key: key); | ||||
| 
 | ||||
|   final String id; | ||||
| 
 | ||||
|   @override | ||||
|   _MyHomePageState createState() => _MyHomePageState(); | ||||
| } | ||||
| 
 | ||||
| class _MyHomePageState extends State<MyHomePage> { | ||||
|   void setItem(Item item) { | ||||
|     setState(() { | ||||
|       this.item = item; | ||||
|       if (item is FilteredItems) { | ||||
|         this.filters = (item as FilteredItems).toFilterList(); | ||||
|       } else { | ||||
|         this.filters = null; | ||||
|       } | ||||
|       this.markdown = | ||||
|           item.markdown.replaceAllMapped(RegExp(r'<!--.*?-->'), (match) { | ||||
|         return ''; | ||||
|       }); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   String markdown = ""; | ||||
|   Item item = null; | ||||
|   MarkdownStyleSheet styleSheet; | ||||
|   List<Filter> filters = null; | ||||
| 
 | ||||
|   @override | ||||
|   void initState() { | ||||
|     super.initState(); | ||||
| 
 | ||||
| 
 | ||||
|     _loadItem().then((item) => setItem(item)); | ||||
|   } | ||||
| 
 | ||||
|   @protected | ||||
|   @mustCallSuper | ||||
|   void didChangeDependencies() { | ||||
|     styleSheet = MarkdownStyleSheet.fromTheme(Theme.of(context)).copyWith( | ||||
|         tableColumnWidth: IntrinsicColumnWidth(), | ||||
|         tableCellsPadding: EdgeInsets.all(0.2), | ||||
|     ); | ||||
|   } | ||||
| 
 | ||||
|   Future<Item> _loadItem() async { | ||||
|     var item = await getItemWithId(this.widget.id); | ||||
|     var items = await loadChildrenItems(item, filters); | ||||
|     //setItem(item); | ||||
|     return item; | ||||
|   } | ||||
| 
 | ||||
|   Widget _buildMarkdown(BuildContext context) { | ||||
|     return Markdown( | ||||
|       data: markdown, | ||||
|       styleSheet: styleSheet, | ||||
|       onTapLink: (link) => Navigator.push( | ||||
|         context, | ||||
|         MaterialPageRoute(builder: (context) => MyHomePage(id: link)), | ||||
|       ), | ||||
|     ); | ||||
|   } | ||||
| 
 | ||||
|   Widget _buildMarkdownBody(BuildContext context) { | ||||
|     return Container( | ||||
|         margin: const EdgeInsets.all(10.0), | ||||
|         child: MarkdownBody( | ||||
|       data: markdown, | ||||
|       styleSheet: styleSheet, | ||||
|       onTapLink: (link) => Navigator.push( | ||||
|         context, | ||||
|         MaterialPageRoute(builder: (context) => MyHomePage(id: link)), | ||||
|       ), | ||||
|     )); | ||||
|   } | ||||
| 
 | ||||
|   Widget _buildChildTile(BuildContext context, Item item) { | ||||
|     return ListTile( | ||||
|       title: Text(item.name), | ||||
|       subtitle: Text(item.aliasText ?? ""), | ||||
|       onTap: () => Navigator.push( | ||||
|         context, | ||||
|         MaterialPageRoute(builder: (context) => MyHomePage(id: item.id)), | ||||
|       ), | ||||
|     ); | ||||
|   } | ||||
| 
 | ||||
|   Widget _buildLibraryPage() { | ||||
|     return Stack( | ||||
|       children: <Widget>[ | ||||
|         ListView.builder( | ||||
|             itemCount: (item?.children?.length ?? 0) + 1, | ||||
|             itemBuilder: (BuildContext context, int index) { | ||||
|               return index == 0 | ||||
|                   ? _buildMarkdownBody(context) | ||||
|                   : _buildChildTile(context, item.children[index - 1]); | ||||
|             }) | ||||
|       ], | ||||
|     ); | ||||
|   } | ||||
| 
 | ||||
|   Widget _buildBookmarksPage() { | ||||
|     return Text("Bookmarks"); | ||||
|   } | ||||
| 
 | ||||
|   Widget _buildSearchPage() { | ||||
|     return Text("Search"); | ||||
|   } | ||||
| 
 | ||||
|   BottomNavigationBarItem _buildBottomNavigationBarItem( | ||||
|       String title, String assetName) { | ||||
|     return BottomNavigationBarItem( | ||||
|       icon: SvgPicture.asset( | ||||
|         assetName, | ||||
|         height: 30.0, | ||||
|         width: 30.0, | ||||
|         allowDrawingOutsideViewBox: true, | ||||
|       ), | ||||
|       title: Text(title), | ||||
|       activeIcon: SvgPicture.asset( | ||||
|         assetName, | ||||
|         height: 40.0, | ||||
|         width: 40.0, | ||||
|         allowDrawingOutsideViewBox: true, | ||||
|       ), | ||||
|     ); | ||||
|   } | ||||
| 
 | ||||
|   List _buildBottomNavigationBarItems() { | ||||
|     return <BottomNavigationBarItem>[ | ||||
|       _buildBottomNavigationBarItem("Bibliothèque", "assets/spell-book.svg"), | ||||
|       _buildBottomNavigationBarItem("Favoris", "assets/stars-stack.svg"), | ||||
|       _buildBottomNavigationBarItem("Recherche", "assets/crystal-ball.svg"), | ||||
|     ]; | ||||
|   } | ||||
| 
 | ||||
|   Widget _buildChoiceFilter(Filter filter) { | ||||
|     return ChipListFilter( | ||||
|       choices: filter.values, | ||||
|       selectedChoices: filter.selectedValues, | ||||
|       updateSelectedChoices: (Set<String> choices) { | ||||
|         setState(() { | ||||
|           filter.selectedValues = choices; | ||||
|         }); | ||||
|         loadChildrenItems(item, filters).then((value) => { | ||||
|               setState(() { | ||||
|                 this.item = item; | ||||
|                 this.filters = filters; | ||||
|               }) | ||||
|             }); | ||||
|       }, | ||||
|     ); | ||||
|   } | ||||
| 
 | ||||
|   Widget _buildRangeFilter(Filter filter) { | ||||
|     return RangeFilter( | ||||
|         values: filter.values, | ||||
|         rangeValues: filter.rangeValues, | ||||
|         updateRangeValues: (RangeValues values) { | ||||
|           setState(() { | ||||
|             filter.rangeValues = values; | ||||
|           }); | ||||
|           loadChildrenItems(item, filters).then((value) => { | ||||
|             setState(() { | ||||
|               this.item = item; | ||||
|               this.filters = filters; | ||||
|             }) | ||||
|           }); | ||||
|         }); | ||||
|   } | ||||
| 
 | ||||
|   Widget _buildFilter(Filter filter) { | ||||
|     return Column(children: <Widget>[ | ||||
|       Divider( | ||||
|         color: Colors.blueGrey, | ||||
|         height: 10.0, | ||||
|       ), | ||||
|       Align( | ||||
|         alignment: Alignment.centerLeft, | ||||
|         child: Padding( | ||||
|           padding: const EdgeInsets.all(8.0), | ||||
|           child: Text(filter.name), | ||||
|         ), | ||||
|       ), | ||||
|       Container( | ||||
|           child: filter.type == FilterType.Choices | ||||
|               ? _buildChoiceFilter(filter) | ||||
|               : _buildRangeFilter(filter)) | ||||
|     ]); | ||||
|   } | ||||
| 
 | ||||
|   List<Widget> _buildFilterList() { | ||||
|     return filters.map((filter) => _buildFilter(filter)).toList(); | ||||
|   } | ||||
| 
 | ||||
|   int indexPage = 0; | ||||
| class HomePage extends StatelessWidget { | ||||
|   HomePage({Key key}) : super(key: key); | ||||
| 
 | ||||
|   @override | ||||
|   Widget build(BuildContext context) { | ||||
|     print("build"); | ||||
|     Widget currentPage; | ||||
|     switch (indexPage) { | ||||
|       case 0: | ||||
|         currentPage = _buildLibraryPage(); | ||||
|         break; | ||||
|       case 1: | ||||
|         currentPage = _buildBookmarksPage(); | ||||
|         break; | ||||
|       case 2: | ||||
|         currentPage = _buildSearchPage(); | ||||
|         break; | ||||
|     } | ||||
| 
 | ||||
|     return Scaffold( | ||||
|       //appBar: AppBar( | ||||
|       //  title: Text(widget.id), | ||||
|       //), | ||||
|       body: currentPage, | ||||
|       bottomNavigationBar: BottomNavigationBar( | ||||
|         currentIndex: indexPage, | ||||
|         onTap: (int index) { | ||||
|           setState(() { | ||||
|             this.indexPage = index; | ||||
|           }); | ||||
|         }, | ||||
|         items: _buildBottomNavigationBarItems(), | ||||
|       ), | ||||
|       endDrawer: filters != null | ||||
|           ? Drawer( | ||||
|               child: ListView( | ||||
|                   // Important: Remove any padding from the ListView. | ||||
|                   padding: EdgeInsets.zero, | ||||
|                   children: _buildFilterList()), | ||||
|             ) | ||||
|           : null, | ||||
|       appBar: AppBar( | ||||
|         title: Text(widget.id), | ||||
|         actions: filters != null | ||||
|             ? [ | ||||
|                 Builder( | ||||
|                   builder: (context) => IconButton( | ||||
|                     icon: SvgPicture.asset( | ||||
|                       "assets/funnel.svg", | ||||
|                       height: 30.0, | ||||
|                       width: 30.0, | ||||
|                       allowDrawingOutsideViewBox: true, | ||||
|                     ), //Icon(Icons.filter), | ||||
|                     onPressed: () => Scaffold.of(context).openEndDrawer(), | ||||
|                     tooltip: | ||||
|                         MaterialLocalizations.of(context).openAppDrawerTooltip, | ||||
|                   ), | ||||
|                 ), | ||||
|               ] | ||||
|             : null, | ||||
|       ), | ||||
|     ); | ||||
|       appBar: AppBar(title: Text("Haches & Dés"),), | ||||
|         body: Column( | ||||
|       children: <Widget>[ | ||||
|         FlatButton.icon( | ||||
|           label: Text("Bibliothèque"), | ||||
|           icon: SvgPicture.asset( | ||||
|             "assets/spell-book.svg", | ||||
|             height: 100.0, | ||||
|             width: 100.0, | ||||
|             allowDrawingOutsideViewBox: true, | ||||
|           ), | ||||
|           onPressed: () => Navigator.push( | ||||
|             context, | ||||
|             MaterialPageRoute( | ||||
|                 builder: (context) => LibraryPage(id: 'index.md')), | ||||
|           ), | ||||
|         ), | ||||
|         FlatButton.icon( | ||||
|           label: Text("Personnages"), | ||||
|           icon: SvgPicture.asset( | ||||
|             "assets/swordman.svg", | ||||
|             height: 100.0, | ||||
|             width: 100.0, | ||||
|             allowDrawingOutsideViewBox: true, | ||||
|           ), | ||||
|           onPressed: () => Navigator.push( | ||||
|             context, | ||||
|             MaterialPageRoute( | ||||
|                 builder: (context) => LibraryPage(id: 'index.md')), | ||||
|           ), | ||||
|         ), | ||||
|         FlatButton.icon( | ||||
|           label: Text("A propos de..."), | ||||
|           icon: SvgPicture.asset( | ||||
|             "assets/wooden-sign.svg", | ||||
|             height: 100.0, | ||||
|             width: 100.0, | ||||
|             allowDrawingOutsideViewBox: true, | ||||
|           ), | ||||
|           onPressed: () => Navigator.push( | ||||
|             context, | ||||
|             MaterialPageRoute( | ||||
|                 builder: (context) => LibraryPage(id: 'index.md')), | ||||
|           ), | ||||
|         ), | ||||
|       ], | ||||
|     )); | ||||
|   } | ||||
| } | ||||
|  |  | |||
							
								
								
									
										269
									
								
								aidedejeu_flutter/lib/widgets/library.dart
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										269
									
								
								aidedejeu_flutter/lib/widgets/library.dart
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,269 @@ | |||
| import 'package:aidedejeu_flutter/database.dart'; | ||||
| import 'package:aidedejeu_flutter/models/filters.dart'; | ||||
| import 'package:aidedejeu_flutter/widgets/filters.dart'; | ||||
| import 'package:aidedejeu_flutter/models/items.dart'; | ||||
| import 'package:flutter/material.dart'; | ||||
| import 'package:flutter/services.dart'; | ||||
| import 'package:flutter_markdown/flutter_markdown.dart'; | ||||
| import 'package:flutter_svg/flutter_svg.dart'; | ||||
| 
 | ||||
| class LibraryPage extends StatefulWidget { | ||||
|   LibraryPage({Key key, @required this.id}) : super(key: key); | ||||
| 
 | ||||
|   final String id; | ||||
| 
 | ||||
|   @override | ||||
|   _LibraryPageState createState() => _LibraryPageState(); | ||||
| } | ||||
| 
 | ||||
| class _LibraryPageState extends State<LibraryPage> { | ||||
|   void setItem(Item item) { | ||||
|     setState(() { | ||||
|       this.item = item; | ||||
|       if (item is FilteredItems) { | ||||
|         this.filters = (item as FilteredItems).toFilterList(); | ||||
|       } else { | ||||
|         this.filters = null; | ||||
|       } | ||||
|       this.markdown = | ||||
|           item.markdown.replaceAllMapped(RegExp(r'<!--.*?-->'), (match) { | ||||
|             return ''; | ||||
|           }); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   String markdown = ""; | ||||
|   Item item = null; | ||||
|   MarkdownStyleSheet styleSheet; | ||||
|   List<Filter> filters = null; | ||||
| 
 | ||||
|   @override | ||||
|   void initState() { | ||||
|     super.initState(); | ||||
| 
 | ||||
| 
 | ||||
|     _loadItem().then((item) => setItem(item)); | ||||
|   } | ||||
| 
 | ||||
|   @protected | ||||
|   @mustCallSuper | ||||
|   void didChangeDependencies() { | ||||
|     styleSheet = MarkdownStyleSheet.fromTheme(Theme.of(context)).copyWith( | ||||
|       tableColumnWidth: IntrinsicColumnWidth(), | ||||
|       tableCellsPadding: EdgeInsets.all(0.2), | ||||
|     ); | ||||
|   } | ||||
| 
 | ||||
|   Future<Item> _loadItem() async { | ||||
|     var item = await getItemWithId(this.widget.id); | ||||
|     var items = await loadChildrenItems(item, filters); | ||||
|     //setItem(item); | ||||
|     return item; | ||||
|   } | ||||
| 
 | ||||
|   Widget _buildMarkdown(BuildContext context) { | ||||
|     return Markdown( | ||||
|       data: markdown, | ||||
|       styleSheet: styleSheet, | ||||
|       onTapLink: (link) => Navigator.push( | ||||
|         context, | ||||
|         MaterialPageRoute(builder: (context) => LibraryPage(id: link)), | ||||
|       ), | ||||
|     ); | ||||
|   } | ||||
| 
 | ||||
|   Widget _buildMarkdownBody(BuildContext context) { | ||||
|     return Container( | ||||
|         margin: const EdgeInsets.all(10.0), | ||||
|         child: MarkdownBody( | ||||
|           data: markdown, | ||||
|           styleSheet: styleSheet, | ||||
|           onTapLink: (link) => Navigator.push( | ||||
|             context, | ||||
|             MaterialPageRoute(builder: (context) => LibraryPage(id: link)), | ||||
|           ), | ||||
|         )); | ||||
|   } | ||||
| 
 | ||||
|   Widget _buildChildTile(BuildContext context, Item item) { | ||||
|     return ListTile( | ||||
|       title: Text(item.name), | ||||
|       subtitle: Text(item.aliasText ?? ""), | ||||
|       onTap: () => Navigator.push( | ||||
|         context, | ||||
|         MaterialPageRoute(builder: (context) => LibraryPage(id: item.id)), | ||||
|       ), | ||||
|     ); | ||||
|   } | ||||
| 
 | ||||
|   Widget _buildLibraryItemPage() { | ||||
|     return Stack( | ||||
|       children: <Widget>[ | ||||
|         ListView.builder( | ||||
|             itemCount: (item?.children?.length ?? 0) + 1, | ||||
|             itemBuilder: (BuildContext context, int index) { | ||||
|               return index == 0 | ||||
|                   ? _buildMarkdownBody(context) | ||||
|                   : _buildChildTile(context, item.children[index - 1]); | ||||
|             }) | ||||
|       ], | ||||
|     ); | ||||
|   } | ||||
| 
 | ||||
|   Widget _buildBookmarksPage() { | ||||
|     return Text("Bookmarks"); | ||||
|   } | ||||
| 
 | ||||
|   Widget _buildSearchPage() { | ||||
|     return Text("Search"); | ||||
|   } | ||||
| 
 | ||||
|   BottomNavigationBarItem _buildBottomNavigationBarItem( | ||||
|       String title, String assetName) { | ||||
|     return BottomNavigationBarItem( | ||||
|       icon: SvgPicture.asset( | ||||
|         assetName, | ||||
|         height: 30.0, | ||||
|         width: 30.0, | ||||
|         allowDrawingOutsideViewBox: true, | ||||
|       ), | ||||
|       title: Text(title), | ||||
|       activeIcon: SvgPicture.asset( | ||||
|         assetName, | ||||
|         height: 40.0, | ||||
|         width: 40.0, | ||||
|         allowDrawingOutsideViewBox: true, | ||||
|       ), | ||||
|     ); | ||||
|   } | ||||
| 
 | ||||
|   List _buildBottomNavigationBarItems() { | ||||
|     return <BottomNavigationBarItem>[ | ||||
|       _buildBottomNavigationBarItem("Bibliothèque", "assets/spell-book.svg"), | ||||
|       _buildBottomNavigationBarItem("Favoris", "assets/stars-stack.svg"), | ||||
|       _buildBottomNavigationBarItem("Recherche", "assets/crystal-ball.svg"), | ||||
|     ]; | ||||
|   } | ||||
| 
 | ||||
|   Widget _buildChoiceFilter(Filter filter) { | ||||
|     return ChipListFilter( | ||||
|       choices: filter.values, | ||||
|       selectedChoices: filter.selectedValues, | ||||
|       updateSelectedChoices: (Set<String> choices) { | ||||
|         setState(() { | ||||
|           filter.selectedValues = choices; | ||||
|         }); | ||||
|         loadChildrenItems(item, filters).then((value) => { | ||||
|           setState(() { | ||||
|             this.item = item; | ||||
|             this.filters = filters; | ||||
|           }) | ||||
|         }); | ||||
|       }, | ||||
|     ); | ||||
|   } | ||||
| 
 | ||||
|   Widget _buildRangeFilter(Filter filter) { | ||||
|     return RangeFilter( | ||||
|         values: filter.values, | ||||
|         rangeValues: filter.rangeValues, | ||||
|         updateRangeValues: (RangeValues values) { | ||||
|           setState(() { | ||||
|             filter.rangeValues = values; | ||||
|           }); | ||||
|           loadChildrenItems(item, filters).then((value) => { | ||||
|             setState(() { | ||||
|               this.item = item; | ||||
|               this.filters = filters; | ||||
|             }) | ||||
|           }); | ||||
|         }); | ||||
|   } | ||||
| 
 | ||||
|   Widget _buildFilter(Filter filter) { | ||||
|     return Column(children: <Widget>[ | ||||
|       Divider( | ||||
|         color: Colors.blueGrey, | ||||
|         height: 10.0, | ||||
|       ), | ||||
|       Align( | ||||
|         alignment: Alignment.centerLeft, | ||||
|         child: Padding( | ||||
|           padding: const EdgeInsets.all(8.0), | ||||
|           child: Text(filter.name), | ||||
|         ), | ||||
|       ), | ||||
|       Container( | ||||
|           child: filter.type == FilterType.Choices | ||||
|               ? _buildChoiceFilter(filter) | ||||
|               : _buildRangeFilter(filter)) | ||||
|     ]); | ||||
|   } | ||||
| 
 | ||||
|   List<Widget> _buildFilterList() { | ||||
|     return filters.map((filter) => _buildFilter(filter)).toList(); | ||||
|   } | ||||
| 
 | ||||
|   int indexPage = 0; | ||||
| 
 | ||||
|   @override | ||||
|   Widget build(BuildContext context) { | ||||
|     print("build"); | ||||
|     Widget currentPage; | ||||
|     switch (indexPage) { | ||||
|       case 0: | ||||
|         currentPage = _buildLibraryItemPage(); | ||||
|         break; | ||||
|       case 1: | ||||
|         currentPage = _buildBookmarksPage(); | ||||
|         break; | ||||
|       case 2: | ||||
|         currentPage = _buildSearchPage(); | ||||
|         break; | ||||
|     } | ||||
| 
 | ||||
|     return Scaffold( | ||||
|       //appBar: AppBar( | ||||
|       //  title: Text(widget.id), | ||||
|       //), | ||||
|       body: currentPage, | ||||
|       bottomNavigationBar: BottomNavigationBar( | ||||
|         currentIndex: indexPage, | ||||
|         onTap: (int index) { | ||||
|           setState(() { | ||||
|             this.indexPage = index; | ||||
|           }); | ||||
|         }, | ||||
|         items: _buildBottomNavigationBarItems(), | ||||
|       ), | ||||
|       endDrawer: filters != null | ||||
|           ? Drawer( | ||||
|         child: ListView( | ||||
|           // Important: Remove any padding from the ListView. | ||||
|             padding: EdgeInsets.zero, | ||||
|             children: _buildFilterList()), | ||||
|       ) | ||||
|           : null, | ||||
|       appBar: AppBar( | ||||
|         title: Text(widget.id), | ||||
|         actions: filters != null | ||||
|             ? [ | ||||
|           Builder( | ||||
|             builder: (context) => IconButton( | ||||
|               icon: SvgPicture.asset( | ||||
|                 "assets/funnel.svg", | ||||
|                 height: 30.0, | ||||
|                 width: 30.0, | ||||
|                 allowDrawingOutsideViewBox: true, | ||||
|               ), //Icon(Icons.filter), | ||||
|               onPressed: () => Scaffold.of(context).openEndDrawer(), | ||||
|               tooltip: | ||||
|               MaterialLocalizations.of(context).openAppDrawerTooltip, | ||||
|             ), | ||||
|           ), | ||||
|         ] | ||||
|             : null, | ||||
|       ), | ||||
|     ); | ||||
|   } | ||||
| } | ||||
							
								
								
									
										0
									
								
								aidedejeu_flutter/lib/widgets/pceditor.dart
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								aidedejeu_flutter/lib/widgets/pceditor.dart
									
										
									
									
									
										Normal file
									
								
							
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Yan Maniez
						Yan Maniez