Commit e5968573 authored by Benjamin LEROUX's avatar Benjamin LEROUX

cleanup commit

parent 28e7571f
...@@ -16,6 +16,14 @@ GridView createGrid(String title, String url){ ...@@ -16,6 +16,14 @@ GridView createGrid(String title, String url){
); );
} }
const TextStyle boldStyle = TextStyle( fontWeight: FontWeight.bold,color: Colors.black);
const TextStyle classicStyle = TextStyle(color: Colors.black);
const TextStyle homeStyle = TextStyle(fontSize: 16);
const TextStyle boldTitleStyle = TextStyle( fontWeight: FontWeight.bold,color: Colors.black,fontSize: 20);
const TextStyle classicTitleStyle = TextStyle(color: Colors.black, fontSize: 20);
const TextStyle optionStyle = TextStyle(fontSize: 30, fontWeight: FontWeight.bold);
const TextStyle titleStyle = TextStyle(fontSize: 50, fontWeight: FontWeight.bold, color: Colors.blue);
class DataBase{ class DataBase{
static List<GridView> _mangaItem = <GridView>[]; static List<GridView> _mangaItem = <GridView>[];
static List<Manga> mangas = <Manga>[]; static List<Manga> mangas = <Manga>[];
......
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_media/DataBase.dart';
class Game { class Game {
final String title; final String title;
...@@ -18,10 +19,6 @@ class Game { ...@@ -18,10 +19,6 @@ class Game {
class DetailGameScreen extends StatefulWidget { class DetailGameScreen extends StatefulWidget {
final Game game; final Game game;
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 // In the constructor, require a manga
DetailGameScreen({Key key, @required this.game}) : super(key: key); DetailGameScreen({Key key, @required this.game}) : super(key: key);
...@@ -45,8 +42,8 @@ class _DetailGameScreenState extends State<DetailGameScreen> { ...@@ -45,8 +42,8 @@ class _DetailGameScreenState extends State<DetailGameScreen> {
Container( Container(
height: 25, height: 25,
child: RichText(text: TextSpan(children: <TextSpan>[ child: RichText(text: TextSpan(children: <TextSpan>[
TextSpan(text: "Titre: ", style: DetailGameScreen.boldTitleStyle,), TextSpan(text: "Titre: ", style: boldTitleStyle,),
TextSpan(text: "${widget.game.title}", style: DetailGameScreen.classicTitleStyle,), TextSpan(text: "${widget.game.title}", style: classicTitleStyle,),
],),) ],),)
), ),
Container( Container(
...@@ -58,26 +55,26 @@ class _DetailGameScreenState extends State<DetailGameScreen> { ...@@ -58,26 +55,26 @@ class _DetailGameScreenState extends State<DetailGameScreen> {
children: <Widget>[ children: <Widget>[
Image.network(widget.game.url), Image.network(widget.game.url),
Align(alignment: Alignment.center, child: RichText(text: TextSpan(children: <TextSpan>[ Align(alignment: Alignment.center, child: RichText(text: TextSpan(children: <TextSpan>[
TextSpan(text: "Développeurs: ", style: DetailGameScreen.boldStyle,), TextSpan(text: "Développeurs: ", style: boldStyle,),
TextSpan(text: "${widget.game.dev}\n", style: DetailGameScreen.classicStyle,), TextSpan(text: "${widget.game.dev}\n", style: classicStyle,),
TextSpan(text: "Éditeurs: ", style: DetailGameScreen.boldStyle,), TextSpan(text: "Éditeurs: ", style: boldStyle,),
TextSpan(text: "${widget.game.editor}\n", style: DetailGameScreen.classicStyle,), TextSpan(text: "${widget.game.editor}\n", style: classicStyle,),
TextSpan(text: "Genres: ", style: DetailGameScreen.boldStyle,), TextSpan(text: "Genres: ", style: boldStyle,),
TextSpan(text: "${widget.game.genres}\n", style: DetailGameScreen.classicStyle,), TextSpan(text: "${widget.game.genres}\n", style: classicStyle,),
TextSpan(text: "Plateformes: ", style: DetailGameScreen.boldStyle,), TextSpan(text: "Plateformes: ", style: boldStyle,),
TextSpan(text: "${widget.game.plateformes}\n", style: DetailGameScreen.classicStyle,), TextSpan(text: "${widget.game.plateformes}\n", style: classicStyle,),
TextSpan(text: "Date de sortie: ", style: DetailGameScreen.boldStyle,), TextSpan(text: "Date de sortie: ", style: boldStyle,),
TextSpan(text: "${widget.game.releaseDate}\n", style: DetailGameScreen.classicStyle,), TextSpan(text: "${widget.game.releaseDate}\n", style: classicStyle,),
TextSpan(text: "Note communautaire: ", style: DetailGameScreen.boldStyle,), TextSpan(text: "Note communautaire: ", style: boldStyle,),
TextSpan(text: "${widget.game.score}\n", style: DetailGameScreen.classicStyle,), TextSpan(text: "${widget.game.score}\n", style: classicStyle,),
],),)) ],),))
]), ]),
), ),
Container( Container(
height: 400, height: 400,
child:RichText(textAlign: TextAlign.justify,text: TextSpan(children: <TextSpan>[ child:RichText(textAlign: TextAlign.justify,text: TextSpan(children: <TextSpan>[
TextSpan(text: "En bref:\n", style: DetailGameScreen.boldTitleStyle,), TextSpan(text: "En bref:\n", style: boldTitleStyle,),
TextSpan(text: "${widget.game.description}\n", style: DetailGameScreen.classicStyle,), TextSpan(text: "${widget.game.description}\n", style: classicStyle,),
],),) ],),)
)], )],
), ),
...@@ -100,4 +97,26 @@ class _DetailGameScreenState extends State<DetailGameScreen> { ...@@ -100,4 +97,26 @@ class _DetailGameScreenState extends State<DetailGameScreen> {
), ),
); );
} }
}
Widget getGameList(DataBase dataBase){
const TextStyle titleStyle2 = TextStyle(fontSize: 44, fontWeight: FontWeight.bold, color: Colors.blue);
return ListView.separated(
physics: ScrollPhysics(),
padding: const EdgeInsets.all(0),
itemCount: dataBase.getGameViews().length+1,
itemBuilder: (BuildContext context, int index) {
if(index==0) return Container(
height: 60,
child: Text('Mes jeux-vidéos',style: titleStyle2,textAlign: TextAlign.center),
);
else return Container(
height: 180,
child: InkWell( onTap: () {Navigator.push(context, MaterialPageRoute(builder: (context) => DetailGameScreen(game: DataBase.games[index-1])),);
},
child: Center(child: dataBase.getGameViews()[index-1]),),
);
},
separatorBuilder: (BuildContext context, int index) => const Divider(thickness: 5 ,color: Colors.blue, indent: 10, endIndent: 10,),
);
} }
\ No newline at end of file
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_media/DataBase.dart';
class Manga { class Manga {
final String title; final String title;
...@@ -19,10 +20,6 @@ class Manga { ...@@ -19,10 +20,6 @@ class Manga {
class DetailMangaScreen extends StatefulWidget { class DetailMangaScreen extends StatefulWidget {
Manga manga; 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 // In the constructor, require a manga
DetailMangaScreen({Key key, @required this.manga}) : super(key: key); DetailMangaScreen({Key key, @required this.manga}) : super(key: key);
...@@ -46,16 +43,16 @@ class _DetailMangaScreenState extends State<DetailMangaScreen> { ...@@ -46,16 +43,16 @@ class _DetailMangaScreenState extends State<DetailMangaScreen> {
if(widget.manga.alternativeTitle!='') Container( if(widget.manga.alternativeTitle!='') Container(
height: 50, height: 50,
child: RichText(text: TextSpan(children: <TextSpan>[ child: RichText(text: TextSpan(children: <TextSpan>[
TextSpan(text: "Titre: ", style: DetailMangaScreen.boldTitleStyle,), TextSpan(text: "Titre: ", style: boldTitleStyle,),
TextSpan(text: "${widget.manga.title}\n", style: DetailMangaScreen.classicTitleStyle,), TextSpan(text: "${widget.manga.title}\n", style: classicTitleStyle,),
TextSpan(text: "Titre alternatif: ", style: DetailMangaScreen.boldTitleStyle,), TextSpan(text: "Titre alternatif: ", style: boldTitleStyle,),
TextSpan(text: "${widget.manga.alternativeTitle}", style: DetailMangaScreen.classicTitleStyle,), TextSpan(text: "${widget.manga.alternativeTitle}", style: classicTitleStyle,),
],),), ],),),
)else Container( )else Container(
height: 25, height: 25,
child: RichText(text: TextSpan(children: <TextSpan>[ child: RichText(text: TextSpan(children: <TextSpan>[
TextSpan(text: "Titre: ", style: DetailMangaScreen.boldTitleStyle,), TextSpan(text: "Titre: ", style: boldTitleStyle,),
TextSpan(text: "${widget.manga.title}\n", style: DetailMangaScreen.classicTitleStyle,), TextSpan(text: "${widget.manga.title}\n", style: classicTitleStyle,),
],),), ],),),
), ),
Container( Container(
...@@ -67,26 +64,26 @@ class _DetailMangaScreenState extends State<DetailMangaScreen> { ...@@ -67,26 +64,26 @@ class _DetailMangaScreenState extends State<DetailMangaScreen> {
children: <Widget>[ children: <Widget>[
Image.network(widget.manga.url), Image.network(widget.manga.url),
Align(alignment: Alignment.center, child: RichText(text: TextSpan(children: <TextSpan>[ Align(alignment: Alignment.center, child: RichText(text: TextSpan(children: <TextSpan>[
TextSpan(text: "Auteur: ", style: DetailMangaScreen.boldStyle,), TextSpan(text: "Auteur: ", style: boldStyle,),
TextSpan(text: "${widget.manga.author}\n", style: DetailMangaScreen.classicStyle,), TextSpan(text: "${widget.manga.author}\n", style: classicStyle,),
TextSpan(text: "Genres: ", style: DetailMangaScreen.boldStyle,), TextSpan(text: "Genres: ", style: boldStyle,),
TextSpan(text: "${widget.manga.genres}\n", style: DetailMangaScreen.classicStyle,), TextSpan(text: "${widget.manga.genres}\n", style: classicStyle,),
TextSpan(text: "Statut: ", style: DetailMangaScreen.boldStyle,), TextSpan(text: "Statut: ", style: boldStyle,),
TextSpan(text: "${widget.manga.status}\n", style: DetailMangaScreen.classicStyle,), TextSpan(text: "${widget.manga.status}\n", style: classicStyle,),
TextSpan(text: "Dates: ", style: DetailMangaScreen.boldStyle,), TextSpan(text: "Dates: ", style: boldStyle,),
TextSpan(text: "${widget.manga.releaseDates}\n", style: DetailMangaScreen.classicStyle,), TextSpan(text: "${widget.manga.releaseDates}\n", style: classicStyle,),
TextSpan(text: "Volumes: ", style: DetailMangaScreen.boldStyle,), TextSpan(text: "Volumes: ", style: boldStyle,),
TextSpan(text: "${widget.manga.volumes}\n", style: DetailMangaScreen.classicStyle,), TextSpan(text: "${widget.manga.volumes}\n", style: classicStyle,),
TextSpan(text: "Note communautaire: ", style: DetailMangaScreen.boldStyle,), TextSpan(text: "Note communautaire: ", style: boldStyle,),
TextSpan(text: "${widget.manga.score}\n", style: DetailMangaScreen.classicStyle,), TextSpan(text: "${widget.manga.score}\n", style: classicStyle,),
],),)) ],),))
]), ]),
), ),
Container( Container(
height: 400, height: 400,
child:RichText(textAlign: TextAlign.justify,text: TextSpan(children: <TextSpan>[ child:RichText(textAlign: TextAlign.justify,text: TextSpan(children: <TextSpan>[
TextSpan(text: "Synopsis:\n", style: DetailMangaScreen.boldTitleStyle,), TextSpan(text: "Synopsis:\n", style: boldTitleStyle,),
TextSpan(text: "${widget.manga.description}\n", style: DetailMangaScreen.classicStyle,), TextSpan(text: "${widget.manga.description}\n", style: classicStyle,),
],),) ],),)
)], )],
), ),
...@@ -111,3 +108,24 @@ class _DetailMangaScreenState extends State<DetailMangaScreen> { ...@@ -111,3 +108,24 @@ class _DetailMangaScreenState extends State<DetailMangaScreen> {
} }
} }
Widget getMangaList(DataBase dataBase){
const TextStyle titleStyle = TextStyle(fontSize: 50, fontWeight: FontWeight.bold, color: Colors.blue);
return ListView.separated(
physics: ScrollPhysics(),
padding: const EdgeInsets.all(8),
itemCount: dataBase.getMangaViews().length+1,
itemBuilder: (BuildContext context, int index) {
if(index==0) return Container(
height: 60,
child: Text('Mes mangas',style: titleStyle,textAlign: TextAlign.center),
);
else return Container(
height: 180,
child: InkWell( onTap: () {Navigator.push(context, MaterialPageRoute(builder: (context) => DetailMangaScreen(manga: DataBase.mangas[index-1])),);
},
child: Center(child: dataBase.getMangaViews()[index-1]),),
);
},
separatorBuilder: (BuildContext context, int index) => const Divider(thickness: 5 ,color: Colors.blue, indent: 10, endIndent: 10,),
);
}
\ No newline at end of file
import 'package:flutter/cupertino.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart';
import 'DataBase.dart';
import 'Game.dart';
import 'Manga.dart';
Widget getHomeList(){
return ListView(
padding: const EdgeInsets.all(2),
physics: new NeverScrollableScrollPhysics(),
children: <Widget>[
Container(
height: 70,
child: Text('Accueil',style: titleStyle,textAlign: TextAlign.center),
),
Container(
height: 190,
padding: const EdgeInsets.fromLTRB(6, 0, 6, 0),
child: Text("Cette application est le fruit d'un TP réalisé dans le cadre de ma formation d'ingénieur à l'IMT.\n \nLe but était de créer une application mobile de gestion de média pour s'entrainer à utiliser différents Widgets.\n\nOn retrouve donc une liste de jeux vidéos et une de mangas, une page de favoris et une page d'information technique."
, style: homeStyle, textAlign: TextAlign.justify,),
),
Container(
height: 280,
child: Align(alignment: Alignment.topCenter,child: Image.network('https://i.kym-cdn.com/photos/images/newsfeed/001/739/593/45d.jpg'),
)),
]
);
}
Widget getFavList(DataBase dataBase){
return ListView.builder(
physics: ScrollPhysics(),
padding: const EdgeInsets.all(8),
itemCount: dataBase.getAll().length+1,
itemBuilder: (BuildContext context, int index) {
if(index==0) return Container(
height: 60,
child: Text('Mes Favoris',style: titleStyle,textAlign: TextAlign.center),
);
else if(dataBase.getIsSaved(dataBase.getAll()[index-1])) return Container(
height: 180,
child: InkWell( onTap: () {
if(dataBase.getAll()[index-1] is Manga)
Navigator.push(context, MaterialPageRoute(builder: (context) => DetailMangaScreen(manga: dataBase.getAll()[index-1])),);
else Navigator.push(context, MaterialPageRoute (builder: (context) => DetailGameScreen(game: dataBase.getAll()[index-1])),);
},
child: Center(child: dataBase.getAllViews()[index-1]),),
);else if(index==1 && dataBase.IsNoneSaved(dataBase.getAll())) return Container(
height: 500,
child: Center(child: Text("Aucun favoris" ,style: optionStyle,)),
);
else return Container(
height: 0,
child: Text("Empty"),
);
},
);
}
Widget getInfoList(){
return ListView(
physics: new NeverScrollableScrollPhysics(),
children: <Widget>[
Container(
height: 70,
child: Text('Informations',style: titleStyle,textAlign: TextAlign.center),
),
Container(
height: 240,
padding: const EdgeInsets.all(8),
child: RichText(text: TextSpan(children: <TextSpan>[
TextSpan(text: "Développeur: ", style: boldTitleStyle,),
TextSpan(text: "Benjamin LEROUX\n\n", style: classicTitleStyle,),
TextSpan(text: "Dates de développement: ", style: boldTitleStyle,),
TextSpan(text: "Février 2021\n\n", style: classicTitleStyle,),
TextSpan(text: "Language: ", style: boldTitleStyle,),
TextSpan(text: "Dart\n\n", style: classicTitleStyle,),
TextSpan(text: "IDE: ", style: boldTitleStyle,),
TextSpan(text: "Android Studio\n\n", style: classicTitleStyle,),
TextSpan(text: "Plateformes: ", style: boldTitleStyle,),
TextSpan(text: "Android - iOS\n\n", style: classicTitleStyle,),
TextSpan(text: "Git: ", style: boldTitleStyle,),
TextSpan(text: 'gvipers.imt-lille-douai.fr/benjamin.leroux', style: new TextStyle(color: Colors.blue, fontSize: 16),recognizer: new TapGestureRecognizer()
..onTap = () { launch('https://gvipers.imt-lille-douai.fr/benjamin.leroux/mediateque');
},
),
],
),
),
),
Container(
height: 280,
child: Align(alignment: Alignment.topCenter,child: Image.network('https://images.radio-canada.ca/q_auto,w_1250/v1/ici-info/16x9/hide-the-pain-harold-meme.jpg')),
),]
);
}
\ No newline at end of file
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_media/DataBase.dart'; import 'package:flutter_media/DataBase.dart';
import 'package:url_launcher/url_launcher.dart'; import 'package:flutter_media/OtherLists.dart';
import 'Game.dart'; import 'Game.dart';
import 'Manga.dart'; import 'Manga.dart';
...@@ -30,139 +29,17 @@ class MyStatefulWidget extends StatefulWidget { ...@@ -30,139 +29,17 @@ class MyStatefulWidget extends StatefulWidget {
_MyStatefulWidgetState createState() => _MyStatefulWidgetState(); _MyStatefulWidgetState createState() => _MyStatefulWidgetState();
} }
/// This is the private State class that goes with MyStatefulWidget. /// This is the private State class that goes with MyStatefulWidget.
class _MyStatefulWidgetState extends State<MyStatefulWidget> { class _MyStatefulWidgetState extends State<MyStatefulWidget> {
int _selectedIndex = 0; int _selectedIndex = 0;
static DataBase dataBase= new DataBase(); static DataBase dataBase= new DataBase();
static const TextStyle classicStyle =
TextStyle(fontSize: 16);
static const TextStyle optionStyle =
TextStyle(fontSize: 30, fontWeight: FontWeight.bold);
static const TextStyle titleStyle =
TextStyle(fontSize: 50, fontWeight: FontWeight.bold, color: Colors.blue);
static const TextStyle titleStyle2 =
TextStyle(fontSize: 44, fontWeight: FontWeight.bold, color: Colors.blue);
List<Widget> _widgetOptions = <Widget>[ List<Widget> _widgetOptions = <Widget>[
ListView( getHomeList(),
padding: const EdgeInsets.all(2), getGameList(dataBase),
physics: new NeverScrollableScrollPhysics(), getMangaList(dataBase),
children: <Widget>[ getFavList(dataBase),
Container( getInfoList(),
height: 70,
child: Text('Accueil',style: titleStyle,textAlign: TextAlign.center),
),
Container(
height: 190,
padding: const EdgeInsets.fromLTRB(6, 0, 6, 0),
child: Text("Cette application est le fruit d'un TP réalisé dans le cadre de ma formation d'ingénieur à l'IMT.\n \nLe but était de créer une application mobile de gestion de média pour s'entrainer à utiliser différents Widgets.\n\nOn retrouve donc une liste de jeux vidéos et une de mangas, une page de favoris et une page d'information technique."
, style: classicStyle, textAlign: TextAlign.justify,),
),
Container(
height: 280,
child: Align(alignment: Alignment.topCenter,child: Image.network('https://i.kym-cdn.com/photos/images/newsfeed/001/739/593/45d.jpg'),
)),
]
),
ListView.separated(
physics: ScrollPhysics(),
padding: const EdgeInsets.all(0),
itemCount: dataBase.getGameViews().length+1,
itemBuilder: (BuildContext context, int index) {
if(index==0) return Container(
height: 60,
child: Text('Mes jeux-vidéos',style: titleStyle2,textAlign: TextAlign.center),
);
else return Container(
height: 180,
child: InkWell( onTap: () {Navigator.push(context, MaterialPageRoute(builder: (context) => DetailGameScreen(game: DataBase.games[index-1])),);
},
child: Center(child: dataBase.getGameViews()[index-1]),),
);
},
separatorBuilder: (BuildContext context, int index) => const Divider(thickness: 5 ,color: Colors.blue, indent: 10, endIndent: 10,),
),
ListView.separated(
physics: ScrollPhysics(),
padding: const EdgeInsets.all(8),
itemCount: dataBase.getMangaViews().length+1,
itemBuilder: (BuildContext context, int index) {
if(index==0) return Container(
height: 60,
child: Text('Mes mangas',style: titleStyle,textAlign: TextAlign.center),
);
else return Container(
height: 180,
child: InkWell( onTap: () {Navigator.push(context, MaterialPageRoute(builder: (context) => DetailMangaScreen(manga: DataBase.mangas[index-1])),);
},
child: Center(child: dataBase.getMangaViews()[index-1]),),
);
},
separatorBuilder: (BuildContext context, int index) => const Divider(thickness: 5 ,color: Colors.blue, indent: 10, endIndent: 10,),
),
ListView.builder(
physics: ScrollPhysics(),
padding: const EdgeInsets.all(8),
itemCount: dataBase.getAll().length+1,
itemBuilder: (BuildContext context, int index) {
if(index==0) return Container(
height: 60,
child: Text('Mes Favoris',style: titleStyle,textAlign: TextAlign.center),
);
else if(dataBase.getIsSaved(dataBase.getAll()[index-1])) return Container(
height: 180,
child: InkWell( onTap: () {
if(dataBase.getAll()[index-1] is Manga)
Navigator.push(context, MaterialPageRoute(builder: (context) => DetailMangaScreen(manga: dataBase.getAll()[index-1])),);
else Navigator.push(context, MaterialPageRoute (builder: (context) => DetailGameScreen(game: dataBase.getAll()[index-1])),);
},
child: Center(child: dataBase.getAllViews()[index-1]),),
);else if(index==1 && dataBase.IsNoneSaved(dataBase.getAll())) return Container(
height: 500,
child: Center(child: Text("Aucun favoris" ,style: optionStyle,)),
);
else return Container(
height: 0,
child: Text("Empty"),
);
},
),
ListView(
physics: new NeverScrollableScrollPhysics(),
children: <Widget>[
Container(
height: 70,
child: Text('Informations',style: titleStyle,textAlign: TextAlign.center),
),
Container(
height: 240,
padding: const EdgeInsets.all(8),
child: RichText(text: TextSpan(children: <TextSpan>[
TextSpan(text: "Développeur: ", style: DetailMangaScreen.boldTitleStyle,),
TextSpan(text: "Benjamin LEROUX\n\n", style: DetailMangaScreen.classicTitleStyle,),
TextSpan(text: "Dates de développement: ", style: DetailMangaScreen.boldTitleStyle,),
TextSpan(text: "Février 2021\n\n", style: DetailMangaScreen.classicTitleStyle,),
TextSpan(text: "Language: ", style: DetailMangaScreen.boldTitleStyle,),
TextSpan(text: "Dart\n\n", style: DetailMangaScreen.classicTitleStyle,),
TextSpan(text: "IDE: ", style: DetailMangaScreen.boldTitleStyle,),
TextSpan(text: "Android Studio\n\n", style: DetailMangaScreen.classicTitleStyle,),
TextSpan(text: "Plateformes: ", style: DetailMangaScreen.boldTitleStyle,),
TextSpan(text: "Android - iOS\n\n", style: DetailMangaScreen.classicTitleStyle,),
TextSpan(text: "Git: ", style: DetailMangaScreen.boldTitleStyle,),
TextSpan(text: 'gvipers.imt-lille-douai.fr/benjamin.leroux', style: new TextStyle(color: Colors.blue, fontSize: 16),recognizer: new TapGestureRecognizer()
..onTap = () { launch('https://gvipers.imt-lille-douai.fr/benjamin.leroux/mediateque');
},
),
],
),
),
),
Container(
height: 280,
child: Align(alignment: Alignment.topCenter,child: Image.network('https://images.radio-canada.ca/q_auto,w_1250/v1/ici-info/16x9/hide-the-pain-harold-meme.jpg')),
),]
),
]; ];
void _onItemTapped(int index) { void _onItemTapped(int index) {
......
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