Résolution de toutes les erreurs pour le build, toutes les fonctionnalités ne sont quand même pas mise à jour

remotes/origin/database-api-implementation
Félix MIELCAREK 2 years ago committed by felixmielcarek
parent 2b1ad41178
commit 2ca2d71067

@ -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<Spot> getSpots() => _datas.spots;
List<Spot> getSpots() => _data.spots;
setSpots() async {
_datas.spots = await Location.sendCurrentLocation();
_data.spots = await Location.sendCurrentLocation();
}
Map<Music, DateTime> getDiscoveries() => _datas.discoveries;
LinkedHashMap<Music, DateTime> getDiscoveries() => _data.discoveries;
setDiscoveries() async {
Map<String, DateTime> tmpData = await _api.requests.getPlaylistTracks();
Map<Music, DateTime> tmpCast = {};
LinkedHashMap<String, DateTime> tmpData =
await _api.requests.getPlaylistTracks();
LinkedHashMap<Music, DateTime> 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<Music> 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) {

@ -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<Music, DateTime> discoveries;
List<Spot> spots;
Music userCurrentMusic;
LiveDatas() {}
class LiveData {
bool discoveriesSortChoice = true;
late LinkedHashMap<Music, DateTime> discoveries;
late List<Spot> spots;
late Music userCurrentMusic;
}

@ -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),

@ -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,11 +149,9 @@ 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 url = Uri.https('api.spotify.com', 'v1/playlists/$idPlaylist/tracks');
var jsonVar = jsonEncode(<String, List>{
'tracks': [
{'uri': 'spotify:track:$idTrack'}
@ -166,9 +165,8 @@ class ApiSpotifyRequests extends HttpResponseVerification {
body: jsonVar));
}
}
}
Future<Map<String, DateTime>> getPlaylistTracks() async {
Future<LinkedHashMap<String, DateTime>> 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<String, DateTime> mapRes = {};
LinkedHashMap<String, DateTime> mapRes = LinkedHashMap();
decodedResponse['items'].toList().forEach((elem) =>
{mapRes[elem['track']['id']] = DateTime.parse(elem['added_at'])});
return mapRes;

@ -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<DiscoveryList> {
@override
Widget build(BuildContext context) {
var listDiscoveries = MyApp.controller.getDiscoveries();
late LinkedHashMap<Music, DateTime> 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<DiscoveryList> {
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<DiscoveryList> {
placeholder:
"assets/images/loadingPlaceholder.gif",
image: MyApp.controller
.getDiscoveries()[reversedIndex]
.getDiscoveries()
.keys
.toList()[reversedIndex]
.linkCover),
),
Container(
@ -208,7 +218,9 @@ class _DiscoveryListState extends State<DiscoveryList> {
children: [
Text(
MyApp.controller
.getDiscoveries()[reversedIndex]
.getDiscoveries()
.keys
.toList()[reversedIndex]
.name,
style: TextStyle(
fontFamily: 'DMSans',
@ -219,7 +231,9 @@ class _DiscoveryListState extends State<DiscoveryList> {
),
Text(
MyApp.controller
.getDiscoveries()[reversedIndex]
.getDiscoveries()
.keys
.toList()[reversedIndex]
.artist,
style: TextStyle(
fontFamily: 'DMSans',

@ -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';
@ -56,8 +53,7 @@ class _MainPageProfilState extends State<MainPageProfil> {
fontSize: 25,
fontWeight: FontWeight.w600,
color: Colors.white,
fontFamily: "DMSans")),
),
fontFamily: "DMSans"))),
Container(
margin: const EdgeInsets.fromLTRB(0, 10, 0, 10),
height: height * 0.14,
@ -159,7 +155,8 @@ class _MainPageProfilState extends State<MainPageProfil> {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const DisplayInfoWidget()));
builder: (context) =>
const DisplayInfoWidget()));
},
child: Row(
children: [
@ -192,8 +189,7 @@ class _MainPageProfilState extends State<MainPageProfil> {
height: height * 0.27,
width: double.infinity,
margin: const EdgeInsets.fromLTRB(30, 15, 30, 0),
child: Column(
children: [
child: Column(children: [
Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
@ -220,16 +216,9 @@ class _MainPageProfilState extends State<MainPageProfil> {
width: 25,
height: 25,
child: riv.RiveAnimation.asset(
'assets/images/playing_animation.riv'),
),
),
],
),
FutureBuilder(
future: getData(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
return Container(
'assets/images/playing_animation.riv')))
]),
Container(
margin: const EdgeInsets.fromLTRB(0, 10, 0, 0),
height: height * 0.14,
decoration: BoxDecoration(
@ -241,158 +230,86 @@ class _MainPageProfilState extends State<MainPageProfil> {
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Container(
margin:
const EdgeInsets.fromLTRB(15, 0, 0, 0),
margin: const EdgeInsets.fromLTRB(
15, 0, 0, 0),
child: ClipRRect(
borderRadius: BorderRadius.circular(10),
child: Image.network(
snapshot.data!.linkCover,
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),
margin: const EdgeInsets.fromLTRB(
12, 20, 0, 0),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
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,
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,
MyApp.controller
.getCurrentMusic()
.artist,
style: const TextStyle(
fontSize: 16,
fontWeight: FontWeight.w400,
color: Colors.grey),
),
],
),
)
],
),
);
} 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),
),
),
],
),
)
],
),
);
}
}),
],
),
),
color: Colors.grey))
])),
const Spacer(),
Container(
height: 55,
width: double.infinity,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10.0),
borderRadius:
BorderRadius.circular(10.0),
color: Colors.transparent,
),
margin: const EdgeInsets.fromLTRB(30, 0, 30, 0),
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),
const Color(0xFFD9D9D9)
.withOpacity(0.08),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10.0),
borderRadius:
BorderRadius.circular(
10.0),
), // background// foreground
),
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const SettingsWidget()))
.then((value) => setState(() {
username =
MyApp.controller.getIdDafl().toString();
builder: (context) =>
const SettingsWidget()))
.then(
(value) => setState(() {
username = MyApp
.controller
.getIdDafl()
.toString();
}));
},
child: Row(
children: [
child: Row(children: [
const Icon(
Icons.settings,
color: Colors.white,
@ -406,22 +323,20 @@ class _MainPageProfilState extends State<MainPageProfil> {
style: TextStyle(
color: Colors.white,
fontSize: 17,
fontWeight: FontWeight.w400),
fontWeight:
FontWeight.w400),
textAlign: TextAlign.center,
),
const Spacer(),
Icon(
Icons.arrow_forward_ios,
color: Colors.white.withOpacity(0.3),
),
],
)),
),
),
const Spacer(),
],
),
),
);
color: Colors.white
.withOpacity(0.3),
)
])))),
const Spacer()
]))
]))
])));
}
}

Loading…
Cancel
Save