diff --git a/Sources/dafl_project_flutter/lib/controller/controller.dart b/Sources/dafl_project_flutter/lib/controller/controller.dart index 5ae7f07..6ba0afc 100644 --- a/Sources/dafl_project_flutter/lib/controller/controller.dart +++ b/Sources/dafl_project_flutter/lib/controller/controller.dart @@ -1,3 +1,4 @@ +import 'dart:collection'; import 'dart:convert'; import 'package:dafl_project_flutter/controller/live_datas.dart'; import 'package:dafl_project_flutter/model/music.dart'; @@ -10,47 +11,48 @@ import 'package:http/http.dart' as http; import '../model/user.dart'; class Controller { - ApiSpotify _api = ApiSpotify(); + final ApiSpotify _api = ApiSpotify(); late User _currentUser; final DataBaseService _dataBaseService = DataBaseService(); - final LiveDatas _datas = LiveDatas(); + final LiveData _data = LiveData(); late BuildContext navigatorKey; // - // Methods to manage datas + // Methods to manage data // - // Datas that can change + // Data that can change - bool getChoice() => _datas.discoveriesSortChoice; + bool getChoice() => _data.discoveriesSortChoice; setChoice(bool c) { - _datas.discoveriesSortChoice = c; + _data.discoveriesSortChoice = c; } - Music getCurrentMusic() => _datas.userCurrentMusic; + Music getCurrentMusic() => _data.userCurrentMusic; setCurrentMusic() async { - _datas.userCurrentMusic = + _data.userCurrentMusic = await getCompleteMusic(await _api.requests.getCurrentlyPlayingTrack()); } - List getSpots() => _datas.spots; + List getSpots() => _data.spots; setSpots() async { - _datas.spots = await Location.sendCurrentLocation(); + _data.spots = await Location.sendCurrentLocation(); } - Map getDiscoveries() => _datas.discoveries; + LinkedHashMap getDiscoveries() => _data.discoveries; setDiscoveries() async { - Map tmpData = await _api.requests.getPlaylistTracks(); - Map tmpCast = {}; + LinkedHashMap tmpData = + await _api.requests.getPlaylistTracks(); + LinkedHashMap tmpCast = LinkedHashMap(); tmpData.forEach((key, value) async { tmpCast[(await getCompleteMusic(key))] = value; }); - _datas.discoveries = tmpCast; + _data.discoveries = tmpCast; } //Data that can not change @@ -72,8 +74,8 @@ class Controller { } Future getCompleteMusic(String id) async { - Map infos = await _api.requests.getTrackInfo(id); - return Music(id, infos['name'], infos['artist'], infos['cover']); + Map info = await _api.requests.getTrackInfo(id); + return Music(id, info['name'], info['artist'], info['cover']); } removeFromPlaylist(String id) { diff --git a/Sources/dafl_project_flutter/lib/controller/live_datas.dart b/Sources/dafl_project_flutter/lib/controller/live_datas.dart index e7878ec..58264b8 100644 --- a/Sources/dafl_project_flutter/lib/controller/live_datas.dart +++ b/Sources/dafl_project_flutter/lib/controller/live_datas.dart @@ -1,14 +1,11 @@ -import 'package:dafl_project_flutter/main.dart'; +import 'dart:collection'; import '../model/music.dart'; import '../model/spot.dart'; -class LiveDatas { - bool discoveriesSortChoice = - false; //false = sort by name ; true = sort by date - Map discoveries; - List spots; - Music userCurrentMusic; - - LiveDatas() {} +class LiveData { + bool discoveriesSortChoice = true; + late LinkedHashMap discoveries; + late List spots; + late Music userCurrentMusic; } diff --git a/Sources/dafl_project_flutter/lib/main.dart b/Sources/dafl_project_flutter/lib/main.dart index 46d2b15..8047dcd 100644 --- a/Sources/dafl_project_flutter/lib/main.dart +++ b/Sources/dafl_project_flutter/lib/main.dart @@ -176,7 +176,7 @@ class CardProvider extends ChangeNotifier { mainAxisAlignment: MainAxisAlignment.center, children: [ MyApp.controller.getDiscoveries().containsKey( - MyApp.controller.currentUser.spots.last.music) + MyApp.controller.getSpots().last.music) ? const Icon( Icons.info_rounded, size: 40, @@ -190,7 +190,7 @@ class CardProvider extends ChangeNotifier { const SizedBox( width: 10, ), - MyApp.controller.getDiscoveries().contains( + MyApp.controller.getDiscoveries().containsKey( MyApp.controller.getSpots().last.music) ? const Text( "Déjà dans vos discovery", @@ -216,7 +216,7 @@ class CardProvider extends ChangeNotifier { ); if (!MyApp.controller .getDiscoveries() - .contains(MyApp.controller.getSpots().last.music)) { + .containsKey(MyApp.controller.getSpots().last.music)) { MyApp.controller.addToPlaylist(MyApp.controller.getSpots().last.music.id); notifyListeners(); } @@ -327,7 +327,7 @@ class CardProvider extends ChangeNotifier { child: ElevatedButton( onPressed: () { sendMessage(messageTextField.text, - MyApp.controller.getSpots().last.key); + MyApp.controller.getSpots().last.userId); }, style: ElevatedButton.styleFrom( backgroundColor: const Color(0xFF3F1DC3), diff --git a/Sources/dafl_project_flutter/lib/services/api/api_spotify_requests.dart b/Sources/dafl_project_flutter/lib/services/api/api_spotify_requests.dart index ffef63b..3305497 100644 --- a/Sources/dafl_project_flutter/lib/services/api/api_spotify_requests.dart +++ b/Sources/dafl_project_flutter/lib/services/api/api_spotify_requests.dart @@ -1,3 +1,4 @@ +import 'dart:collection'; import 'dart:convert'; import 'package:dafl_project_flutter/services/api/token_spotify.dart'; import 'package:http/http.dart' as http; @@ -86,11 +87,11 @@ class ApiSpotifyRequests extends HttpResponseVerification { 'Content-Type': 'application/json' })); var decodedResponse = jsonDecode(utf8.decode(response.bodyBytes)) as Map; - var daflplaylist = decodedResponse['items'] + var daflPlaylist = decodedResponse['items'] .where((element) => element['name'] == _playlistName) .toList(); - if (daflplaylist.length == 1) { - return daflplaylist[0]['uri'].substring( + if (daflPlaylist.length == 1) { + return daflPlaylist[0]['uri'].substring( 17); //17 char because format is 'spotify:playlist:MYPLAYLISTID' } return await _createPlaylist(); @@ -148,27 +149,24 @@ class ApiSpotifyRequests extends HttpResponseVerification { removeFromPlaylist(String idTrack) async { var idPlaylist = await _getPlaylistId(); - if (idPlaylist != null) { - if (await _isInPlaylist(idTrack, idPlaylist)) { - var token = await _token.getAccessToken(); - var url = - Uri.https('api.spotify.com', 'v1/playlists/$idPlaylist/tracks'); - var jsonVar = jsonEncode({ - 'tracks': [ - {'uri': 'spotify:track:$idTrack'} - ] - }); - setResponse(await http.delete(url, - headers: { - 'Authorization': '$_tokenType $token', - 'Content-Type': 'application/json' - }, - body: jsonVar)); - } + if (await _isInPlaylist(idTrack, idPlaylist)) { + var token = await _token.getAccessToken(); + var url = Uri.https('api.spotify.com', 'v1/playlists/$idPlaylist/tracks'); + var jsonVar = jsonEncode({ + 'tracks': [ + {'uri': 'spotify:track:$idTrack'} + ] + }); + setResponse(await http.delete(url, + headers: { + 'Authorization': '$_tokenType $token', + 'Content-Type': 'application/json' + }, + body: jsonVar)); } } - Future> getPlaylistTracks() async { + Future> getPlaylistTracks() async { var idPlaylist = _getPlaylistId(); var url = Uri.https('api.spotify.com', 'v1/playlists/$idPlaylist/tracks', {'fields': 'items(track(id),added_at)'}); @@ -178,7 +176,7 @@ class ApiSpotifyRequests extends HttpResponseVerification { 'Content-Type': 'application/json' })); var decodedResponse = jsonDecode(utf8.decode(response.bodyBytes)) as Map; - Map mapRes = {}; + LinkedHashMap mapRes = LinkedHashMap(); decodedResponse['items'].toList().forEach((elem) => {mapRes[elem['track']['id']] = DateTime.parse(elem['added_at'])}); return mapRes; diff --git a/Sources/dafl_project_flutter/lib/views/pages/main/w_discovery.dart b/Sources/dafl_project_flutter/lib/views/pages/main/w_discovery.dart index 7f65424..c24307e 100644 --- a/Sources/dafl_project_flutter/lib/views/pages/main/w_discovery.dart +++ b/Sources/dafl_project_flutter/lib/views/pages/main/w_discovery.dart @@ -1,5 +1,6 @@ +import 'dart:collection'; + import 'package:dafl_project_flutter/main.dart'; -import 'package:fluttericon/font_awesome5_icons.dart'; import 'package:flutter/material.dart'; import 'dart:developer' as dev; @@ -118,15 +119,20 @@ class _DiscoveryListState extends State { @override Widget build(BuildContext context) { - var listDiscoveries = MyApp.controller.getDiscoveries(); + late LinkedHashMap listDiscoveries; if (MyApp.controller.getChoice()) { - listDiscoveries.sort((a, b) { - return a.date.compareTo(b.date); - }); + //TODO : implement sort by date + listDiscoveries = LinkedHashMap(); } else { - listDiscoveries.sort((a, b) { - return a.name.compareTo(b.name); - }); + //TODO : implement sort by name + /* var sortedKeys = MyApp.controller + .getDiscoveries() + .values + .toList(growable: false) + ..sort((v1, v2) => v1.compareTo(v2)); + listDiscoveries = LinkedHashMap.fromIterable(sortedKeys, + key: (k) => k, value: (k) => sortedKeys[k]); */ + listDiscoveries = LinkedHashMap(); } return RefreshIndicator( onRefresh: () async { @@ -141,21 +147,23 @@ class _DiscoveryListState extends State { int reversedIndex = itemCount - 1 - index; return Dismissible( movementDuration: const Duration(milliseconds: 400), - key: Key(listDiscoveries[index].name), + key: Key(listDiscoveries.keys.toList()[index].name), confirmDismiss: (direction) async { if (direction == DismissDirection.endToStart) { - print(listDiscoveries[reversedIndex].id); - print(listDiscoveries[reversedIndex].name); + dev.log(listDiscoveries.keys.toList()[reversedIndex].id); + dev.log( + listDiscoveries.keys.toList()[reversedIndex].name); MyApp.controller.removeFromPlaylist( - listDiscoveries[reversedIndex].id); + listDiscoveries.keys.toList()[reversedIndex].id); listDiscoveries = MyApp.controller.getDiscoveries(); return true; } if (direction == DismissDirection.startToEnd) { - print(listDiscoveries[reversedIndex].name); - print('play'); - MyApp.controller - .playTrack(listDiscoveries[reversedIndex].id); + dev.log( + listDiscoveries.keys.toList()[reversedIndex].name); + dev.log('play'); + MyApp.controller.playTrack( + listDiscoveries.keys.toList()[reversedIndex].id); setState(() {}); } return false; @@ -194,7 +202,9 @@ class _DiscoveryListState extends State { placeholder: "assets/images/loadingPlaceholder.gif", image: MyApp.controller - .getDiscoveries()[reversedIndex] + .getDiscoveries() + .keys + .toList()[reversedIndex] .linkCover), ), Container( @@ -208,7 +218,9 @@ class _DiscoveryListState extends State { children: [ Text( MyApp.controller - .getDiscoveries()[reversedIndex] + .getDiscoveries() + .keys + .toList()[reversedIndex] .name, style: TextStyle( fontFamily: 'DMSans', @@ -219,7 +231,9 @@ class _DiscoveryListState extends State { ), Text( MyApp.controller - .getDiscoveries()[reversedIndex] + .getDiscoveries() + .keys + .toList()[reversedIndex] .artist, style: TextStyle( fontFamily: 'DMSans', diff --git a/Sources/dafl_project_flutter/lib/views/pages/main/w_profile.dart b/Sources/dafl_project_flutter/lib/views/pages/main/w_profile.dart index acd6c26..6942424 100644 --- a/Sources/dafl_project_flutter/lib/views/pages/main/w_profile.dart +++ b/Sources/dafl_project_flutter/lib/views/pages/main/w_profile.dart @@ -1,7 +1,4 @@ -import 'package:text_scroll/text_scroll.dart'; -import 'package:scroll_loop_auto_scroll/scroll_loop_auto_scroll.dart'; import '../../../main.dart'; -import '../../../model/music.dart'; import './w_settings.dart'; import './w_spot.dart'; import 'package:flutter/material.dart'; @@ -41,195 +38,187 @@ class _MainPageProfilState extends State { Widget build(BuildContext context) { double height = MediaQuery.of(context).size.height; return Container( - color: const Color(0xFF141414), - child: SizedBox( - width: double.infinity, - height: double.infinity, - child: Column( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Container( - width: double.infinity, - margin: const EdgeInsets.fromLTRB(30, 50, 0, 0), - child: const Text("Profil", - style: TextStyle( - fontSize: 25, - fontWeight: FontWeight.w600, - color: Colors.white, - fontFamily: "DMSans")), - ), - Container( - margin: const EdgeInsets.fromLTRB(0, 10, 0, 10), - height: height * 0.14, - width: height * 0.14, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(100.0), - color: Colors.blue, - border: Border.all(width: 6.0, color: Colors.white), - boxShadow: const [ - BoxShadow( - offset: Offset(0, 0), - spreadRadius: 5, - blurRadius: 10, - color: Color.fromRGBO(0, 0, 0, 1), - ), - ], - ), - child: Center( - child: Text(username[0], - style: const TextStyle( - color: Colors.white, - fontSize: 60, - fontWeight: FontWeight.w500), - textAlign: TextAlign.center))), - Text( - username, - style: const TextStyle( - color: Colors.white, - fontSize: 17, - fontWeight: FontWeight.w400), - textAlign: TextAlign.center, - ), - Container( - height: 55, - width: double.infinity, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(10.0), - color: Colors.transparent, - ), - margin: const EdgeInsets.fromLTRB(30, 40, 30, 0), - child: SizedBox( - height: 55, - width: double.infinity, - child: ElevatedButton( - style: ElevatedButton.styleFrom( - backgroundColor: - const Color(0xFFD9D9D9).withOpacity(0.08), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(10.0), - ), // background// foreground - ), - onPressed: () {}, - child: Row( - children: [ - Image.asset( - 'assets/images/fav_logo.png', - height: 25, - ), - const SizedBox( - width: 12, - ), - const Text( - "Préférences musicales", - style: TextStyle( - color: Colors.white, - fontSize: 17, - fontWeight: FontWeight.w400), - textAlign: TextAlign.center, - ), - const Spacer(), - Icon( - Icons.arrow_forward_ios, - color: Colors.white.withOpacity(0.3), - ), - ], - )), - ), - ), - Container( - height: 55, - width: double.infinity, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(10.0), - color: Colors.transparent, - ), - margin: const EdgeInsets.fromLTRB(30, 10, 30, 0), - child: SizedBox( - height: 55, - width: double.infinity, - child: ElevatedButton( - style: ElevatedButton.styleFrom( - backgroundColor: - const Color(0xFFD9D9D9).withOpacity(0.08), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(10.0), - ), // background// foreground - ), - onPressed: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => const DisplayInfoWidget())); - }, - child: Row( - children: [ - const Icon( - Icons.remove_red_eye, - color: Colors.white, - size: 30, - ), - const SizedBox( - width: 12, - ), - const Text( - "Aperçu de mon profil", + color: const Color(0xFF141414), + child: SizedBox( + width: double.infinity, + height: double.infinity, + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Container( + width: double.infinity, + margin: const EdgeInsets.fromLTRB(30, 50, 0, 0), + child: const Text("Profil", style: TextStyle( + fontSize: 25, + fontWeight: FontWeight.w600, color: Colors.white, - fontSize: 17, - fontWeight: FontWeight.w400), - textAlign: TextAlign.center, - ), - const Spacer(), - Icon( - Icons.arrow_forward_ios, - color: Colors.white.withOpacity(0.3), - ), - ], - )), - ), - ), - Container( - height: height * 0.27, - width: double.infinity, - margin: const EdgeInsets.fromLTRB(30, 15, 30, 0), - child: Column( - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.center, - children: const [ - Icon( - Icons.wifi_tethering, - color: Colors.white, - size: 35, - ), - SizedBox( - width: 10, + fontFamily: "DMSans"))), + Container( + margin: const EdgeInsets.fromLTRB(0, 10, 0, 10), + height: height * 0.14, + width: height * 0.14, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(100.0), + color: Colors.blue, + border: Border.all(width: 6.0, color: Colors.white), + boxShadow: const [ + BoxShadow( + offset: Offset(0, 0), + spreadRadius: 5, + blurRadius: 10, + color: Color.fromRGBO(0, 0, 0, 1), + ), + ], ), - Text( - "En cours d'écoute", - style: TextStyle( - color: Colors.white, - fontSize: 17, - fontWeight: FontWeight.w400), - textAlign: TextAlign.center, - ), - Padding( - padding: EdgeInsets.fromLTRB(1, 9, 0, 0), - child: SizedBox( - width: 25, - height: 25, - child: riv.RiveAnimation.asset( - 'assets/images/playing_animation.riv'), - ), - ), - ], + child: Center( + child: Text(username[0], + style: const TextStyle( + color: Colors.white, + fontSize: 60, + fontWeight: FontWeight.w500), + textAlign: TextAlign.center))), + Text( + username, + style: const TextStyle( + color: Colors.white, + fontSize: 17, + fontWeight: FontWeight.w400), + textAlign: TextAlign.center, ), - FutureBuilder( - future: getData(), - builder: (context, snapshot) { - if (snapshot.connectionState == ConnectionState.done) { - return Container( + Container( + height: 55, + width: double.infinity, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10.0), + color: Colors.transparent, + ), + margin: const EdgeInsets.fromLTRB(30, 40, 30, 0), + child: SizedBox( + height: 55, + width: double.infinity, + child: ElevatedButton( + style: ElevatedButton.styleFrom( + backgroundColor: + const Color(0xFFD9D9D9).withOpacity(0.08), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10.0), + ), // background// foreground + ), + onPressed: () {}, + child: Row( + children: [ + Image.asset( + 'assets/images/fav_logo.png', + height: 25, + ), + const SizedBox( + width: 12, + ), + const Text( + "Préférences musicales", + style: TextStyle( + color: Colors.white, + fontSize: 17, + fontWeight: FontWeight.w400), + textAlign: TextAlign.center, + ), + const Spacer(), + Icon( + Icons.arrow_forward_ios, + color: Colors.white.withOpacity(0.3), + ), + ], + )), + ), + ), + Container( + height: 55, + width: double.infinity, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10.0), + color: Colors.transparent, + ), + margin: const EdgeInsets.fromLTRB(30, 10, 30, 0), + child: SizedBox( + height: 55, + width: double.infinity, + child: ElevatedButton( + style: ElevatedButton.styleFrom( + backgroundColor: + const Color(0xFFD9D9D9).withOpacity(0.08), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10.0), + ), // background// foreground + ), + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => + const DisplayInfoWidget())); + }, + child: Row( + children: [ + const Icon( + Icons.remove_red_eye, + color: Colors.white, + size: 30, + ), + const SizedBox( + width: 12, + ), + const Text( + "Aperçu de mon profil", + style: TextStyle( + color: Colors.white, + fontSize: 17, + fontWeight: FontWeight.w400), + textAlign: TextAlign.center, + ), + const Spacer(), + Icon( + Icons.arrow_forward_ios, + color: Colors.white.withOpacity(0.3), + ), + ], + )), + ), + ), + Container( + height: height * 0.27, + width: double.infinity, + margin: const EdgeInsets.fromLTRB(30, 15, 30, 0), + child: Column(children: [ + Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.center, + children: const [ + Icon( + Icons.wifi_tethering, + color: Colors.white, + size: 35, + ), + SizedBox( + width: 10, + ), + Text( + "En cours d'écoute", + style: TextStyle( + color: Colors.white, + fontSize: 17, + fontWeight: FontWeight.w400), + textAlign: TextAlign.center, + ), + Padding( + padding: EdgeInsets.fromLTRB(1, 9, 0, 0), + child: SizedBox( + width: 25, + height: 25, + child: riv.RiveAnimation.asset( + 'assets/images/playing_animation.riv'))) + ]), + Container( margin: const EdgeInsets.fromLTRB(0, 10, 0, 0), height: height * 0.14, decoration: BoxDecoration( @@ -237,191 +226,117 @@ class _MainPageProfilState extends State { color: const Color(0xFFD9D9D9).withOpacity(0.08), ), child: Row( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Container( - margin: - const EdgeInsets.fromLTRB(15, 0, 0, 0), - child: ClipRRect( - borderRadius: BorderRadius.circular(10), - child: Image.network( - snapshot.data!.linkCover, - height: 90, - width: 90, - ))), - Container( - margin: - const EdgeInsets.fromLTRB(12, 20, 0, 0), - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ - snapshot.data!.name.length > 22 - ? SizedBox( - width: 220, - child: ScrollLoopAutoScroll( - delayAfterScrollInput: - const Duration(seconds: 1), - delay: - const Duration(seconds: 1), - duration: const Duration( - seconds: 100), - scrollDirection: - Axis.horizontal, - child: Text( - snapshot.data!.name, - style: const TextStyle( - fontSize: 20, - color: Colors.white, - fontWeight: - FontWeight.bold), - ), - ), - ) - : Text( - snapshot.data!.name, + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Container( + margin: const EdgeInsets.fromLTRB( + 15, 0, 0, 0), + child: ClipRRect( + borderRadius: + BorderRadius.circular(15), + child: FadeInImage.assetNetwork( + height: 90, + width: 90, + placeholder: + "assets/images/loadingPlaceholder.gif", + image: MyApp.controller + .getCurrentMusic() + .linkCover))), + Container( + margin: const EdgeInsets.fromLTRB( + 12, 20, 0, 0), + child: Column( + mainAxisAlignment: + MainAxisAlignment.start, + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Text( + MyApp.controller + .getCurrentMusic() + .name, style: const TextStyle( - fontSize: 20, - color: Colors.white, - fontWeight: FontWeight.bold), + fontSize: 18, + fontWeight: FontWeight.w500, + color: Colors.white), ), - Text( - snapshot.data!.artist, - style: const TextStyle( - fontSize: 16, - fontWeight: FontWeight.w400, - color: Colors.grey), + Text( + MyApp.controller + .getCurrentMusic() + .artist, + style: const TextStyle( + fontSize: 16, + fontWeight: FontWeight.w400, + color: Colors.grey)) + ])), + const Spacer(), + Container( + height: 55, + width: double.infinity, + decoration: BoxDecoration( + borderRadius: + BorderRadius.circular(10.0), + color: Colors.transparent, ), - ], - ), - ) - ], - ), - ); - } else { - return Container( - margin: const EdgeInsets.fromLTRB(0, 10, 0, 0), - height: height * 0.14, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(15.0), - color: const Color(0xFFD9D9D9).withOpacity(0.08), - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Container( - margin: - const EdgeInsets.fromLTRB(15, 0, 0, 0), - child: ClipRRect( - borderRadius: BorderRadius.circular(10), - child: Image.asset( - "assets/images/loadingPlaceholder.gif", - height: 90, - width: 90))), - Container( - margin: - const EdgeInsets.fromLTRB(12, 20, 0, 0), - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ - Container( - width: 150, - height: 20, - decoration: BoxDecoration( - borderRadius: - BorderRadius.circular(5.0), - color: Colors.grey.withOpacity(0.7), - ), - ), - const SizedBox( - height: 10, - ), - Container( - width: 100, - height: 20, - decoration: BoxDecoration( - borderRadius: - BorderRadius.circular(5.0), - color: Colors.grey.withOpacity(0.4), - ), - ), - ], - ), - ) - ], - ), - ); - } - }), - ], - ), - ), - const Spacer(), - Container( - height: 55, - width: double.infinity, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(10.0), - color: Colors.transparent, - ), - margin: const EdgeInsets.fromLTRB(30, 0, 30, 0), - child: SizedBox( - height: 55, - width: double.infinity, - child: ElevatedButton( - style: ElevatedButton.styleFrom( - backgroundColor: - const Color(0xFFD9D9D9).withOpacity(0.08), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(10.0), - ), // background// foreground - ), - onPressed: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => const SettingsWidget())) - .then((value) => setState(() { - username = - MyApp.controller.getIdDafl().toString(); - })); - }, - child: Row( - children: [ - const Icon( - Icons.settings, - color: Colors.white, - size: 30, - ), - const SizedBox( - width: 12, - ), - const Text( - "Paramètres", - style: TextStyle( - color: Colors.white, - fontSize: 17, - fontWeight: FontWeight.w400), - textAlign: TextAlign.center, - ), - const Spacer(), - Icon( - Icons.arrow_forward_ios, - color: Colors.white.withOpacity(0.3), - ), - ], - )), - ), - ), - const Spacer(), - ], - ), - ), - ); + margin: const EdgeInsets.fromLTRB( + 30, 0, 30, 0), + child: SizedBox( + height: 55, + width: double.infinity, + child: ElevatedButton( + style: ElevatedButton.styleFrom( + backgroundColor: + const Color(0xFFD9D9D9) + .withOpacity(0.08), + shape: RoundedRectangleBorder( + borderRadius: + BorderRadius.circular( + 10.0), + ), // background// foreground + ), + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => + const SettingsWidget())) + .then( + (value) => setState(() { + username = MyApp + .controller + .getIdDafl() + .toString(); + })); + }, + child: Row(children: [ + const Icon( + Icons.settings, + color: Colors.white, + size: 30, + ), + const SizedBox( + width: 12, + ), + const Text( + "Paramètres", + style: TextStyle( + color: Colors.white, + fontSize: 17, + fontWeight: + FontWeight.w400), + textAlign: TextAlign.center, + ), + const Spacer(), + Icon( + Icons.arrow_forward_ios, + color: Colors.white + .withOpacity(0.3), + ) + ])))), + const Spacer() + ])) + ])) + ]))); } }