mirror of
https://github.com/Nioux/AideDeJeu.git
synced 2025-12-16 15:19:56 +00:00
Events
This commit is contained in:
parent
025077bee7
commit
60d83137be
7 changed files with 421 additions and 308 deletions
|
|
@ -1,10 +1,5 @@
|
|||
import 'package:aidedejeu_flutter/database.dart';
|
||||
import 'package:aidedejeu_flutter/filterWidgets.dart';
|
||||
import 'package:aidedejeu_flutter/models/items.dart';
|
||||
import 'package:aidedejeu_flutter/widgets/homepage.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';
|
||||
|
||||
void main() => runApp(MyApp());
|
||||
|
||||
|
|
@ -21,263 +16,3 @@ class MyApp extends StatelessWidget {
|
|||
}
|
||||
}
|
||||
|
||||
class MyHomePage extends StatefulWidget {
|
||||
MyHomePage({Key key, @required this.id}) : super(key: key);
|
||||
|
||||
final String id;
|
||||
|
||||
@override
|
||||
_MyHomePageState createState() => _MyHomePageState(id: this.id);
|
||||
}
|
||||
|
||||
class _MyHomePageState extends State<MyHomePage> {
|
||||
_MyHomePageState({@required this.id});
|
||||
|
||||
final String id;
|
||||
|
||||
void setItem(Item item) {
|
||||
setState(() {
|
||||
this.item = item;
|
||||
this.markdown =
|
||||
item.Markdown.replaceAllMapped(RegExp(r'<!--.*?-->'), (match) {
|
||||
return '';
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
String markdown = "";
|
||||
Item item = null;
|
||||
MarkdownStyleSheet styleSheet;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
|
||||
ThemeData theme = ThemeData(
|
||||
brightness: Brightness.light,
|
||||
primaryColor: Colors.lightBlue[800],
|
||||
accentColor: Colors.cyan[600],
|
||||
fontFamily: 'LinuxLibertine',
|
||||
textTheme: TextTheme(
|
||||
headline: TextStyle(fontSize: 28.0, fontWeight: FontWeight.bold),
|
||||
title: TextStyle(fontSize: 22.0, fontStyle: FontStyle.italic),
|
||||
body1: TextStyle(fontSize: 16.0, fontFamily: 'Hind'),
|
||||
),
|
||||
);
|
||||
|
||||
styleSheet = MarkdownStyleSheet.fromTheme(theme).copyWith(
|
||||
tableColumnWidth: IntrinsicColumnWidth(),
|
||||
tableCellsPadding: EdgeInsets.all(0.2));
|
||||
|
||||
loadItem().then((item) => setItem(item));
|
||||
}
|
||||
|
||||
Future<Item> loadItem() async {
|
||||
var item = await getItemWithId(this.id);
|
||||
var items = await loadChildrenItems(item);
|
||||
//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 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"),
|
||||
];
|
||||
}
|
||||
|
||||
List<Widget> buildFilterChipList(List<String> choices) {
|
||||
return choices
|
||||
.map((choice) => Padding(
|
||||
padding: const EdgeInsets.all(4.0),
|
||||
child: FilterChip(
|
||||
label: Text(choice),
|
||||
backgroundColor: Colors.transparent,
|
||||
shape: StadiumBorder(side: BorderSide()),
|
||||
onSelected: (bool value) {
|
||||
print("selected");
|
||||
},
|
||||
)))
|
||||
.toList();
|
||||
}
|
||||
|
||||
Widget buildChoiceFilter(Filter filter) {
|
||||
return Wrap(children: buildFilterChipList(filter.values));
|
||||
}
|
||||
|
||||
Widget buildRangeFilter(Filter filter) {
|
||||
/*return RangeSlider(
|
||||
min: 0,
|
||||
max: 1.0 * filter.values.length,
|
||||
divisions: filter.values.length,
|
||||
labels: RangeLabels(
|
||||
'début ${filter.values.first}', 'fin ${filter.values.last}'),
|
||||
values: RangeValues(0, 1.0 * filter.values.length),
|
||||
onChanged: (RangeValues value) {});*/
|
||||
return RangeFilter(filter: filter);
|
||||
}
|
||||
|
||||
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 (item as FilteredItems)
|
||||
.toFilterList()
|
||||
.map((filter) => buildFilter(filter))
|
||||
.toList();
|
||||
}
|
||||
|
||||
int indexPage = 0;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
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: item is FilteredItems
|
||||
? Drawer(
|
||||
child: ListView(
|
||||
// Important: Remove any padding from the ListView.
|
||||
padding: EdgeInsets.zero,
|
||||
children: buildFilterList()),
|
||||
)
|
||||
: null,
|
||||
appBar: AppBar(
|
||||
title: Text(widget.id),
|
||||
actions: item is FilteredItems
|
||||
? [
|
||||
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,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue