+ hive
+ LibraryPage + StoryPage + logo + font
This commit is contained in:
33
FRONT/lib/main.dart
Normal file
33
FRONT/lib/main.dart
Normal file
@@ -0,0 +1,33 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:hive_flutter/hive_flutter.dart';
|
||||
import 'package:story/screens/homePage.dart';
|
||||
import 'package:story/screens/storyPage.dart';
|
||||
|
||||
void main() async {
|
||||
|
||||
//init hive
|
||||
await Hive.initFlutter() ;
|
||||
|
||||
//open box
|
||||
var box = Hive.openBox('storyBox');
|
||||
|
||||
runApp(const MyApp());
|
||||
}
|
||||
|
||||
class MyApp extends StatelessWidget {
|
||||
const MyApp({ super.key}) ;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return MaterialApp(
|
||||
title: 'Mon Application',
|
||||
theme: ThemeData(
|
||||
primarySwatch: Colors.blue,
|
||||
),
|
||||
home: Material(child: const HomePage()),
|
||||
routes: {
|
||||
'storyPage': (context) => StoryPage(),
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
63
FRONT/lib/screens/homePage.dart
Normal file
63
FRONT/lib/screens/homePage.dart
Normal file
@@ -0,0 +1,63 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:story/screens/libraryPage.dart';
|
||||
import 'package:story/utils/titleUtils.dart';
|
||||
|
||||
|
||||
class HomePage extends StatelessWidget {
|
||||
const HomePage({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
//color: Color.fromRGBO(86, 125, 106, 1),
|
||||
decoration: const BoxDecoration(gradient:
|
||||
LinearGradient(
|
||||
begin: AlignmentDirectional.centerStart,
|
||||
end: AlignmentDirectional.centerEnd,
|
||||
colors: [
|
||||
Color.fromARGB(255, 50, 50, 50),
|
||||
Color.fromARGB(255, 50, 50, 50)
|
||||
//const Color.fromARGB(50, 86, 125, 106),
|
||||
//const Color.fromARGB(255, 86, 125, 106),
|
||||
//const Color.fromARGB(255, 86, 125, 106),
|
||||
//const Color.fromARGB(255, 64, 95, 80)
|
||||
]
|
||||
)
|
||||
),
|
||||
child: Center(
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
ClipRRect(
|
||||
borderRadius: BorderRadius.circular(10),
|
||||
child: Image.asset('assets/images/logo.jpg', width: 250)
|
||||
),
|
||||
const SizedBox(height: 20),
|
||||
const TitleUtils(title: 'Histoire d\'un soir'),
|
||||
const SizedBox(height: 300),
|
||||
ElevatedButton(
|
||||
onPressed: () {
|
||||
Navigator.pushReplacement(
|
||||
context,
|
||||
MaterialPageRoute(builder: (context) => LibraryPage()),
|
||||
);
|
||||
},
|
||||
child: const Text('Mettre a jour'),
|
||||
),
|
||||
const SizedBox(height: 20),
|
||||
|
||||
ElevatedButton(
|
||||
onPressed: () {
|
||||
Navigator.pushReplacement(
|
||||
context,
|
||||
MaterialPageRoute(builder: (context) => LibraryPage()),
|
||||
);
|
||||
},
|
||||
child: const Text('Commencer la lecture'),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
45
FRONT/lib/screens/libraryPage.dart
Normal file
45
FRONT/lib/screens/libraryPage.dart
Normal file
@@ -0,0 +1,45 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:story/utils/iconCard.dart';
|
||||
|
||||
|
||||
class LibraryPage extends StatelessWidget {
|
||||
const LibraryPage({super.key}) ;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: Text('Page suivante'),
|
||||
),
|
||||
body: Column(
|
||||
children: [
|
||||
Expanded(
|
||||
child: GridView.count(
|
||||
crossAxisCount: 2,
|
||||
shrinkWrap: true,
|
||||
padding: EdgeInsets.all(20),
|
||||
children: [
|
||||
IconCard(icon: Icons.home, label: 'Accueil'),
|
||||
IconCard(icon: Icons.settings, label: 'Paramètres'),
|
||||
IconCard(icon: Icons.camera, label: 'Appareil photo'),
|
||||
IconCard(icon: Icons.person, label: 'Profil'),
|
||||
IconCard(icon: Icons.home, label: 'Accueil'),
|
||||
IconCard(icon: Icons.settings, label: 'Paramètres'),
|
||||
IconCard(icon: Icons.camera, label: 'Appareil photo'),
|
||||
IconCard(icon: Icons.person, label: 'Profil'),
|
||||
IconCard(icon: Icons.home, label: 'Accueil'),
|
||||
IconCard(icon: Icons.settings, label: 'Paramètres'),
|
||||
IconCard(icon: Icons.camera, label: 'Appareil photo'),
|
||||
IconCard(icon: Icons.person, label: 'Profil'),
|
||||
IconCard(icon: Icons.home, label: 'Accueil'),
|
||||
IconCard(icon: Icons.settings, label: 'Paramètres'),
|
||||
IconCard(icon: Icons.camera, label: 'Appareil photo'),
|
||||
IconCard(icon: Icons.person, label: 'Profil'),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
84
FRONT/lib/screens/storyPage.dart
Normal file
84
FRONT/lib/screens/storyPage.dart
Normal file
@@ -0,0 +1,84 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
|
||||
|
||||
class StoryPage extends StatelessWidget {
|
||||
const StoryPage({super.key}) ;
|
||||
|
||||
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final String arg = ModalRoute.of(context)?.settings.arguments as String;
|
||||
|
||||
return Scaffold(
|
||||
|
||||
body: CustomScrollView(
|
||||
slivers: [
|
||||
SliverAppBar(
|
||||
title: Text(arg.toString()),
|
||||
expandedHeight: 450,
|
||||
flexibleSpace: Stack(
|
||||
children: [
|
||||
Positioned.fill(child:
|
||||
Image.network('assets/images/boy.jpg',fit: BoxFit.cover,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
||||
),
|
||||
SliverToBoxAdapter(
|
||||
child: Column(
|
||||
children: [
|
||||
|
||||
Container(
|
||||
padding: const EdgeInsets.fromLTRB(40,40,40,0),
|
||||
|
||||
child: Text('''
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas at arcu ipsum. Pellentesque in condimentum ante, ultricies placerat turpis. Donec ornare vel ex tincidunt tempor. Quisque nec lorem et erat ullamcorper luctus ac vehicula quam. Ut ac nibh vulputate, pellentesque sem et, scelerisque dolor. In ac tristique sapien. Phasellus pretium mi lorem, in malesuada tortor suscipit et. Morbi iaculis metus at ex tempor auctor. In hac habitasse platea dictumst. Ut turpis dui, venenatis a elementum at, egestas non arcu. Proin vehicula sapien id fermentum pharetra. Vestibulum aliquet, massa eget viverra efficitur, nulla sapien convallis justo, et efficitur nunc dolor non tellus. Nam in nisi nec risus sollicitudin egestas. Integer arcu elit, tincidunt eget aliquet quis, consequat eu turpis.
|
||||
|
||||
Sed malesuada placerat egestas. Mauris nibh nisl, convallis aliquam finibus a, venenatis at nunc. Duis ac gravida libero. Interdum et malesuada fames ac ante ipsum primis in faucibus. Mauris laoreet, quam id pretium hendrerit, dui eros ultrices neque, a ornare tortor mi a turpis. Curabitur sed aliquet nulla. Curabitur nibh diam, malesuada sit amet tortor non, lacinia fringilla est. Nulla ut elit euismod, consequat neque id, ornare arcu. Aliquam auctor aliquet leo, nec posuere libero tempus ut. Phasellus dictum urna eget vulputate tristique. Phasellus ac pulvinar augue, id accumsan odio. In convallis mattis sem quis gravida.
|
||||
|
||||
Pellentesque id lacus id ante sodales tempus. Duis gravida augue sed tempor sagittis. Vivamus a diam quis nisl placerat suscipit vitae in tortor. Cras id metus in nunc volutpat lacinia eget non urna. Aliquam vitae ligula porttitor, commodo elit et, sodales tellus. Vestibulum rhoncus, magna sit amet euismod maximus, nunc orci mollis ex, eget consectetur orci augue sit amet orci. Ut pulvinar iaculis varius. Aenean rhoncus rutrum mollis. Sed id maximus sapien, vulputate fermentum risus. Duis gravida diam eget facilisis pulvinar. Nullam nec nisl eu odio interdum tempus. Sed sem nibh, finibus et justo eu, pretium facilisis arcu. Aliquam erat volutpat. Vivamus elementum ex ante, quis interdum sapien imperdiet at.
|
||||
|
||||
Sed vehicula urna mi, et rutrum urna consectetur vel. Pellentesque tempus fermentum metus, quis eleifend neque commodo a. Morbi commodo id sem nec bibendum. Quisque tempus nulla arcu, id maximus orci pharetra in. Sed pretium sapien vitae metus dapibus vestibulum. In sit amet arcu enim. Integer commodo efficitur ex non pretium. Suspendisse nisl ex, laoreet ac porttitor convallis, ullamcorper a mi. Vivamus ut lacus porttitor, pulvinar est id, sodales elit. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Curabitur luctus urna lacus, convallis iaculis tortor condimentum vitae. Mauris laoreet, magna eget imperdiet fringilla, nulla lectus imperdiet elit, non ultricies metus nibh at nisl.
|
||||
|
||||
Phasellus vehicula, nunc ut tempus facilisis, tortor tellus tempor odio, luctus venenatis arcu eros id purus. Morbi dictum ultrices felis, id auctor ipsum elementum vitae. Sed iaculis suscipit quam sed faucibus. Cras augue leo, efficitur ut augue nec, lacinia hendrerit lorem. Nullam sit amet lectus nec sem rhoncus mollis congue non lorem. Nullam in egestas neque, vel bibendum metus. Maecenas nec tortor eget erat fringilla congue. In rutrum egestas pellentesque. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Curabitur sed pulvinar purus. Donec eleifend pulvinar tristique. Phasellus fermentum urna vitae sem placerat malesuada. Morbi eu tellus euismod, feugiat mauris ut, ornare nisi. Pellentesque laoreet tellus quis congue viverra. Duis auctor id nisl sit amet rhoncus.
|
||||
|
||||
Sed sodales quis risus ut porta. Cras vitae dui sed purus efficitur congue. Vivamus in nibh condimentum, pulvinar ipsum non, vestibulum magna. Vestibulum vitae lectus porta, rhoncus ante non, ultricies neque. Vivamus hendrerit est lacinia tortor aliquam, sit amet volutpat sem vehicula. Vivamus ultrices sodales massa, in porttitor mauris finibus at. Etiam ornare eu erat ac ultrices.
|
||||
|
||||
Morbi elementum pharetra cursus. In vel elit felis. Mauris sodales neque sollicitudin nulla bibendum, pretium blandit lacus commodo. Mauris laoreet ultrices convallis. Donec ullamcorper laoreet aliquet. Nulla hendrerit lacinia eros et semper. Fusce laoreet, dolor ac ornare finibus, massa nisi dignissim purus, mollis molestie arcu turpis vel nisi. Fusce tempor tortor ut iaculis tincidunt. Quisque tincidunt mi metus, id pretium eros molestie eget. Maecenas hendrerit ex quis pretium tempus. Nunc dictum, arcu sit amet vestibulum rutrum, arcu magna efficitur sem, sed suscipit metus lectus eu justo. Pellentesque malesuada facilisis nulla, sit amet dapibus lectus dictum at. Curabitur eros nisl, iaculis vel nisi nec, suscipit facilisis lorem. Nullam sed nibh nibh.
|
||||
|
||||
Mauris feugiat eleifend efficitur. Cras elementum dapibus consequat. Maecenas blandit accumsan porttitor. Nullam diam nibh, varius aliquet leo ut, dapibus tristique libero. Phasellus elementum faucibus viverra. In congue leo interdum, eleifend dui eu, imperdiet neque. Curabitur at urna scelerisque, sollicitudin turpis ornare, pretium mauris. Donec leo orci, molestie viverra ultricies id, varius iaculis magna. Donec sed nisl eu tortor tincidunt lobortis quis nec lacus. Pellentesque eget massa a ipsum consectetur fermentum vitae non ante. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.
|
||||
|
||||
Integer aliquam mauris nunc, non ultricies dui hendrerit consequat. Integer pretium non nulla posuere porta. Integer vitae velit dolor. Praesent a ornare lectus, ac congue enim. Aliquam viverra vestibulum dolor at venenatis. Ut rutrum nisl urna, sit amet tincidunt ex lobortis at. Nullam at nulla volutpat, cursus velit vitae, viverra sem. Nulla id venenatis felis.
|
||||
|
||||
Donec et erat nec ante eleifend efficitur id at urna. Donec at risus sed diam molestie facilisis non non nunc. Sed tincidunt ultrices est, at convallis tortor pulvinar eu. Donec nec ultricies nunc. Pellentesque facilisis enim non dui placerat ultrices. Nulla sed velit sit amet risus pharetra tincidunt. Nulla fermentum nibh eu felis laoreet, et accumsan neque feugiat. Nullam convallis felis pharetra sem ultricies eleifend. Nulla finibus maximus enim sit amet scelerisque. Donec nec ultricies diam. Vestibulum volutpat leo id gravida sollicitudin. Donec vitae elit ipsum. Ut consectetur dolor a elit consectetur, et dignissim risus dapibus.
|
||||
|
||||
Mauris et lacinia mauris, eget egestas magna. Maecenas ultrices viverra congue. Phasellus placerat dapibus nisl, quis mattis massa tempus sit amet. Nulla convallis eu tellus at lacinia. Cras cursus rutrum ante at sagittis. Aliquam vitae massa quis turpis mollis consequat. Nullam blandit, orci eu tincidunt hendrerit, urna neque interdum purus, et commodo felis odio non lectus. Mauris tristique consequat leo id porta. Nullam pulvinar ante purus, in convallis nulla placerat id. Cras accumsan risus ex, venenatis ultricies leo semper vel. Pellentesque tempus et lectus vel porta.
|
||||
|
||||
Integer lacinia vulputate sapien id laoreet. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Quisque mattis ex ut interdum aliquet. Nullam pellentesque eget nisi nec rutrum. Pellentesque rhoncus leo eget elit lobortis, viverra malesuada diam vehicula. Nulla facilisi. Curabitur elementum gravida euismod. Vestibulum id tincidunt enim. Integer non risus sed ex ultricies bibendum. Quisque ut justo eu tortor consequat lacinia et molestie purus. Phasellus consectetur augue ut tellus bibendum, a lobortis enim dignissim. Aliquam feugiat, lectus in scelerisque blandit, lectus felis tincidunt libero, eu lacinia augue justo vitae mauris. Vestibulum quis ultricies tellus. Cras convallis eleifend lectus, vitae tempor elit feugiat vitae. Phasellus neque diam, commodo quis sagittis sollicitudin, tincidunt ac odio. Nulla eget sollicitudin ante, a rhoncus leo.
|
||||
|
||||
Praesent dolor erat, auctor at elit in, consequat convallis nunc. Suspendisse dolor velit, dapibus eu eros id, accumsan viverra urna. Nam a maximus ligula, placerat suscipit metus. Duis metus urna, porta et mauris nec, auctor sagittis velit. In hac habitasse platea dictumst. Proin aliquet consectetur faucibus. Fusce nec justo fringilla, molestie diam vitae, aliquet turpis. Sed lorem elit, lobortis id scelerisque sed, hendrerit ultricies tortor. Aliquam euismod consequat odio, vitae eleifend massa convallis eget. Pellentesque vitae venenatis orci, quis placerat risus. Proin blandit turpis id diam luctus, et dapibus orci egestas. Ut egestas nibh sed tellus sagittis viverra.
|
||||
|
||||
Donec nibh risus, imperdiet a turpis ut, iaculis feugiat velit. Aliquam at tincidunt ligula. Quisque lorem risus, aliquet ac mollis in, dictum a ipsum. Pellentesque vitae vestibulum erat. Nulla sed lacinia quam. Duis vel eros suscipit, aliquet felis eget, tempor dolor. Quisque at nunc non elit dignissim congue ut vitae metus. Integer sollicitudin at elit vel facilisis.
|
||||
|
||||
Vestibulum sodales massa in elementum egestas. Praesent quis elementum lacus. Vestibulum at ante at dui auctor viverra ac vel sapien. Nam scelerisque cursus libero quis laoreet. Donec eget magna tristique, aliquam tellus non, sagittis purus. Fusce sit amet lacinia orci. Praesent ac dictum quam. Integer eleifend at mauris sit amet placerat. Phasellus ultricies leo non nisi semper blandit. Proin sollicitudin, enim ac hendrerit facilisis, dui lorem venenatis orci, eu interdum orci ante vel turpis. Suspendisse potenti. Vestibulum eu pulvinar sem. Duis hendrerit, tellus quis ornare tristique, sapien ante malesuada diam, ut placerat odio ipsum eu ex.
|
||||
|
||||
|
||||
''',
|
||||
style: TextStyle(
|
||||
fontSize: 24,
|
||||
),
|
||||
textAlign: TextAlign.justify,),
|
||||
),
|
||||
],
|
||||
|
||||
),
|
||||
)
|
||||
]
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
39
FRONT/lib/utils/homeButton.dart
Normal file
39
FRONT/lib/utils/homeButton.dart
Normal file
@@ -0,0 +1,39 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class TitleUtils extends StatelessWidget {
|
||||
const TitleUtils({super.key,required this.title});
|
||||
|
||||
final String title ;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Stack(
|
||||
children: [
|
||||
Text(
|
||||
title,
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
fontSize: 40,
|
||||
fontWeight: FontWeight.bold,
|
||||
fontFamily: 'Salina',
|
||||
//color: Colors.white,
|
||||
foreground: Paint()
|
||||
..style = PaintingStyle.stroke
|
||||
..strokeWidth = 2
|
||||
..color = Colors.black,
|
||||
),
|
||||
),
|
||||
Text(
|
||||
title,
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
fontSize: 40,
|
||||
fontWeight: FontWeight.bold,
|
||||
fontFamily: 'Salina',
|
||||
color: Colors.yellow[100],
|
||||
)
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
34
FRONT/lib/utils/iconCard.dart
Normal file
34
FRONT/lib/utils/iconCard.dart
Normal file
@@ -0,0 +1,34 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class IconCard extends StatelessWidget {
|
||||
final IconData icon;
|
||||
final String label;
|
||||
|
||||
const IconCard({super.key, required this.icon,required this.label}) ;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return InkWell(
|
||||
onTap: () {
|
||||
Navigator.pushNamed(context, 'storyPage', arguments:this.label);
|
||||
// Navigator.of(context).push('route' as Route<Object?>);
|
||||
},
|
||||
child: Card(
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Icon(
|
||||
icon,
|
||||
size: 50,
|
||||
),
|
||||
SizedBox(height: 10),
|
||||
Text(
|
||||
label,
|
||||
style: TextStyle(fontSize: 16),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
39
FRONT/lib/utils/titleUtils.dart
Normal file
39
FRONT/lib/utils/titleUtils.dart
Normal file
@@ -0,0 +1,39 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class TitleUtils extends StatelessWidget {
|
||||
const TitleUtils({super.key,required this.title});
|
||||
|
||||
final String title ;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Stack(
|
||||
children: [
|
||||
Text(
|
||||
title,
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
fontSize: 40,
|
||||
fontWeight: FontWeight.bold,
|
||||
fontFamily: 'Salina',
|
||||
//color: Colors.white,
|
||||
foreground: Paint()
|
||||
..style = PaintingStyle.stroke
|
||||
..strokeWidth = 2
|
||||
..color = Colors.black,
|
||||
),
|
||||
),
|
||||
Text(
|
||||
title,
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
fontSize: 40,
|
||||
fontWeight: FontWeight.bold,
|
||||
fontFamily: 'Salina',
|
||||
color: Colors.yellow[100],
|
||||
)
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user