Skip to content

Commit

Permalink
Improve progress
Browse files Browse the repository at this point in the history
  • Loading branch information
cp-pratik-k committed Apr 2, 2024
1 parent 3b819c1 commit 6d46d78
Show file tree
Hide file tree
Showing 10 changed files with 409 additions and 161 deletions.
3 changes: 3 additions & 0 deletions app/lib/ui/flow/home/home_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ class _HomeScreenState extends ConsumerState<HomeScreen> {
titleWidget: _titleWidget(context: context),
actions: [
ActionButton(
backgroundColor: context.colorScheme.containerNormalOnSurface,
onPressed: () {
AppRouter.accounts.push(context);
},
Expand All @@ -69,6 +70,8 @@ class _HomeScreenState extends ConsumerState<HomeScreen> {
size: 18,
),
),
if(!Platform.isIOS && !Platform.isMacOS)
const SizedBox(width: 16),
],
body: _body(context: context),
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ class NetworkImagePreview extends ConsumerWidget {
final state = ref.watch(networkImagePreviewStateNotifierProvider);

if (state.loading) {
return const Center(child: AppCircularProgressIndicator());
return Center(child: AppCircularProgressIndicator(value: state.progress));
} else if (state.mediaBytes != null) {
return Hero(
tag: media,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import 'dart:async';

import 'package:data/models/media_content/media_content.dart';
import 'package:data/services/google_drive_service.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
Expand All @@ -13,6 +15,7 @@ final networkImagePreviewStateNotifierProvider = StateNotifierProvider<
class NetworkImagePreviewStateNotifier
extends StateNotifier<NetworkImagePreviewState> {
final GoogleDriveService _googleDriveServices;
late StreamSubscription _subscription;

NetworkImagePreviewStateNotifier(this._googleDriveServices)
: super(const NetworkImagePreviewState());
Expand All @@ -22,15 +25,43 @@ class NetworkImagePreviewStateNotifier
state = state.copyWith(loading: true, error: null);
final mediaContent = await _googleDriveServices.fetchMediaBytes(mediaId);
final mediaByte = <int>[];
await for (var mediaBytes in mediaContent.stream) {
mediaByte.addAll(mediaBytes);
}
state = state.copyWith(
mediaContent: mediaContent, mediaBytes: mediaByte, loading: false);
final length = mediaContent.length ?? 0;

_subscription = mediaContent.stream.listen(
(byteChunk) {
mediaByte.addAll(byteChunk);
state = state.copyWith(
progress: length <= 0 ? 0 : mediaByte.length / length);
},
onDone: () {
state = state.copyWith(
mediaContent: mediaContent,
mediaBytes: mediaByte,
loading: false,
);
_subscription.cancel();
},
onError: (error) {
state = state.copyWith(
error: error,
loading: false,
);
_subscription.cancel();
},
);
} catch (error) {
state = state.copyWith(error: error, loading: false);
state = state.copyWith(
error: error,
loading: false,
);
}
}

@override
void dispose() {
_subscription.cancel();
super.dispose();
}
}

@freezed
Expand All @@ -39,6 +70,7 @@ class NetworkImagePreviewState with _$NetworkImagePreviewState {
@Default(false) bool loading,
AppMediaContent? mediaContent,
List<int>? mediaBytes,
@Default(0.0) double progress,
Object? error,
}) = _NetworkImagePreviewState;
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ mixin _$NetworkImagePreviewState {
bool get loading => throw _privateConstructorUsedError;
AppMediaContent? get mediaContent => throw _privateConstructorUsedError;
List<int>? get mediaBytes => throw _privateConstructorUsedError;
double get progress => throw _privateConstructorUsedError;
Object? get error => throw _privateConstructorUsedError;

@JsonKey(ignore: true)
Expand All @@ -36,6 +37,7 @@ abstract class $NetworkImagePreviewStateCopyWith<$Res> {
{bool loading,
AppMediaContent? mediaContent,
List<int>? mediaBytes,
double progress,
Object? error});

$AppMediaContentCopyWith<$Res>? get mediaContent;
Expand All @@ -58,6 +60,7 @@ class _$NetworkImagePreviewStateCopyWithImpl<$Res,
Object? loading = null,
Object? mediaContent = freezed,
Object? mediaBytes = freezed,
Object? progress = null,
Object? error = freezed,
}) {
return _then(_value.copyWith(
Expand All @@ -73,6 +76,10 @@ class _$NetworkImagePreviewStateCopyWithImpl<$Res,
? _value.mediaBytes
: mediaBytes // ignore: cast_nullable_to_non_nullable
as List<int>?,
progress: null == progress
? _value.progress
: progress // ignore: cast_nullable_to_non_nullable
as double,
error: freezed == error ? _value.error : error,
) as $Val);
}
Expand Down Expand Up @@ -103,6 +110,7 @@ abstract class _$$NetworkImagePreviewStateImplCopyWith<$Res>
{bool loading,
AppMediaContent? mediaContent,
List<int>? mediaBytes,
double progress,
Object? error});

@override
Expand All @@ -125,6 +133,7 @@ class __$$NetworkImagePreviewStateImplCopyWithImpl<$Res>
Object? loading = null,
Object? mediaContent = freezed,
Object? mediaBytes = freezed,
Object? progress = null,
Object? error = freezed,
}) {
return _then(_$NetworkImagePreviewStateImpl(
Expand All @@ -140,6 +149,10 @@ class __$$NetworkImagePreviewStateImplCopyWithImpl<$Res>
? _value._mediaBytes
: mediaBytes // ignore: cast_nullable_to_non_nullable
as List<int>?,
progress: null == progress
? _value.progress
: progress // ignore: cast_nullable_to_non_nullable
as double,
error: freezed == error ? _value.error : error,
));
}
Expand All @@ -152,6 +165,7 @@ class _$NetworkImagePreviewStateImpl implements _NetworkImagePreviewState {
{this.loading = false,
this.mediaContent,
final List<int>? mediaBytes,
this.progress = 0.0,
this.error})
: _mediaBytes = mediaBytes;

Expand All @@ -170,12 +184,15 @@ class _$NetworkImagePreviewStateImpl implements _NetworkImagePreviewState {
return EqualUnmodifiableListView(value);
}

@override
@JsonKey()
final double progress;
@override
final Object? error;

@override
String toString() {
return 'NetworkImagePreviewState(loading: $loading, mediaContent: $mediaContent, mediaBytes: $mediaBytes, error: $error)';
return 'NetworkImagePreviewState(loading: $loading, mediaContent: $mediaContent, mediaBytes: $mediaBytes, progress: $progress, error: $error)';
}

@override
Expand All @@ -188,6 +205,8 @@ class _$NetworkImagePreviewStateImpl implements _NetworkImagePreviewState {
other.mediaContent == mediaContent) &&
const DeepCollectionEquality()
.equals(other._mediaBytes, _mediaBytes) &&
(identical(other.progress, progress) ||
other.progress == progress) &&
const DeepCollectionEquality().equals(other.error, error));
}

Expand All @@ -197,6 +216,7 @@ class _$NetworkImagePreviewStateImpl implements _NetworkImagePreviewState {
loading,
mediaContent,
const DeepCollectionEquality().hash(_mediaBytes),
progress,
const DeepCollectionEquality().hash(error));

@JsonKey(ignore: true)
Expand All @@ -212,6 +232,7 @@ abstract class _NetworkImagePreviewState implements NetworkImagePreviewState {
{final bool loading,
final AppMediaContent? mediaContent,
final List<int>? mediaBytes,
final double progress,
final Object? error}) = _$NetworkImagePreviewStateImpl;

@override
Expand All @@ -221,6 +242,8 @@ abstract class _NetworkImagePreviewState implements NetworkImagePreviewState {
@override
List<int>? get mediaBytes;
@override
double get progress;
@override
Object? get error;
@override
@JsonKey(ignore: true)
Expand Down
Loading

0 comments on commit 6d46d78

Please sign in to comment.