Commit 4b9f56f9 authored by Benjamin LEROUX's avatar Benjamin LEROUX

Restructuration et fin de detailpage manga

parent 029c1654
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_media/Manga.dart';
import 'Game.dart';
GridView createGrid(String title, String url){ GridView createGrid(String title, String url){
const TextStyle optionStyle = const TextStyle optionStyle =
...@@ -15,26 +18,31 @@ GridView createGrid(String title, String url){ ...@@ -15,26 +18,31 @@ GridView createGrid(String title, String url){
class DataBase{ class DataBase{
static List<GridView> _mangaItem = <GridView>[]; static List<GridView> _mangaItem = <GridView>[];
static List<String> _mangaNames = <String>[]; static List<Manga> mangas = <Manga>[];
static List<String> _mangaUrls = <String>[];
static List<GridView> _gameItem = <GridView>[]; static List<GridView> _gameItem = <GridView>[];
static List<String> _gameNames = <String>[]; static List<String> _gameNames = <String>[];
static List<String> _gameUrls = <String>[]; static List<String> _gameUrls = <String>[];
static List<Game> games = <Game>[];
DataBase(){ DataBase(){
_mangaNames=['Arte','Berserk','Koe No Katachi','Made In Abyss', 'Monster', 'Shingeki No Kyojin']; mangas.add(Manga('Arte', '', 'https://www.manga-news.com/public/images/series/arte-1-komikku.jpg', 'Kei Ookubo', '14', 'En cours', 'Seinen - Historique - Tranche de vie', '7.94', '2013-??',
"L'histoire commence au début du xvie siècle à Florence en Italie, centre de la culture de la Renaissance, où de grands maîtres tels que Léonard de Vinci, Michel-Ange et Raphaël se sont épanouis.Arte est la seule fille des Spalletti, une famille de nobles en déclin. Depuis son enfance, Arte s'est révélée être dotée d'un talent inhabituel pour la peinture, mais quand son père meurt, sa mère essaie de la forcer à abandonner son amour pour l'art et à trouver un jeune homme noble à se marier dès que possible afin de sauver les Spalletti de la ruine.Arte, cependant, refuse de renoncer à ses rêves, et, allant à l'encontre des opinions de son temps, elle commence à chercher à travailler pour un maître peintre, en espérant un jour devenir elle-même une peintre accomplie.Sa forte détermination finit par attirer l'attention de Léo, un jeune peintre mais bien connu, qui l'accepte enfin comme sa disciple."));
_mangaUrls.add('https://www.manga-news.com/public/images/series/arte-1-komikku.jpg'); mangas.add(Manga('Berserk', '', 'https://static.fnac-static.com/multimedia/Images/FR/NR/fa/d8/17/1562874/1507-1/tsp20161130112826/Berserk.jpg', 'Kentaro Miura', '41', 'En cours', 'Seinen - Action - Horreur - Dark Fantasy - Drame', '9.35', '1989-??',
_mangaUrls.add('https://static.fnac-static.com/multimedia/Images/FR/NR/fa/d8/17/1562874/1507-1/tsp20161130112826/Berserk.jpg'); "Berserk raconte l'histoire de la rencontre de Guts et de Griffith, chef de la Troupe du Faucon, une bande de mercenaires à la solde du royaume de Midland. De cette rencontre naîtra une amitié ambiguë, mais néanmoins efficiente : la présence de Guts, guerrier à l'épée démesurée, se révélera vite indispensable à l'ambition du jeune Griffith, bretteur et tacticien hors pair. L'anime est ainsi le récit de l'ascension et de la chute de la Troupe du Faucon, et de la relation entre Guts et Griffith, particulièrement complexe, entre relation d'intérêt (Griffith utilise la force de Guts), respect mutuel (les deux se considèrent mutuellement en tant que soldats), et affection profonde (chacun a besoin de la présence de l'autre de façon inexplicable)."));
_mangaUrls.add('https://upload.wikimedia.org/wikipedia/en/6/6c/Koe_no_Katachi%2C_Volume_1.jpg'); mangas.add(Manga('Koe No Katachi', 'A Silent Voice', 'https://upload.wikimedia.org/wikipedia/en/6/6c/Koe_no_Katachi%2C_Volume_1.jpg', 'Yoshitoki Ōima', '7', 'Terminé', 'Shonen - Drame - Psychologique - Romance - Tranche de vie', '8.86', '2013-2014',
_mangaUrls.add('https://images-na.ssl-images-amazon.com/images/I/91N8saM4HdL.jpg'); "Shoya Ishida, habitant à Ōgaki dans la préfecture de Gifu, vit en combattant l'ennui par les jeux les plus insensés qui lui viennent à l'esprit. Un jour, Shoko Nishimiya rejoint sa classe d'école primaire et essaie de s'y faire une place, mais cette dernière est atteinte de surdité et va causer quelques soucis à ses camarades, ce qui va permettre au jeune Shoya de s'occuper en profitant des faiblesses de celle-ci. Mais tout cet amusement se retournera contre lui. Une fois lycéen, Shoya, qui décide de revoir une dernière fois Shoko pour s'excuser, va finalement se rapprocher d'elle à travers la langue des signes."));
_mangaUrls.add('https://www.manga-news.com/public/images/vols/monster-deluxe-1-kana.jpg'); mangas.add(Manga('Made In Abyss', '', 'https://images-na.ssl-images-amazon.com/images/I/91N8saM4HdL.jpg', 'Akihito Tsukushi', '9', 'En cours', 'Seinen - Action - Aventure - Drame - Psychologique', '8.86', '2012-??',
_mangaUrls.add('https://www.manga-news.com/public/images/series/Shingekinokyojin-01-kodansha.jpg'); "L’histoire se concentre autour d’une orpheline nommée Rico, vivant dans la ville de Orse, située dans la mer de Béoruska. La cité entoure un étrange et immense gouffre, communément appelé « l’Abysse ». L’Abysse recèle des artefacts et des vestiges d’une ancienne civilisation disparue, et est de fait un lieu prisé par les caverniers pour l’excavation de ces objets pouvant être vendus à l’étranger. Ces caverniers entreprennent de dangereuses expéditions à travers la brume du gouffre pour en trouver le plus possible. Cependant, plus une personne descend dans l’Abysse, plus la malédiction de celui-ci pèse sur sa santé, des symptômes de plus en plus graves se présentant lors de la remontée des différents niveaux. Peu d’aventuriers sont descendus dans les zones les plus basses et sont remontés pour narrer leur expérience."));
mangas.add(Manga('Monster', '', 'https://www.manga-news.com/public/images/vols/monster-deluxe-1-kana.jpg', 'Naoki Urasawa', '18', 'Terminé', 'Seinen - Policier - Drame - Thriller - Psychologique', '9.09', '1994-2001',
for(int i=0;i< _mangaNames.length; i++){ "L'histoire débute en Allemagne en 1986, à l'Eisler Memorial Hospital de Düsseldorf. Kenzô Tenma, le personnage principal, est un jeune neurochirurgien japonais aux compétences hors normes. Il est fiancé à Eva Heineman, la fille du directeur de l'hôpital, et est destiné à une brillante carrière. Pourtant, un jour, il refuse de donner en priorité ses soins au maire de la ville et préfère opérer un garçon blessé d'une balle dans la tête, arrivé à l'hôpital avant le maire. La sœur jumelle du garçon, très choquée, est elle aussi hospitalisée ; leurs parents adoptifs viennent d'être assassinés sauvagement chez eux. Le garçon s'en sort, mais le maire, confié à un autre chirurgien, décède. Le Dr Tenma est alors rétrogradé par le directeur de l'hôpital, et sa fiancée le quitte. Peu de temps après, le garçon et sa sœur disparaissent, à la suite des meurtres mystérieux de trois hauts responsables de l'établissement, dont le directeur."));
_mangaItem.add(createGrid(_mangaNames[i], _mangaUrls[i])); mangas.add(Manga('Shingeki No Kyojin', "L'attaque des Titans", 'https://www.manga-news.com/public/images/series/Shingekinokyojin-01-kodansha.jpg', 'Hajime Isayama', '34', 'En cours', 'Shonen - Action - Dark Fantasy - Mystère - Tragédie - Thriller', '8.72', '2009-??',
"L’histoire tourne autour du personnage d’Eren Jäger dans un monde où l’humanité vit entourée d’immenses murs pour se protéger de créatures gigantesques, les Titans. Le récit raconte le combat mené par l’humanité pour reconquérir son territoire, en éclaircissant les mystères liés à l’apparition des Titans, du monde extérieur et des évènements précédant la construction des murs."));
for(int i=0;i< mangas.length; i++){
_mangaItem.add(createGrid(mangas[i].title, mangas[i].url));
} }
_gameNames=['Dark Souls III','Halo: The Master Chief Collection','Hollow Knight','Sekiro', 'Slay The Spire', 'Temtem']; _gameNames=['Dark Souls III','Halo: The Master Chief Collection','Hollow Knight','Sekiro', 'Slay The Spire', 'Temtem'];
...@@ -50,46 +58,16 @@ class DataBase{ ...@@ -50,46 +58,16 @@ class DataBase{
_gameItem.add(createGrid(_gameNames[i], _gameUrls[i])); _gameItem.add(createGrid(_gameNames[i], _gameUrls[i]));
} }
//trier automatiquement ? //trier ordre alphabetique?
// _mangaItem.add(GridView.count(crossAxisCount: 2,physics: new NeverScrollableScrollPhysics(), children: <Widget>[Image.network('https://www.manga-news.com/public/images/series/arte-1-komikku.jpg'), Align(alignment: Alignment.center,child: Text('Arte',style: optionStyle )),]));
} }
List<Manga> getMangaList(){ return mangas;}
List<GridView> getMangaViews(){ return _mangaItem;} List<GridView> getMangaViews(){ return _mangaItem;}
List<String> getMangaNames(){ return _mangaNames;}
List<String> getMangaUrls(){ return _mangaUrls;} List<Game> getGameList(){ return games;}
List<GridView> getGameViews(){ return _gameItem;} List<GridView> getGameViews(){ return _gameItem;}
List<String> getGameNames(){ return _gameNames;} List<String> getGameNames(){ return _gameNames;}
List<String> getGameUrls(){ return _gameUrls;} List<String> getGameUrls(){ return _gameUrls;}
} }
//placer autre part ?
class Todo {
final String title;
final String description;
Todo(this.title, this.description);
}
class DetailScreen extends StatelessWidget {
// Declare a field that holds the Todo.
final Todo todo;
// In the constructor, require a Todo.
DetailScreen({Key key, @required this.todo}) : super(key: key);
@override
Widget build(BuildContext context) {
// Use the Todo to create the UI.
return Scaffold(
appBar: AppBar(
title: Text(todo.title),
),
body: Padding(
padding: EdgeInsets.all(16.0),
child: Text(todo.description),
),
);
}
}
\ No newline at end of file
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class Game {
final String title;
final String alternativeTitle;
final String url;
final String author;
final String volumes;
final String status;
final String genres;
final String score;
final String releaseDates;
final String description;
Game(this.title, this.alternativeTitle, this.url, this.author, this.volumes, this.status, this.genres, this.score, this.releaseDates, this.description );
}
class DetailGameScreen extends StatelessWidget {
final Game game;
// In the constructor, require a game.
DetailGameScreen({Key key, @required this.game}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(game.title),
),
body: Padding(
padding: EdgeInsets.all(16.0),
child: Text(game.description),
),
);
}
}
\ No newline at end of file
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_media/DataBase.dart';
class Manga {
final String title;
String alternativeTitle;
final String url;
final String author;
final String volumes;
final String status;
final String genres;
final String score;
final String releaseDates;
final String description;
Manga(this.title, this.alternativeTitle, this.url, this.author, this.volumes, this.status, this.genres, this.score, this.releaseDates, this.description );
}
class DetailMangaScreen extends StatelessWidget {
final Manga manga;
static const TextStyle boldStyle = TextStyle( fontWeight: FontWeight.bold,color: Colors.black);
static const TextStyle classicStyle = TextStyle(color: Colors.black);
static const TextStyle boldTitleStyle = TextStyle( fontWeight: FontWeight.bold,color: Colors.black,fontSize: 20);
static const TextStyle classicTitleStyle = TextStyle(color: Colors.black, fontSize: 20);
// In the constructor, require a manga
DetailMangaScreen({Key key, @required this.manga}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Détails de l'oeuvre"),
),
body: Padding(
padding: EdgeInsets.all(4.0),
child: ListView(
padding: const EdgeInsets.all(8),
children: <Widget>[
if(manga.alternativeTitle!='') Container(
height: 50,
child: RichText(text: TextSpan(children: <TextSpan>[
TextSpan(text: "Titre: ", style: boldTitleStyle,),
TextSpan(text: "${manga.title}\n", style: classicTitleStyle,),
TextSpan(text: "Titre alternatif: ", style: boldTitleStyle,),
TextSpan(text: "${manga.alternativeTitle}", style: classicTitleStyle,),
],),)
)else Container(
height: 25,
child: RichText(text: TextSpan(children: <TextSpan>[
TextSpan(text: "Titre: ", style: boldTitleStyle,),
TextSpan(text: "${manga.title}", style: classicTitleStyle,),
],),)
),
Container(
height: 225,
child: GridView.count(
childAspectRatio: 0.8,
crossAxisCount: 2,
physics: new NeverScrollableScrollPhysics(),
children: <Widget>[
Image.network(manga.url),
Align(alignment: Alignment.center, child: RichText(text: TextSpan(children: <TextSpan>[
TextSpan(text: "Auteur: ", style: boldStyle,),
TextSpan(text: "${manga.author}\n", style: classicStyle,),
TextSpan(text: "Genres: ", style: boldStyle,),
TextSpan(text: "${manga.genres}\n", style: classicStyle,),
TextSpan(text: "Statut: ", style: boldStyle,),
TextSpan(text: "${manga.status}\n", style: classicStyle,),
TextSpan(text: "Dates: ", style: boldStyle,),
TextSpan(text: "${manga.releaseDates}\n", style: classicStyle,),
TextSpan(text: "Volumes: ", style: boldStyle,),
TextSpan(text: "${manga.volumes}\n", style: classicStyle,),
TextSpan(text: "Note communautaire: ", style: boldStyle,),
TextSpan(text: "${manga.score}\n", style: classicStyle,),
],),))
]),
),
Container(
height: 400,
child:RichText(textAlign: TextAlign.justify,text: TextSpan(children: <TextSpan>[
TextSpan(text: "Synopsis:\n", style: boldTitleStyle,),
TextSpan(text: "${manga.description}\n", style: classicStyle,),
],),)
)],
),
),
);
}
}
...@@ -2,6 +2,9 @@ import 'package:flutter/cupertino.dart'; ...@@ -2,6 +2,9 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_media/DataBase.dart'; import 'package:flutter_media/DataBase.dart';
import 'Game.dart';
import 'Manga.dart';
void main() => runApp(MyApp()); void main() => runApp(MyApp());
/// This is the main application widget. /// This is the main application widget.
...@@ -37,17 +40,10 @@ class _MyStatefulWidgetState extends State<MyStatefulWidget> { ...@@ -37,17 +40,10 @@ class _MyStatefulWidgetState extends State<MyStatefulWidget> {
static const TextStyle titleStyle2 = static const TextStyle titleStyle2 =
TextStyle(fontSize: 44, fontWeight: FontWeight.bold, color: Colors.blue); TextStyle(fontSize: 44, fontWeight: FontWeight.bold, color: Colors.blue);
static List<Todo> todosManga=new List.generate( /*
dataBase.getMangaViews().length, static List<Game> todosGame=new List.generate(
(i) => Todo(
dataBase.getMangaNames()[i] ,
'A description of what needs to be done for Todo' + (i+1).toString(),
),
);
static List<Todo> todosGame=new List.generate(
dataBase.getMangaViews().length, dataBase.getMangaViews().length,
(i) => Todo( (i) => Game(
dataBase.getGameNames()[i] , dataBase.getGameNames()[i] ,
//db+getdescription //db+getdescription
//db.getannee //db.getannee
...@@ -55,7 +51,7 @@ class _MyStatefulWidgetState extends State<MyStatefulWidget> { ...@@ -55,7 +51,7 @@ class _MyStatefulWidgetState extends State<MyStatefulWidget> {
'A description of what needs to be done for Todo'+ (i+1).toString(), 'A description of what needs to be done for Todo'+ (i+1).toString(),
), ),
); );
*/
static final List<Widget> _widgetOptions = <Widget>[ static final List<Widget> _widgetOptions = <Widget>[
Text( Text(
'Accueil', 'Accueil',
...@@ -72,7 +68,7 @@ class _MyStatefulWidgetState extends State<MyStatefulWidget> { ...@@ -72,7 +68,7 @@ class _MyStatefulWidgetState extends State<MyStatefulWidget> {
); );
else return Container( else return Container(
height: 180, height: 180,
child: InkWell( onTap: () {Navigator.push(context, MaterialPageRoute(builder: (context) => DetailScreen(todo: todosGame[index-1])),); child: InkWell( onTap: () {Navigator.push(context, MaterialPageRoute(builder: (context) => DetailGameScreen(game: DataBase.games[index-1])),);
}, },
child: Center(child: dataBase.getGameViews()[index-1]),), child: Center(child: dataBase.getGameViews()[index-1]),),
); );
...@@ -90,7 +86,7 @@ class _MyStatefulWidgetState extends State<MyStatefulWidget> { ...@@ -90,7 +86,7 @@ class _MyStatefulWidgetState extends State<MyStatefulWidget> {
); );
else return Container( else return Container(
height: 180, height: 180,
child: InkWell( onTap: () {Navigator.push(context, MaterialPageRoute(builder: (context) => DetailScreen(todo: todosManga[index-1])),); child: InkWell( onTap: () {Navigator.push(context, MaterialPageRoute(builder: (context) => DetailMangaScreen(manga: DataBase.mangas[index-1])),);
}, },
child: Center(child: dataBase.getMangaViews()[index-1]),), child: Center(child: dataBase.getMangaViews()[index-1]),),
); );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment