Skip to content

Commit

Permalink
refactor code
Browse files Browse the repository at this point in the history
  • Loading branch information
maheshj01 committed Jan 5, 2024
1 parent 8741422 commit ba9a6ab
Show file tree
Hide file tree
Showing 7 changed files with 203 additions and 75 deletions.
33 changes: 18 additions & 15 deletions lib/base_home.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import 'package:package_info_plus/package_info_plus.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:vocabhub/constants/constants.dart';
import 'package:vocabhub/models/user.dart';
import 'package:vocabhub/models/version.dart';
import 'package:vocabhub/navbar/navbar.dart';
import 'package:vocabhub/navbar/profile/edit.dart';
import 'package:vocabhub/navbar/search/search_view.dart';
Expand Down Expand Up @@ -71,7 +72,7 @@ class _AdaptiveLayoutState extends ConsumerState<AdaptiveLayout> {
}
try {
final appController = ref.read(appProvider);
final appUtility = ref.read(appUtilityProvider);
final appNotifier = ref.read(appProvider.notifier);
final packageInfo = await PackageInfo.fromPlatform();
final String appVersion = packageInfo.version;
final int appBuildNumber = int.parse(packageInfo.buildNumber);
Expand All @@ -82,33 +83,35 @@ class _AdaptiveLayoutState extends ConsumerState<AdaptiveLayout> {
minimumFetchInterval: const Duration(seconds: 1),
));
await remoteConfig.fetchAndActivate();
final version = remoteConfig.getString('${Constants.VERSION_KEY}');
final buildNumber = remoteConfig.getInt('${Constants.BUILD_NUMBER_KEY}');
final storedVersion = appUtility.getVersion();
final oldVersion = storedVersion.split(' ')[0];
final oldBuildNumber = int.parse(storedVersion.split(' ')[1]);
if (appVersion != version || buildNumber > appBuildNumber) {
ref
.read(appProvider.notifier)
.copyWith(appController.copyWith(showFAB: false, extended: true, hasUpdate: true));
final remoteVersion = remoteConfig.getString('${Constants.VERSION_KEY}');
final remoteBuildNumber = remoteConfig.getInt('${Constants.BUILD_NUMBER_KEY}');
final storedVersion = appController.version;
final oldVersion = storedVersion!.oldVersion.version;
final oldBuildNumber = storedVersion.oldVersion.buildNumber;
final current = Version(
version: packageInfo.version,
buildNumber: int.parse(packageInfo.buildNumber),
date: DateTime.now(),
);
final app_version = AppVersion(version: current, oldVersion: current);
if (appVersion != remoteVersion || remoteBuildNumber > appBuildNumber) {
appNotifier.copyWith(appController.copyWith(
showFAB: false, extended: true, hasUpdate: true, version: app_version));
showSnackBar("New Update Available", action: 'Update', persist: true, onActionPressed: () {
analytics.logAppUpdate(settingsController.version!);
launchUrl(Uri.parse(Constants.PLAY_STORE_URL), mode: LaunchMode.externalApplication);
});
} else {
if (oldVersion != version || oldBuildNumber < buildNumber) {
if (oldVersion != appVersion || oldBuildNumber < appBuildNumber) {
Navigate.push(
context,
WhatsNew(
showFullChangelog: false,
),
transitionType: TransitionType.btt,
);

appUtility.setAppVersion(
'$version $buildNumber',
);
}
appNotifier.setVersion(app_version);
}
} catch (_) {
setState(() {});
Expand Down
82 changes: 34 additions & 48 deletions lib/controller/app_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import 'dart:convert';

import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:vocabhub/models/version.dart';
import 'package:vocabhub/services/services.dart';

@immutable
Expand All @@ -10,31 +11,24 @@ class AppController {
final bool showFAB;
final bool extended;
final bool hasUpdate;
final String version;
final String oldVersion;
final AppVersion? version;

AppController(
{this.index = 0,
this.showFAB = true,
this.extended = true,
this.hasUpdate = false,
this.version = '1.0.0 1',
this.oldVersion = '1.0.0 1'});
this.version});

AppController copyWith(
{int? index,
bool? showFAB,
bool? extended,
bool? hasUpdate,
String? version,
String? oldVersion}) {
{int? index, bool? showFAB, bool? extended, bool? hasUpdate, AppVersion? version}) {
return AppController(
index: index ?? this.index,
showFAB: showFAB ?? this.showFAB,
extended: extended ?? this.extended,
hasUpdate: hasUpdate ?? this.hasUpdate,
version: version ?? this.version,
oldVersion: oldVersion ?? this.oldVersion);
index: index ?? this.index,
showFAB: showFAB ?? this.showFAB,
extended: extended ?? this.extended,
hasUpdate: hasUpdate ?? this.hasUpdate,
version: version ?? this.version,
);
}

Map<String, dynamic> toMap() {
Expand All @@ -45,18 +39,17 @@ class AppController {
result.addAll({'extended': extended});
result.addAll({'hasUpdate': hasUpdate});
result.addAll({'version': version});
result.addAll({'oldVersion': oldVersion});
return result;
}

factory AppController.fromMap(Map<String, dynamic> map) {
return AppController(
index: map['index']?.toInt() ?? 0,
showFAB: map['showFAB'] ?? false,
extended: map['extended'] ?? false,
hasUpdate: map['hasUpdate'] ?? false,
version: map['version'] ?? '1.0.0 1',
oldVersion: map['oldVersion'] ?? '1.0.0 1');
index: map['index']?.toInt() ?? 0,
showFAB: map['showFAB'] ?? false,
extended: map['extended'] ?? false,
hasUpdate: map['hasUpdate'] ?? false,
version: AppVersion.fromMap(map['version']),
);
}

String toJson() => json.encode(toMap());
Expand All @@ -65,7 +58,7 @@ class AppController {

@override
String toString() {
return 'AppController(index: $index, showFAB: $showFAB, extended: $extended, hasUpdate: $hasUpdate, version: $version oldVersion: $oldVersion)';
return 'AppController(index: $index, showFAB: $showFAB, extended: $extended, hasUpdate: $hasUpdate, version: ${version.toString()}})';
}

@override
Expand All @@ -77,8 +70,7 @@ class AppController {
other.showFAB == showFAB &&
other.extended == extended &&
other.hasUpdate == hasUpdate &&
other.version == version &&
other.oldVersion == oldVersion;
other.version == version;
}

@override
Expand All @@ -87,22 +79,20 @@ class AppController {
showFAB.hashCode ^
extended.hashCode ^
hasUpdate.hashCode ^
version.hashCode ^
oldVersion.hashCode;
version.hashCode;
}
}

class AppNotifier extends StateNotifier<AppController> {
AppNotifier(this.ref)
: super(AppController(
extended: true,
index: 0,
showFAB: true,
hasUpdate: false,
oldVersion: "1.0.0 1",
version: "1.0.0 1")) {
final oldVer = ref.read(appUtilityProvider).getVersion();
state.copyWith(oldVersion: oldVer);
extended: true,
index: 0,
showFAB: true,
hasUpdate: false,
)) {
final version = ref.read(appUtilityProvider).getVersion();
state = state.copyWith(version: version);
}
Ref ref;
void setIndex(int index) {
Expand All @@ -121,22 +111,18 @@ class AppNotifier extends StateNotifier<AppController> {
state = state.copyWith(hasUpdate: update);
}

void setVersion(String version) {
void setVersion(AppVersion version) {
state = state.copyWith(version: version);
}

void setOldVersion(String oldVersion) {
state = state.copyWith(oldVersion: oldVersion);
ref.read(appUtilityProvider).setAppVersion(oldVersion);
ref.read(appUtilityProvider).setAppVersion(version);
}

void copyWith(AppController appController) {
state = state.copyWith(
index: appController.index,
showFAB: appController.showFAB,
extended: appController.extended,
hasUpdate: appController.hasUpdate,
version: appController.version,
oldVersion: appController.oldVersion);
index: appController.index,
showFAB: appController.showFAB,
extended: appController.extended,
hasUpdate: appController.hasUpdate,
version: appController.version,
);
}
}
115 changes: 115 additions & 0 deletions lib/models/version.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
import 'dart:convert';

class AppVersion {
Version version;
Version oldVersion;

AppVersion({
required this.version,
required this.oldVersion,
});

AppVersion copyWith({
Version? version,
Version? oldVersion,
}) {
return AppVersion(
version: version ?? this.version,
oldVersion: oldVersion ?? this.oldVersion,
);
}

Map<String, dynamic> toMap() {
final result = <String, dynamic>{};

result.addAll({'version': version.toMap()});
result.addAll({'oldVersion': oldVersion.toMap()});

return result;
}

factory AppVersion.fromMap(Map<String, dynamic> map) {
return AppVersion(
version: Version.fromMap(map['version']),
oldVersion: Version.fromMap(map['oldVersion']),
);
}

String toJson() => json.encode(toMap());

factory AppVersion.fromJson(String source) => AppVersion.fromMap(json.decode(source));

@override
String toString() => 'AppVersion(version: $version, oldVersion: $oldVersion)';

@override
bool operator ==(Object other) {
if (identical(this, other)) return true;

return other is AppVersion && other.version == version && other.oldVersion == oldVersion;
}

@override
int get hashCode => version.hashCode ^ oldVersion.hashCode;
}

class Version {
final String version;
final int buildNumber;
final DateTime? date;
Version({
this.version = '',
this.buildNumber = 1,
this.date = null,
});

Version copyWith({
String? version,
int? buildNumber,
DateTime? date,
}) {
return Version(
version: version ?? this.version,
buildNumber: buildNumber ?? this.buildNumber,
date: date ?? this.date,
);
}

Map<String, dynamic> toMap() {
final result = <String, dynamic>{};

result.addAll({'version': version});
result.addAll({'buildNumber': buildNumber});
result.addAll({'date': date!.millisecondsSinceEpoch});

return result;
}

factory Version.fromMap(Map<String, dynamic> map) {
return Version(
version: map['version'] ?? '',
buildNumber: map['buildNumber']?.toInt() ?? 0,
date: DateTime.fromMillisecondsSinceEpoch(map['date']),
);
}

String toJson() => json.encode(toMap());

factory Version.fromJson(String source) => Version.fromMap(json.decode(source));

@override
String toString() => 'Version(version: $version, buildNumber: $buildNumber, date: $date)';

@override
bool operator ==(Object other) {
if (identical(this, other)) return true;

return other is Version &&
other.version == version &&
other.buildNumber == buildNumber &&
other.date == date;
}

@override
int get hashCode => version.hashCode ^ buildNumber.hashCode ^ date.hashCode;
}
6 changes: 3 additions & 3 deletions lib/navbar/profile/settings.dart
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ class _SettingsPageMobileState extends ConsumerState<SettingsPageMobile> {
user.setUser(userNew);
}
});
final oldVersion = ref.read(appProvider).oldVersion;
final oldVersion = ref.read(appProvider).version!.oldVersion;
return Material(
color: Colors.transparent,
child: ListView(
Expand All @@ -126,8 +126,8 @@ class _SettingsPageMobileState extends ConsumerState<SettingsPageMobile> {
if (snapshot.data == null) return SizedBox.shrink();
final String appVersion = snapshot.data!.version;
final int appBuildNumber = int.parse(snapshot.data!.buildNumber);
final version = oldVersion.split(' ')[0];
final buildNumber = int.parse(oldVersion.split(' ')[1]);
final version = oldVersion.version;
final buildNumber = oldVersion.buildNumber;

if (appVersion != version || buildNumber < appBuildNumber) {
return settingTile(
Expand Down
6 changes: 3 additions & 3 deletions lib/themes/theme_utils.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,15 @@ class ThemeUtility {

final SharedPreferences sharedPreferences;

final String kThemeKey = 'kThemeKey';
final String kAppThemeKey = 'kAppThemeKey';

void setThemeController(VocabThemeController value) {
final json = value.toJson();
sharedPreferences.setString(kThemeKey, json);
sharedPreferences.setString(kAppThemeKey, json);
}

VocabThemeController getThemeController() {
final String? theme = sharedPreferences.getString(kThemeKey);
final String? theme = sharedPreferences.getString(kAppThemeKey);
if (theme == null) {
final defaultThemeController = VocabThemeController(
themeSeed: VocabTheme.colorSeeds[1], isClassic: false, isDark: false);
Expand Down
2 changes: 0 additions & 2 deletions lib/themes/vocabtheme_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,6 @@ class VocabThemeNotifier extends StateNotifier<VocabThemeController> {

Ref ref;

final String kThemeKey = 'kThemeKey';
final String kThemeSeedKey = 'kThemeSeedKey';
final String kRatedOnPlaystore = 'kRatedOnPlaystore';
final String kLastRatedDate = 'kLastRatedDate';
final String kOnboardedKey = 'kOnboardedKey';
Expand Down
Loading

0 comments on commit ba9a6ab

Please sign in to comment.