Closed pishabh625 closed 1 year ago
Hey @pishabh625 check this out the code , hope u helpful
import 'dart:io';
import 'package:dartz/dartz.dart';
import 'package:in_app_update/in_app_update.dart';
// Function class
class CheckAppUpdateDataProvider {
static Future<Either<MainFailures, AppUpdateInfo>> checkAppUpdate() async {
try {
if(Platform.isAndroid){
final info = await InAppUpdate.checkForUpdate();
return Right(info);
}
return const Left(MainFailures.formatExceptionFailure);
} catch (exception) {
return appUpdateexceptionHandler(exception);
}
}
}
// Repository class
class CheckAppUpdateRepository {
static Future<Either<MainFailures, AppUpdateInfo>> checkInAppUpdate() async {
final response = await CheckAppUpdateDataProvider.checkAppUpdate();
return response.fold((failure) {
return Left(failure);
}, (success) {
return Right(success);
});
}
//State check using bloc state management
import 'package:equatable/equatable.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:in_app_update/in_app_update.dart';
import '../../data/repositories/check_app_update_repository.dart';
part 'check_app_update_event.dart';
part 'check_app_update_state.dart';
class CheckAppUpdateBloc
extends Bloc<CheckAppUpdateEvent, CheckAppUpdateState> {
CheckAppUpdateBloc()
: super(CheckAppUpdateInitial()) {
on<LoadCheckUpdate>((event, emit) async {
final response = await CheckAppUpdateRepository.checkInAppUpdate();
response.fold((failure) {
emit(AppUpdateError());
}, (success) {
if (success.updateAvailability == UpdateAvailability.updateAvailable) {
emit(AppUpdateAvailable());
} else {
emit(AppUpdateNotAvailable());
}
});
});
}
}
part of 'check_app_update_bloc.dart';
// ~~~~~~~~~~~~~~~~~~~~~~~~ event class ~~~~~~~~~~~~~~~
abstract class CheckAppUpdateEvent extends Equatable {
const CheckAppUpdateEvent();
@override
List<Object> get props => [];
}
class LoadCheckUpdate extends CheckAppUpdateEvent{}
// ~~~~~~~~~~~~~~~~~~~~~~state class ~~~~~~~~~~~~~~~~
part of 'check_app_update_bloc.dart';
abstract class CheckAppUpdateState extends Equatable {
const CheckAppUpdateState();
}
class CheckAppUpdateInitial extends CheckAppUpdateState {
@override
List<Object?> get props => [];
}
class AppUpdateAvailable extends CheckAppUpdateState{
@override
List<Object?> get props => [];
}
class AppUpdateNotAvailable extends CheckAppUpdateState{
@override
List<Object?> get props => [];
}
class AppUpdateError extends CheckAppUpdateState{
@override
List<Object?> get props => [];
}
// list the changes using bloc listener
// Wrap the BlocListener with Material App
BlocListener<CheckAppUpdateBloc, CheckAppUpdateState>(
listener: (context, state) async{
if(state is AppUpdateAvailable){
final result = await InAppUpdate.performImmediateUpdate();
log("App Update Result : ${result.name}");
}
},
child: MaterialApp(
scaffoldMessengerKey: snackkey,
)),
The documentation is linked in the readme. https://developer.android.com/guide/playcore/in-app-updates
I tried all the things to do integrate in app update but it is not working at all. Things i tried:
Please help me if i am missing something or provide usage documentation atleast so that everyone can test the app easily without having any issue.
Thank you