Skip to content
Snippets Groups Projects
Commit 4a2d8639 authored by Benoît Harrault's avatar Benoît Harrault
Browse files

Improve refresh cards data and charts

parent 28142ac4
No related branches found
No related tags found
1 merge request!36Resolve "Improve refresh data and charts"
Pipeline #4652 passed
Showing
with 249 additions and 227 deletions
org.gradle.jvmargs=-Xmx1536M org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true android.useAndroidX=true
android.enableJetifier=true android.enableJetifier=true
app.versionName=0.0.33 app.versionName=0.0.34
app.versionCode=33 app.versionCode=34
Improve update data and charts.
Amélioration de la mise à jour des données et des graphiques.
...@@ -17,6 +17,12 @@ class DataCountsByDayCubit extends HydratedCubit<DataCountsByDayState> { ...@@ -17,6 +17,12 @@ class DataCountsByDayCubit extends HydratedCubit<DataCountsByDayState> {
return state.countsByDay; return state.countsByDay;
} }
void update(CountsByDayData? countsByDay) {
if (state.countsByDay.toString() != countsByDay.toString()) {
setValue(countsByDay);
}
}
void setValue(CountsByDayData? countsByDay) { void setValue(CountsByDayData? countsByDay) {
emit(DataCountsByDayState( emit(DataCountsByDayState(
countsByDay: countsByDay, countsByDay: countsByDay,
......
...@@ -17,6 +17,12 @@ class DataCountsByHourCubit extends HydratedCubit<DataCountsByHourState> { ...@@ -17,6 +17,12 @@ class DataCountsByHourCubit extends HydratedCubit<DataCountsByHourState> {
return state.countsByHour; return state.countsByHour;
} }
void update(CountsByHourData? countsByHour) {
if (state.countsByHour.toString() != countsByHour.toString()) {
setValue(countsByHour);
}
}
void setValue(CountsByHourData? countsByHour) { void setValue(CountsByHourData? countsByHour) {
emit(DataCountsByHourState( emit(DataCountsByHourState(
countsByHour: countsByHour, countsByHour: countsByHour,
......
...@@ -17,6 +17,12 @@ class DataDiscoveriesCubit extends HydratedCubit<DataDiscoveriesState> { ...@@ -17,6 +17,12 @@ class DataDiscoveriesCubit extends HydratedCubit<DataDiscoveriesState> {
return state.discoveries; return state.discoveries;
} }
void update(DiscoveriesData? discoveries) {
if (state.discoveries.toString() != discoveries.toString()) {
setValue(discoveries);
}
}
void setValue(DiscoveriesData? discoveries) { void setValue(DiscoveriesData? discoveries) {
emit(DataDiscoveriesState( emit(DataDiscoveriesState(
discoveries: discoveries, discoveries: discoveries,
......
...@@ -17,6 +17,12 @@ class DataStatisticsGlobalCubit extends HydratedCubit<DataStatisticsGlobalState> ...@@ -17,6 +17,12 @@ class DataStatisticsGlobalCubit extends HydratedCubit<DataStatisticsGlobalState>
return state.statisticsGlobal; return state.statisticsGlobal;
} }
void update(StatisticsGlobalData? statisticsGlobal) {
if (state.statisticsGlobal.toString() != statisticsGlobal.toString()) {
setValue(statisticsGlobal);
}
}
void setValue(StatisticsGlobalData? statisticsGlobal) { void setValue(StatisticsGlobalData? statisticsGlobal) {
emit(DataStatisticsGlobalState( emit(DataStatisticsGlobalState(
statisticsGlobal: statisticsGlobal, statisticsGlobal: statisticsGlobal,
......
...@@ -17,6 +17,12 @@ class DataStatisticsRecentCubit extends HydratedCubit<DataStatisticsRecentState> ...@@ -17,6 +17,12 @@ class DataStatisticsRecentCubit extends HydratedCubit<DataStatisticsRecentState>
return state.statisticsRecent; return state.statisticsRecent;
} }
void update(StatisticsRecentData? statisticsRecent) {
if (state.statisticsRecent.toString() != statisticsRecent.toString()) {
setValue(statisticsRecent);
}
}
void setValue(StatisticsRecentData? statisticsRecent) { void setValue(StatisticsRecentData? statisticsRecent) {
emit(DataStatisticsRecentState( emit(DataStatisticsRecentState(
statisticsRecent: statisticsRecent, statisticsRecent: statisticsRecent,
......
...@@ -17,6 +17,12 @@ class DataTimelineCubit extends HydratedCubit<DataTimelineState> { ...@@ -17,6 +17,12 @@ class DataTimelineCubit extends HydratedCubit<DataTimelineState> {
return state.timeline; return state.timeline;
} }
void update(TimelineData? timeline) {
if (state.timeline.toString() != timeline.toString()) {
setValue(timeline);
}
}
void setValue(TimelineData? timeline) { void setValue(TimelineData? timeline) {
emit(DataTimelineState( emit(DataTimelineState(
timeline: timeline, timeline: timeline,
......
...@@ -17,6 +17,12 @@ class DataTopArtistsCubit extends HydratedCubit<DataTopArtistsState> { ...@@ -17,6 +17,12 @@ class DataTopArtistsCubit extends HydratedCubit<DataTopArtistsState> {
return state.topArtists; return state.topArtists;
} }
void update(TopArtistsData? topArtists) {
if (state.topArtists.toString() != topArtists.toString()) {
setValue(topArtists);
}
}
void setValue(TopArtistsData? topArtists) { void setValue(TopArtistsData? topArtists) {
emit(DataTopArtistsState( emit(DataTopArtistsState(
topArtists: topArtists, topArtists: topArtists,
......
...@@ -2,11 +2,20 @@ import 'dart:io'; ...@@ -2,11 +2,20 @@ import 'dart:io';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:hive/hive.dart'; import 'package:hive/hive.dart';
import 'package:hydrated_bloc/hydrated_bloc.dart'; import 'package:hydrated_bloc/hydrated_bloc.dart';
import 'package:path_provider/path_provider.dart'; import 'package:path_provider/path_provider.dart';
import 'package:scrobbles/config/theme.dart'; import 'package:scrobbles/config/theme.dart';
import 'package:scrobbles/cubit/bottom_nav_cubit.dart';
import 'package:scrobbles/cubit/data_counts_by_day_cubit.dart';
import 'package:scrobbles/cubit/data_counts_by_hour_cubit.dart';
import 'package:scrobbles/cubit/data_discoveries_cubit.dart';
import 'package:scrobbles/cubit/data_statistics_global_cubit.dart';
import 'package:scrobbles/cubit/data_statistics_recent_cubit.dart';
import 'package:scrobbles/cubit/data_timeline_cubit.dart';
import 'package:scrobbles/cubit/data_top_artists_cubit.dart';
import 'package:scrobbles/ui/skeleton.dart'; import 'package:scrobbles/ui/skeleton.dart';
void main() async { void main() async {
...@@ -38,7 +47,20 @@ class MyApp extends StatelessWidget { ...@@ -38,7 +47,20 @@ class MyApp extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return MaterialApp( return MultiBlocProvider(
providers: [
BlocProvider<BottomNavCubit>(create: (context) => BottomNavCubit()),
BlocProvider<DataCountsByDayCubit>(create: (context) => DataCountsByDayCubit()),
BlocProvider<DataCountsByHourCubit>(create: (context) => DataCountsByHourCubit()),
BlocProvider<DataDiscoveriesCubit>(create: (context) => DataDiscoveriesCubit()),
BlocProvider<DataStatisticsGlobalCubit>(
create: (context) => DataStatisticsGlobalCubit()),
BlocProvider<DataStatisticsRecentCubit>(
create: (context) => DataStatisticsRecentCubit()),
BlocProvider<DataTimelineCubit>(create: (context) => DataTimelineCubit()),
BlocProvider<DataTopArtistsCubit>(create: (context) => DataTopArtistsCubit()),
],
child: MaterialApp(
title: 'Scrobbles', title: 'Scrobbles',
theme: appTheme, theme: appTheme,
home: const SkeletonScreen(), home: const SkeletonScreen(),
...@@ -48,6 +70,7 @@ class MyApp extends StatelessWidget { ...@@ -48,6 +70,7 @@ class MyApp extends StatelessWidget {
supportedLocales: context.supportedLocales, supportedLocales: context.supportedLocales,
locale: context.locale, locale: context.locale,
debugShowCheckedModeBanner: false, debugShowCheckedModeBanner: false,
),
); );
} }
} }
...@@ -18,6 +18,7 @@ class ScrobblesApi { ...@@ -18,6 +18,7 @@ class ScrobblesApi {
final response = await http.get(Uri.parse(url)); final response = await http.get(Uri.parse(url));
if (response.statusCode == 200) { if (response.statusCode == 200) {
print('ok - fetched ' + url);
return StatisticsGlobalData.fromJson(jsonDecode(response.body) as Map<String, dynamic>); return StatisticsGlobalData.fromJson(jsonDecode(response.body) as Map<String, dynamic>);
} else { } else {
throw Exception('Failed to get data from API.'); throw Exception('Failed to get data from API.');
...@@ -30,6 +31,7 @@ class ScrobblesApi { ...@@ -30,6 +31,7 @@ class ScrobblesApi {
final response = await http.get(Uri.parse(url)); final response = await http.get(Uri.parse(url));
if (response.statusCode == 200) { if (response.statusCode == 200) {
print('ok - fetched ' + url);
return StatisticsRecentData.fromJson(jsonDecode(response.body) as Map<String, dynamic>); return StatisticsRecentData.fromJson(jsonDecode(response.body) as Map<String, dynamic>);
} else { } else {
throw Exception('Failed to get data from API.'); throw Exception('Failed to get data from API.');
...@@ -42,6 +44,7 @@ class ScrobblesApi { ...@@ -42,6 +44,7 @@ class ScrobblesApi {
final response = await http.get(Uri.parse(url)); final response = await http.get(Uri.parse(url));
if (response.statusCode == 200) { if (response.statusCode == 200) {
print('ok - fetched ' + url);
return TimelineData.fromJson(jsonDecode(response.body) as Map<String, dynamic>); return TimelineData.fromJson(jsonDecode(response.body) as Map<String, dynamic>);
} else { } else {
throw Exception('Failed to get data from API.'); throw Exception('Failed to get data from API.');
...@@ -54,6 +57,7 @@ class ScrobblesApi { ...@@ -54,6 +57,7 @@ class ScrobblesApi {
final response = await http.get(Uri.parse(url)); final response = await http.get(Uri.parse(url));
if (response.statusCode == 200) { if (response.statusCode == 200) {
print('ok - fetched ' + url);
return CountsByDayData.fromJson(jsonDecode(response.body) as Map<String, dynamic>); return CountsByDayData.fromJson(jsonDecode(response.body) as Map<String, dynamic>);
} else { } else {
throw Exception('Failed to get data from API.'); throw Exception('Failed to get data from API.');
...@@ -66,6 +70,7 @@ class ScrobblesApi { ...@@ -66,6 +70,7 @@ class ScrobblesApi {
final response = await http.get(Uri.parse(url)); final response = await http.get(Uri.parse(url));
if (response.statusCode == 200) { if (response.statusCode == 200) {
print('ok - fetched ' + url);
return CountsByHourData.fromJson(jsonDecode(response.body) as Map<String, dynamic>); return CountsByHourData.fromJson(jsonDecode(response.body) as Map<String, dynamic>);
} else { } else {
throw Exception('Failed to get data from API.'); throw Exception('Failed to get data from API.');
...@@ -78,6 +83,7 @@ class ScrobblesApi { ...@@ -78,6 +83,7 @@ class ScrobblesApi {
final response = await http.get(Uri.parse(url)); final response = await http.get(Uri.parse(url));
if (response.statusCode == 200) { if (response.statusCode == 200) {
print('ok - fetched ' + url);
return DiscoveriesData.fromJson(jsonDecode(response.body) as Map<String, dynamic>); return DiscoveriesData.fromJson(jsonDecode(response.body) as Map<String, dynamic>);
} else { } else {
throw Exception('Failed to get data from API.'); throw Exception('Failed to get data from API.');
...@@ -90,6 +96,7 @@ class ScrobblesApi { ...@@ -90,6 +96,7 @@ class ScrobblesApi {
final response = await http.get(Uri.parse(url)); final response = await http.get(Uri.parse(url));
if (response.statusCode == 200) { if (response.statusCode == 200) {
print('ok - fetched ' + url);
return TopArtistsData.fromJson(jsonDecode(response.body) as Map<String, dynamic>); return TopArtistsData.fromJson(jsonDecode(response.body) as Map<String, dynamic>);
} else { } else {
throw Exception('Failed to get data from API.'); throw Exception('Failed to get data from API.');
......
...@@ -2,14 +2,9 @@ import 'package:flutter/material.dart'; ...@@ -2,14 +2,9 @@ import 'package:flutter/material.dart';
import 'package:scrobbles/ui/widgets/cards/discoveries.dart'; import 'package:scrobbles/ui/widgets/cards/discoveries.dart';
class ScreenDiscoveries extends StatefulWidget { class ScreenDiscoveries extends StatelessWidget {
const ScreenDiscoveries({super.key}); const ScreenDiscoveries({super.key});
@override
State<ScreenDiscoveries> createState() => _ScreenDiscoveriesState();
}
class _ScreenDiscoveriesState extends State<ScreenDiscoveries> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Material( return Material(
......
...@@ -5,14 +5,9 @@ import 'package:scrobbles/ui/widgets/cards/statistics_recent.dart'; ...@@ -5,14 +5,9 @@ import 'package:scrobbles/ui/widgets/cards/statistics_recent.dart';
import 'package:scrobbles/ui/widgets/cards/timeline.dart'; import 'package:scrobbles/ui/widgets/cards/timeline.dart';
import 'package:scrobbles/ui/widgets/cards/top_artists.dart'; import 'package:scrobbles/ui/widgets/cards/top_artists.dart';
class ScreenHome extends StatefulWidget { class ScreenHome extends StatelessWidget {
const ScreenHome({super.key}); const ScreenHome({super.key});
@override
State<ScreenHome> createState() => _ScreenHomeState();
}
class _ScreenHomeState extends State<ScreenHome> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Material( return Material(
......
...@@ -3,14 +3,9 @@ import 'package:flutter/material.dart'; ...@@ -3,14 +3,9 @@ import 'package:flutter/material.dart';
import 'package:scrobbles/ui/widgets/cards/counts_by_day.dart'; import 'package:scrobbles/ui/widgets/cards/counts_by_day.dart';
import 'package:scrobbles/ui/widgets/cards/counts_by_hour.dart'; import 'package:scrobbles/ui/widgets/cards/counts_by_hour.dart';
class ScreenStatistics extends StatefulWidget { class ScreenStatistics extends StatelessWidget {
const ScreenStatistics({super.key}); const ScreenStatistics({super.key});
@override
State<ScreenStatistics> createState() => _ScreenStatisticsState();
}
class _ScreenStatisticsState extends State<ScreenStatistics> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Material( return Material(
......
...@@ -25,20 +25,13 @@ class _SkeletonScreenState extends State<SkeletonScreen> { ...@@ -25,20 +25,13 @@ class _SkeletonScreenState extends State<SkeletonScreen> {
const ScreenStatistics(), const ScreenStatistics(),
]; ];
return BlocProvider<BottomNavCubit>(
create: (BuildContext context) => BottomNavCubit(),
child: BlocBuilder<BottomNavCubit, int>(
builder: (BuildContext context, int state) {
return Scaffold( return Scaffold(
appBar: StandardAppBar(notifyParent: refresh), appBar: StandardAppBar(notifyParent: refresh),
extendBodyBehindAppBar: false, extendBodyBehindAppBar: false,
body: Swiper( body: Swiper(
itemCount: BlocProvider.of<BottomNavCubit>(context).pagesCount, itemCount: BlocProvider.of<BottomNavCubit>(context).pagesCount,
itemBuilder: (BuildContext context, int index) { itemBuilder: (BuildContext context, int index) {
return AnimatedSwitcher( return pageNavigation.elementAt(index);
duration: const Duration(milliseconds: 300),
child: pageNavigation.elementAt(index),
);
}, },
pagination: SwiperPagination( pagination: SwiperPagination(
builder: SwiperCustomPagination( builder: SwiperCustomPagination(
...@@ -55,17 +48,9 @@ class _SkeletonScreenState extends State<SkeletonScreen> { ...@@ -55,17 +48,9 @@ class _SkeletonScreenState extends State<SkeletonScreen> {
), ),
backgroundColor: Theme.of(context).colorScheme.background, backgroundColor: Theme.of(context).colorScheme.background,
); );
},
),
);
} }
refresh() { refresh() {
void rebuild(Element el) { setState(() {});
el.markNeedsBuild();
el.visitChildren(rebuild);
}
(context as Element).visitChildren(rebuild);
} }
} }
...@@ -19,9 +19,7 @@ class CardCountsByDay extends StatelessWidget { ...@@ -19,9 +19,7 @@ class CardCountsByDay extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
final int daysCount = Settings.countsByDayDaysCount; final int daysCount = Settings.countsByDayDaysCount;
return BlocProvider<DataCountsByDayCubit>( return BlocBuilder<DataCountsByDayCubit, DataCountsByDayState>(
create: (BuildContext context) => DataCountsByDayCubit(),
child: BlocBuilder<DataCountsByDayCubit, DataCountsByDayState>(
builder: (BuildContext context, DataCountsByDayState state) { builder: (BuildContext context, DataCountsByDayState state) {
return CardContent( return CardContent(
color: Theme.of(context).colorScheme.surface, color: Theme.of(context).colorScheme.surface,
...@@ -37,7 +35,6 @@ class CardCountsByDay extends StatelessWidget { ...@@ -37,7 +35,6 @@ class CardCountsByDay extends StatelessWidget {
), ),
); );
}, },
),
); );
} }
...@@ -47,9 +44,7 @@ class CardCountsByDay extends StatelessWidget { ...@@ -47,9 +44,7 @@ class CardCountsByDay extends StatelessWidget {
late Future<CountsByDayData> futureCountsByDay = ScrobblesApi.fetchCountsByDay(daysCount); late Future<CountsByDayData> futureCountsByDay = ScrobblesApi.fetchCountsByDay(daysCount);
return BlocProvider<DataCountsByDayCubit>( return BlocBuilder<DataCountsByDayCubit, DataCountsByDayState>(
create: (BuildContext context) => DataCountsByDayCubit(),
child: BlocBuilder<DataCountsByDayCubit, DataCountsByDayState>(
builder: (BuildContext context, DataCountsByDayState state) { builder: (BuildContext context, DataCountsByDayState state) {
return FutureBuilder<CountsByDayData>( return FutureBuilder<CountsByDayData>(
future: futureCountsByDay, future: futureCountsByDay,
...@@ -58,12 +53,12 @@ class CardCountsByDay extends StatelessWidget { ...@@ -58,12 +53,12 @@ class CardCountsByDay extends StatelessWidget {
return ShowErrorWidget(message: '${snapshot.error}'); return ShowErrorWidget(message: '${snapshot.error}');
} }
BlocProvider.of<DataCountsByDayCubit>(context).setValue(snapshot.data); BlocProvider.of<DataCountsByDayCubit>(context).update(snapshot.data);
return !snapshot.hasData ? loading : done; return !snapshot.hasData ? loading : done;
}, },
); );
}, },
),
); );
} }
} }
...@@ -19,9 +19,7 @@ class CardCountsByHour extends StatelessWidget { ...@@ -19,9 +19,7 @@ class CardCountsByHour extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
final int daysCount = Settings.countsByHourDaysCount; final int daysCount = Settings.countsByHourDaysCount;
return BlocProvider<DataCountsByHourCubit>( return BlocBuilder<DataCountsByHourCubit, DataCountsByHourState>(
create: (BuildContext context) => DataCountsByHourCubit(),
child: BlocBuilder<DataCountsByHourCubit, DataCountsByHourState>(
builder: (BuildContext context, DataCountsByHourState state) { builder: (BuildContext context, DataCountsByHourState state) {
return CardContent( return CardContent(
color: Theme.of(context).colorScheme.surface, color: Theme.of(context).colorScheme.surface,
...@@ -37,7 +35,6 @@ class CardCountsByHour extends StatelessWidget { ...@@ -37,7 +35,6 @@ class CardCountsByHour extends StatelessWidget {
), ),
); );
}, },
),
); );
} }
...@@ -48,9 +45,7 @@ class CardCountsByHour extends StatelessWidget { ...@@ -48,9 +45,7 @@ class CardCountsByHour extends StatelessWidget {
late Future<CountsByHourData> futureCountsByHour = late Future<CountsByHourData> futureCountsByHour =
ScrobblesApi.fetchCountsByHour(daysCount); ScrobblesApi.fetchCountsByHour(daysCount);
return BlocProvider<DataCountsByHourCubit>( return BlocBuilder<DataCountsByHourCubit, DataCountsByHourState>(
create: (BuildContext context) => DataCountsByHourCubit(),
child: BlocBuilder<DataCountsByHourCubit, DataCountsByHourState>(
builder: (BuildContext context, DataCountsByHourState state) { builder: (BuildContext context, DataCountsByHourState state) {
return FutureBuilder<CountsByHourData>( return FutureBuilder<CountsByHourData>(
future: futureCountsByHour, future: futureCountsByHour,
...@@ -59,12 +54,12 @@ class CardCountsByHour extends StatelessWidget { ...@@ -59,12 +54,12 @@ class CardCountsByHour extends StatelessWidget {
return ShowErrorWidget(message: '${snapshot.error}'); return ShowErrorWidget(message: '${snapshot.error}');
} }
BlocProvider.of<DataCountsByHourCubit>(context).setValue(snapshot.data); BlocProvider.of<DataCountsByHourCubit>(context).update(snapshot.data);
return !snapshot.hasData ? loading : done; return !snapshot.hasData ? loading : done;
}, },
); );
}, },
),
); );
} }
} }
...@@ -20,9 +20,7 @@ class CardDiscoveries extends StatelessWidget { ...@@ -20,9 +20,7 @@ class CardDiscoveries extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
final int daysCount = Settings.discoveriesDaysCount; final int daysCount = Settings.discoveriesDaysCount;
return BlocProvider<DataDiscoveriesCubit>( return BlocBuilder<DataDiscoveriesCubit, DataDiscoveriesState>(
create: (BuildContext context) => DataDiscoveriesCubit(),
child: BlocBuilder<DataDiscoveriesCubit, DataDiscoveriesState>(
builder: (BuildContext context, DataDiscoveriesState state) { builder: (BuildContext context, DataDiscoveriesState state) {
final TextTheme textTheme = Theme.of(context).primaryTextTheme; final TextTheme textTheme = Theme.of(context).primaryTextTheme;
...@@ -44,8 +42,7 @@ class CardDiscoveries extends StatelessWidget { ...@@ -44,8 +42,7 @@ class CardDiscoveries extends StatelessWidget {
).tr(), ).tr(),
const SizedBox(height: 8), const SizedBox(height: 8),
ChartDiscoveriesArtists( ChartDiscoveriesArtists(
chartData: chartData: DiscoveriesData.fromJson(jsonDecode(state.discoveries.toString())),
DiscoveriesData.fromJson(jsonDecode(state.discoveries.toString())),
isLoading: false, isLoading: false,
), ),
const SizedBox(height: 8), const SizedBox(height: 8),
...@@ -55,15 +52,13 @@ class CardDiscoveries extends StatelessWidget { ...@@ -55,15 +52,13 @@ class CardDiscoveries extends StatelessWidget {
).tr(), ).tr(),
const SizedBox(height: 8), const SizedBox(height: 8),
ChartDiscoveriesTracks( ChartDiscoveriesTracks(
chartData: chartData: DiscoveriesData.fromJson(jsonDecode(state.discoveries.toString())),
DiscoveriesData.fromJson(jsonDecode(state.discoveries.toString())),
isLoading: false, isLoading: false,
), ),
], ],
), ),
); );
}, },
),
); );
} }
...@@ -73,9 +68,7 @@ class CardDiscoveries extends StatelessWidget { ...@@ -73,9 +68,7 @@ class CardDiscoveries extends StatelessWidget {
late Future<DiscoveriesData> futureDiscoveries = ScrobblesApi.fetchDiscoveries(daysCount); late Future<DiscoveriesData> futureDiscoveries = ScrobblesApi.fetchDiscoveries(daysCount);
return BlocProvider<DataDiscoveriesCubit>( return BlocBuilder<DataDiscoveriesCubit, DataDiscoveriesState>(
create: (BuildContext context) => DataDiscoveriesCubit(),
child: BlocBuilder<DataDiscoveriesCubit, DataDiscoveriesState>(
builder: (BuildContext context, DataDiscoveriesState state) { builder: (BuildContext context, DataDiscoveriesState state) {
return FutureBuilder<DiscoveriesData>( return FutureBuilder<DiscoveriesData>(
future: futureDiscoveries, future: futureDiscoveries,
...@@ -84,12 +77,12 @@ class CardDiscoveries extends StatelessWidget { ...@@ -84,12 +77,12 @@ class CardDiscoveries extends StatelessWidget {
return ShowErrorWidget(message: '${snapshot.error}'); return ShowErrorWidget(message: '${snapshot.error}');
} }
BlocProvider.of<DataDiscoveriesCubit>(context).setValue(snapshot.data); BlocProvider.of<DataDiscoveriesCubit>(context).update(snapshot.data);
return !snapshot.hasData ? loading : done; return !snapshot.hasData ? loading : done;
}, },
); );
}, },
),
); );
} }
} }
...@@ -16,9 +16,7 @@ class CardStatisticsGlobal extends StatelessWidget { ...@@ -16,9 +16,7 @@ class CardStatisticsGlobal extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return BlocProvider<DataStatisticsGlobalCubit>( return BlocBuilder<DataStatisticsGlobalCubit, DataStatisticsGlobalState>(
create: (BuildContext context) => DataStatisticsGlobalCubit(),
child: BlocBuilder<DataStatisticsGlobalCubit, DataStatisticsGlobalState>(
builder: (BuildContext context, DataStatisticsGlobalState state) { builder: (BuildContext context, DataStatisticsGlobalState state) {
return CardContent( return CardContent(
color: Theme.of(context).colorScheme.primary, color: Theme.of(context).colorScheme.primary,
...@@ -31,7 +29,6 @@ class CardStatisticsGlobal extends StatelessWidget { ...@@ -31,7 +29,6 @@ class CardStatisticsGlobal extends StatelessWidget {
), ),
); );
}, },
),
); );
} }
...@@ -42,9 +39,7 @@ class CardStatisticsGlobal extends StatelessWidget { ...@@ -42,9 +39,7 @@ class CardStatisticsGlobal extends StatelessWidget {
late Future<StatisticsGlobalData> futureStatisticsGlobal = late Future<StatisticsGlobalData> futureStatisticsGlobal =
ScrobblesApi.fetchGlobalStatistics(); ScrobblesApi.fetchGlobalStatistics();
return BlocProvider<DataStatisticsGlobalCubit>( return BlocBuilder<DataStatisticsGlobalCubit, DataStatisticsGlobalState>(
create: (BuildContext context) => DataStatisticsGlobalCubit(),
child: BlocBuilder<DataStatisticsGlobalCubit, DataStatisticsGlobalState>(
builder: (BuildContext context, DataStatisticsGlobalState dataState) { builder: (BuildContext context, DataStatisticsGlobalState dataState) {
return FutureBuilder<StatisticsGlobalData>( return FutureBuilder<StatisticsGlobalData>(
future: futureStatisticsGlobal, future: futureStatisticsGlobal,
...@@ -53,12 +48,12 @@ class CardStatisticsGlobal extends StatelessWidget { ...@@ -53,12 +48,12 @@ class CardStatisticsGlobal extends StatelessWidget {
return ShowErrorWidget(message: '${snapshot.error}'); return ShowErrorWidget(message: '${snapshot.error}');
} }
BlocProvider.of<DataStatisticsGlobalCubit>(context).setValue(snapshot.data); BlocProvider.of<DataStatisticsGlobalCubit>(context).update(snapshot.data);
return !snapshot.hasData ? loading : done; return !snapshot.hasData ? loading : done;
}, },
); );
}, },
),
); );
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment