From 619f3af9847e01b1c4b896ce66b323de8baa46f2 Mon Sep 17 00:00:00 2001 From: Ramesh Kumar Chandra <31303617+rameshkumarchandra@users.noreply.github.com> Date: Wed, 10 Jan 2024 20:11:55 +0530 Subject: [PATCH 1/5] chore: integrated config api (#165) --- lib/Authentication/google_sign_in.dart | 10 +-- lib/app.dart | 4 +- .../project_select_cover_image.dart | 9 +- lib/config/apis.dart | 1 + lib/config/config_variables.dart | 16 ++++ lib/main.dart | 8 +- lib/models/config_model.dart | 63 +++++++++++++ lib/models/workspace_model.dart | 5 +- lib/provider/config_provider.dart | 71 +++++++++++++++ lib/provider/issue_provider.dart | 6 +- lib/provider/issues_provider.dart | 44 --------- lib/provider/projects_provider.dart | 2 +- lib/provider/provider_list.dart | 5 ++ lib/provider/workspace_provider.dart | 2 +- .../IssuesTab/CreateIssue/create_issue.dart | 12 +-- .../ProjectDetail/IssuesTab/issue_detail.dart | 4 +- .../on_boarding/auth/setup_workspace.dart | 4 +- lib/screens/on_boarding/auth/sign_in.dart | 20 ++--- lib/startup/dependency_resolver.dart | 90 ++++++++++--------- lib/utils/editor.dart | 4 +- lib/utils/global_functions.dart | 11 +-- lib/widgets/empty.dart | 2 +- pubspec.yaml | 2 +- 23 files changed, 252 insertions(+), 143 deletions(-) create mode 100644 lib/config/config_variables.dart create mode 100644 lib/models/config_model.dart create mode 100644 lib/provider/config_provider.dart diff --git a/lib/Authentication/google_sign_in.dart b/lib/Authentication/google_sign_in.dart index f884eb3..3f9cb65 100644 --- a/lib/Authentication/google_sign_in.dart +++ b/lib/Authentication/google_sign_in.dart @@ -1,14 +1,12 @@ import 'dart:io'; - -import 'package:flutter_dotenv/flutter_dotenv.dart'; import 'package:google_sign_in/google_sign_in.dart'; +import 'package:plane/config/config_variables.dart'; class GoogleSignInApi { static final _googleSingIn = GoogleSignIn( - serverClientId: dotenv.env['GOOGLE_SERVER_CLIENT_ID'], - clientId: Platform.isIOS - ? dotenv.env['GOOGLE_IOS_CLIENT_ID'] - : dotenv.env['GOOGLE_SERVER_CLIENT_ID'], + serverClientId: Config.googleServerClientId, + clientId: + Platform.isIOS ? Config.googleIosClientId :Config.googleServerClientId, scopes: ['email', 'profile'], ); diff --git a/lib/app.dart b/lib/app.dart index c9ef8dd..7d22453 100644 --- a/lib/app.dart +++ b/lib/app.dart @@ -28,9 +28,11 @@ class _AppState extends ConsumerState { final ProfileProvider profileProv = ref.watch(ProviderList.profileProvider); final WorkspaceProvider workspaceProv = ref.watch(ProviderList.workspaceProvider); + final configProvider = ref.watch(ProviderList.configProvider); final themeProvider = ref.watch(ProviderList.themeProvider); return Scaffold( - body: (profileProv.getProfileState == StateEnum.loading || + body: (configProvider.getConfigState == StateEnum.loading || + profileProv.getProfileState == StateEnum.loading || workspaceProv.workspaceInvitationState == StateEnum.loading) ? Center( child: SizedBox( diff --git a/lib/bottom_sheets/project_select_cover_image.dart b/lib/bottom_sheets/project_select_cover_image.dart index e7a3458..a7e70be 100644 --- a/lib/bottom_sheets/project_select_cover_image.dart +++ b/lib/bottom_sheets/project_select_cover_image.dart @@ -63,7 +63,7 @@ class _SelectCoverImageState extends ConsumerState { List images = []; final dio = Dio(); - final unspalshApi = dotenv.env['UNSPLASH_API']; + // final unspalshApi = dotenv.env['UNSPLASH_API']; Future getImages(bool isFirstReq) async { if (!isFirstReq) { @@ -83,8 +83,8 @@ class _SelectCoverImageState extends ConsumerState { try { final url = searchController.text.isEmpty - ? 'https://api.unsplash.com/photos/?client_id=$unspalshApi&page=$page&per_page=$perPage' - : 'https://api.unsplash.com/search/photos/?client_id=$unspalshApi&query=${searchController.text}&page=$page&per_page=$perPage '; + ? 'https://api/unsplash/&page=$page&per_page=$perPage' + : 'https://api.unsplash/&query=${searchController.text}&page=$page&per_page=$perPage '; log(url); final response = await DioConfig().dioServe( hasAuth: false, @@ -267,6 +267,9 @@ class _SelectCoverImageState extends ConsumerState { .themeManager.textFieldDecoration .copyWith( hintText: 'Search for images', + hintStyle: TextStyle( + color: themeProvider + .themeManager.placeholderTextColor), suffixIcon: searchController.text.isNotEmpty ? GestureDetector( onTap: () => setState(() { diff --git a/lib/config/apis.dart b/lib/config/apis.dart index 32ae7bf..71cc659 100644 --- a/lib/config/apis.dart +++ b/lib/config/apis.dart @@ -148,4 +148,5 @@ class APIs { static String pendingInvites = '$baseApi/api/workspaces/\$SLUG/invitations/'; static String retrieveUserRoleOnWorkspace = '$baseApi/api/workspaces/\$SLUG/workspace-members/me/'; + static String configApi = '$baseApi/api/mobile-configs'; } diff --git a/lib/config/config_variables.dart b/lib/config/config_variables.dart new file mode 100644 index 0000000..6925046 --- /dev/null +++ b/lib/config/config_variables.dart @@ -0,0 +1,16 @@ +class Config { + static String? googleClientId; + static String? googleServerClientId; + static String? googleIosClientId; + static String? reversedGoogleIosClientId; + static String? posthogApiKey; + static String? posthogHost; + static bool? magicLogin; + static bool? emailPasswordLogin; + static bool? hasUnsplashConfigured; + static bool? hasOpenaiConfigured; + static double? fileSizeLimit; + static bool? isSmtpConfigured; + static String? webUrl; + static String? sentryDsn; +} diff --git a/lib/main.dart b/lib/main.dart index b86874a..9cb36a7 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_dotenv/flutter_dotenv.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:plane/config/config_variables.dart'; import 'package:plane/config/plane_keys.dart'; import 'package:plane/screens/on_boarding/on_boarding_screen.dart'; import 'package:plane/services/shared_preference_service.dart'; @@ -22,7 +23,7 @@ import 'package:flutter_native_splash/flutter_native_splash.dart'; late String selectedTheme; void main() async { - final widgetsBinding=WidgetsFlutterBinding.ensureInitialized(); + final widgetsBinding = WidgetsFlutterBinding.ensureInitialized(); await Future.delayed(const Duration(milliseconds: 300)); FlutterNativeSplash.preserve(widgetsBinding: widgetsBinding); await dotenv.load(fileName: '.env'); @@ -103,10 +104,7 @@ class _MyAppState extends ConsumerState with WidgetsBindingObserver { bool checkPostHog() { bool enablePostHog = false; - if (dotenv.env['ENABLE_TRACK_EVENTS'] != null && - dotenv.env['ENABLE_TRACK_EVENTS'] == '1' && - dotenv.env['POSTHOG_API'] != null && - dotenv.env['POSTHOG_API'] != '') { + if (Config.posthogApiKey != null && Config.posthogApiKey != '') { enablePostHog = true; } else { enablePostHog = false; diff --git a/lib/models/config_model.dart b/lib/models/config_model.dart new file mode 100644 index 0000000..a944796 --- /dev/null +++ b/lib/models/config_model.dart @@ -0,0 +1,63 @@ +class ConfigsModel { + ConfigsModel({ + this.googleClientId, + this.googleServerClientId, + this.googleIosClientId, + this.reversedGoogleIosClientId, + this.posthogApiKey, + this.posthogHost, + this.magicLogin, + this.emailPasswordLogin, + this.hasUnsplashConfigured, + this.hasOpenaiConfigured, + this.fileSizeLimit, + this.isSmtpConfigured, + }); + + factory ConfigsModel.fromJson(Map json) { + return ConfigsModel( + googleClientId: json['google_client_id'], + googleServerClientId: json['google_server_client_id'], + googleIosClientId: json['google_ios_client_id'], + reversedGoogleIosClientId: json['reversed_google_ios_client_id'], + posthogApiKey: json['posthog_api_key'], + posthogHost: json['posthog_host'], + magicLogin: json['magic_login'], + emailPasswordLogin: json['email_password_login'], + hasUnsplashConfigured: json['has_unsplash_configured'], + hasOpenaiConfigured: json['has_openai_configured'], + fileSizeLimit: json['file_size_limit']?.toDouble(), + isSmtpConfigured: json['is_smtp_configured'], + ); + } + + ConfigsModel empty() { + return ConfigsModel( + googleClientId: '', + googleServerClientId: '', + googleIosClientId: '', + reversedGoogleIosClientId: '', + posthogApiKey: '', + posthogHost: '', + magicLogin: false, + emailPasswordLogin: false, + hasUnsplashConfigured: false, + hasOpenaiConfigured: false, + fileSizeLimit: 0.0, + isSmtpConfigured: false, + ); + } + + String? googleClientId; + String? googleServerClientId; + String? googleIosClientId; + String? reversedGoogleIosClientId; + String? posthogApiKey; + String? posthogHost; + bool? magicLogin; + bool? emailPasswordLogin; + bool? hasUnsplashConfigured; + bool? hasOpenaiConfigured; + double? fileSizeLimit; + bool? isSmtpConfigured; +} diff --git a/lib/models/workspace_model.dart b/lib/models/workspace_model.dart index fd73ff2..9f21506 100644 --- a/lib/models/workspace_model.dart +++ b/lib/models/workspace_model.dart @@ -1,4 +1,5 @@ -import 'package:flutter_dotenv/flutter_dotenv.dart'; + +import 'package:plane/config/config_variables.dart'; class WorkspaceModel { WorkspaceModel({ @@ -17,7 +18,7 @@ class WorkspaceModel { workspaceId: json['id'], workspaceLogo: json['logo'] ?? '', // workspaceUrl: json['url'], - workspaceUrl: '${dotenv.env['WEB_URL']}${json['slug']}', + workspaceUrl: '${Config.webUrl}${json['slug']}', ); } String workspaceName; diff --git a/lib/provider/config_provider.dart b/lib/provider/config_provider.dart new file mode 100644 index 0000000..d166124 --- /dev/null +++ b/lib/provider/config_provider.dart @@ -0,0 +1,71 @@ +import 'dart:developer'; + +import 'package:dio/dio.dart'; +import 'package:flutter_dotenv/flutter_dotenv.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:plane/config/apis.dart'; +import 'package:plane/config/config_variables.dart'; +import 'package:plane/models/config_model.dart'; +import 'package:plane/services/dio_service.dart'; +import 'package:plane/utils/enums.dart'; + +class ConfigModel { + ConfigModel({required this.data, required this.getConfigState}); + // Map configData; + ConfigsModel? data; + StateEnum getConfigState; + ConfigModel copyWith({ConfigsModel? data, StateEnum? getConfigState}) { + return ConfigModel( + data: data ?? this.data, + getConfigState: getConfigState ?? this.getConfigState); + } +} + +class ConfigProvider extends StateNotifier { + ConfigProvider(this.ref) + : super( + ConfigModel( + data: ConfigsModel().empty(), getConfigState: StateEnum.loading), + ); + Ref ref; + + Future getConfig() async { + state.copyWith( + data: ConfigsModel().empty(), getConfigState: StateEnum.loading); + try { + var url = APIs.configApi; + var response = await DioConfig().dioServe( + hasAuth: false, + hasBody: false, + url: url, + httpMethod: HttpMethod.get, + ); + log(response.data.toString()); + state = state.copyWith( + data: ConfigsModel.fromJson(response.data), + getConfigState: StateEnum.success); + initializeEnvs(state.data!); + } on DioException catch (e) { + log(e.error.toString()); + state = state.copyWith( + data: ConfigsModel().empty(), getConfigState: StateEnum.error); + } + } +} + +void initializeEnvs(ConfigsModel data) { + Config.googleClientId = data.googleClientId!; + Config.googleServerClientId = data.googleServerClientId!; + Config.googleIosClientId = data.googleIosClientId!; + // Config.reversedGoogleIosClientId = data.reversedGoogleIosClientId!; + Config.posthogApiKey = data.posthogApiKey!; + Config.posthogHost = data.posthogHost!; + Config.magicLogin = data.magicLogin!; + Config.emailPasswordLogin = data.emailPasswordLogin!; + Config.hasUnsplashConfigured = data.hasUnsplashConfigured!; + Config.hasOpenaiConfigured = data.hasOpenaiConfigured!; + Config.fileSizeLimit = data.fileSizeLimit!; + Config.isSmtpConfigured = data.isSmtpConfigured!; + Config.webUrl = dotenv.env['WEB_URL']; + Config.sentryDsn = dotenv.env['SENTRY_DSN']; +} diff --git a/lib/provider/issue_provider.dart b/lib/provider/issue_provider.dart index d4db2d6..deebe07 100644 --- a/lib/provider/issue_provider.dart +++ b/lib/provider/issue_provider.dart @@ -3,12 +3,12 @@ import 'dart:convert'; import 'dart:developer'; import 'dart:io'; -import 'package:flutter_dotenv/flutter_dotenv.dart'; import 'package:flutter_inappwebview/flutter_inappwebview.dart'; import 'package:http_parser/http_parser.dart'; import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:plane/config/config_variables.dart'; import 'package:plane/config/const.dart'; import 'package:plane/screens/MainScreens/Profile/User_profile/user_profile.dart'; import 'package:plane/screens/MainScreens/Projects/ProjectDetail/IssuesTab/issue_detail.dart'; @@ -459,7 +459,7 @@ class IssueProvider with ChangeNotifier { Future setCookies({required String key, required String value}) async { if (value.isEmpty) return; - final Uri baseWebUrl = Uri.parse(dotenv.env['WEB_URL']!); + final Uri baseWebUrl = Uri.parse(Config.webUrl!); final cookieManager = CookieManager.instance(); await cookieManager.setCookie( url: baseWebUrl, @@ -478,7 +478,7 @@ class IssueProvider with ChangeNotifier { cookiesState = StateEnum.loading; final cookieManager = CookieManager.instance(); cookieManager.deleteAllCookies(); - final Uri baseWebUrl = Uri.parse(dotenv.env['WEB_URL']!); + final Uri baseWebUrl = Uri.parse(Config.webUrl!); if (data.isNotEmpty) { await cookieManager.setCookie( url: baseWebUrl, diff --git a/lib/provider/issues_provider.dart b/lib/provider/issues_provider.dart index 0d08b18..88fd6b6 100644 --- a/lib/provider/issues_provider.dart +++ b/lib/provider/issues_provider.dart @@ -212,7 +212,6 @@ class IssuesProvider extends ChangeNotifier { {bool views = false, bool isArchive = false}) { final themeProvider = ref!.read(ProviderList.themeProvider); int count = 0; - // log(issues.groupBY.name); issuesResponse = []; issues.issues = []; for (int j = 0; j < stateOrdering.length; j++) { @@ -220,7 +219,6 @@ class IssuesProvider extends ChangeNotifier { if (groupByResponse[stateOrdering[j]] == null) { continue; } - // log(states[stateOrdering[j]]["name"]); for (int i = 0; groupByResponse[stateOrdering[j]] != null && i < groupByResponse[stateOrdering[j]]!.length; @@ -427,10 +425,6 @@ class IssuesProvider extends ChangeNotifier { GestureDetector( onTap: () { shrinkStates[element.index] = !shrinkStates[element.index]; - - // log(element.index.toString() + - // shrinkStates[element.index].toString()); - notifyListeners(); }, child: Icon( @@ -534,13 +528,8 @@ class IssuesProvider extends ChangeNotifier { groupByResponse[stateOrdering[newListIndex]][newCardIndex] ['label_details'] = labelDetails; - - log(groupByResponse[stateOrdering[newListIndex]][newCardIndex] - .toString()); updateIssueState = StateEnum.success; - // log(response.data.toString()); if (issues.groupBY == GroupBY.priority) { - // log(groupByResponse[stateOrdering[newListIndex]][newCardIndex]['name']); groupByResponse[stateOrdering[newListIndex]][newCardIndex]['priority'] = stateOrdering[newListIndex]; } @@ -560,7 +549,6 @@ class IssuesProvider extends ChangeNotifier { } }); } - log("ISSUE REPOSITIONED"); notifyListeners(); // ignore: unused_catch_clause } on DioException catch (err) { @@ -603,13 +591,11 @@ class IssuesProvider extends ChangeNotifier { hasBody: false, httpMethod: HttpMethod.get, ); - // log('getLabels' + response.data.toString()); labels = response.data; labelState = StateEnum.success; notifyListeners(); } on DioException catch (e) { - log('Error in getLabels ${e.message}'); log(e.error.toString()); labelState = StateEnum.error; notifyListeners(); @@ -644,7 +630,6 @@ class IssuesProvider extends ChangeNotifier { ? HttpMethod.delete : HttpMethod.post, data: data); - // log(response.data.toString()); method != CRUD.read ? postHogService( eventName: method == CRUD.create @@ -697,7 +682,6 @@ class IssuesProvider extends ChangeNotifier { hasBody: false, httpMethod: HttpMethod.get, ); - // log(response.data.toString()); statesData = response.data; states = {}; for (int i = 0; i < response.data.length; i++) { @@ -904,7 +888,6 @@ class IssuesProvider extends ChangeNotifier { httpMethod: HttpMethod.get, ); - log("DONE"); issuesResponse = response.data; issuesList = response.data; isISsuesEmpty = issuesResponse.isEmpty; @@ -962,21 +945,18 @@ class IssuesProvider extends ChangeNotifier { hasBody: false, httpMethod: HttpMethod.get, ); - // log('Project Members ${response.data.toString()}'); members = response.data; for (final element in members) { if (element["member"]['id'] == ref!.read(ProviderList.profileProvider).userProfile.id) { ref!.read(ProviderList.projectProvider).role = roleParser(role: element["role"]); - log('Role ${ref!.read(ProviderList.projectProvider).role}'); break; } } membersState = StateEnum.success; notifyListeners(); } on DioException catch (e) { - log('Error in getProjectMembers '); log(e.response.toString()); membersState = StateEnum.error; notifyListeners(); @@ -987,15 +967,6 @@ class IssuesProvider extends ChangeNotifier { final cyclesProvider = ref!.read(ProviderList.cyclesProvider); final modulesProvider = ref!.read(ProviderList.modulesProvider); issueState = StateEnum.loading; - log(APIs.issueProperties - .replaceAll( - "\$SLUG", - ref! - .read(ProviderList.workspaceProvider) - .selectedWorkspace - .workspaceSlug) - .replaceAll('\$PROJECTID', - ref!.read(ProviderList.projectProvider).currentProject['id'])); try { var response = await DioConfig().dioServe( hasAuth: true, @@ -1011,7 +982,6 @@ class IssuesProvider extends ChangeNotifier { hasBody: false, httpMethod: HttpMethod.get, ); - // log('Issue Properties ${response.data.toString()}'); if (response.data.isEmpty) { response = await DioConfig().dioServe( hasAuth: true, @@ -1169,7 +1139,6 @@ class IssuesProvider extends ChangeNotifier { // ref!.read(ProviderList.cyclesProvider).issues.displayProperties = issues.displayProperties; } - //log('ISSUE PROPERTY ===== > $issueProperty'); } issueState = StateEnum.success; @@ -1189,7 +1158,6 @@ class IssuesProvider extends ChangeNotifier { final modulesProvider = ref!.read(ProviderList.modulesProvider); issuePropertyState = StateEnum.loading; notifyListeners(); - log(issueProperty.toString()); try { final response = await DioConfig().dioServe( hasAuth: true, @@ -1228,7 +1196,6 @@ class IssuesProvider extends ChangeNotifier { httpMethod: HttpMethod.patch, ); - // log(response.data.toString()); if (issueCategory == IssueCategory.cycleIssues) { cyclesProvider.issueProperty = response.data; } else if (issueCategory == IssueCategory.moduleIssues) { @@ -1247,7 +1214,6 @@ class IssuesProvider extends ChangeNotifier { Future updateProjectView( {bool isArchive = false, bool setDefault = false}) async { - log(tempProjectView.toString()); final Map view = { "view_props": { "calendarDateRange": "", @@ -1312,7 +1278,6 @@ class IssuesProvider extends ChangeNotifier { projectViewState = StateEnum.success; notifyListeners(); } on DioException catch (e) { - log("ERROR"); log(e.response.toString()); projectViewState = StateEnum.error; notifyListeners(); @@ -1341,7 +1306,6 @@ class IssuesProvider extends ChangeNotifier { ); issueView = reset ? response.data["default_props"] : response.data["view_props"]; - log(issueView.toString()); issues.projectView = issueView['display_filters']['layout'] == 'list' ? ProjectView.list : issueView['display_filters']['layout'] == 'calendar' @@ -1539,11 +1503,9 @@ class IssuesProvider extends ChangeNotifier { url = url.replaceAll('&group_by=none', ''); stateOrdering = ['All Issues']; } - log('URL: $url'); dynamic temp; try { - // log('====CAME TO CYCLES TRY'); final response = await DioConfig().dioServe( hasAuth: true, url: url, @@ -1551,7 +1513,6 @@ class IssuesProvider extends ChangeNotifier { httpMethod: HttpMethod.get, ); if (issueCategory == IssueCategory.cycleIssues) { - // log('Cycle Issues :::: ${response.data}'); issuesList = []; if (issues.groupBY != GroupBY.none) { @@ -1563,8 +1524,6 @@ class IssuesProvider extends ChangeNotifier { temp = {'All Issues': response.data}; } } else if (issueCategory == IssueCategory.moduleIssues) { - // log('Module Issues :::: ${response.data}'); - issuesList = []; if (issues.groupBY != GroupBY.none) { temp = response.data; @@ -1577,8 +1536,6 @@ class IssuesProvider extends ChangeNotifier { } if (issueCategory == IssueCategory.issues) { - // log('Issues :::: ${response.data}'); - issuesResponse = []; isISsuesEmpty = true; shrinkStates = []; @@ -1655,7 +1612,6 @@ class IssuesProvider extends ChangeNotifier { orderByState = StateEnum.success; notifyListeners(); } on DioException catch (e) { - log('filter issue error'); log(e.message.toString()); orderByState = StateEnum.error; notifyListeners(); diff --git a/lib/provider/projects_provider.dart b/lib/provider/projects_provider.dart index 85a7130..dccaf28 100644 --- a/lib/provider/projects_provider.dart +++ b/lib/provider/projects_provider.dart @@ -570,7 +570,7 @@ class ProjectsProvider extends ChangeNotifier { } String? getProjectMemberImage({required String userId}) { - for (var member in projectMembers) { + for (final member in projectMembers) { if (member['member']['id'] == userId) { return member['member']['avatar']; } diff --git a/lib/provider/provider_list.dart b/lib/provider/provider_list.dart index df384aa..d77f858 100644 --- a/lib/provider/provider_list.dart +++ b/lib/provider/provider_list.dart @@ -4,6 +4,7 @@ import 'package:plane/config/const.dart'; import 'package:plane/provider/activity_provider.dart'; import 'package:plane/provider/auth_provider.dart'; import 'package:plane/provider/bottom_nav_provider.dart'; +import 'package:plane/provider/config_provider.dart'; import 'package:plane/provider/cycles_provider.dart'; import 'package:plane/provider/dashboard_provider.dart'; import 'package:plane/provider/file_upload_provider.dart'; @@ -93,6 +94,10 @@ class ProviderList { static StateNotifierProvider whatsNewProvider = StateNotifierProvider( (ref) => WhatsNewNotifier(WhatsNew(null))); + + static StateNotifierProvider configProvider = + StateNotifierProvider( + (ref) => ConfigProvider(ref)); static void clear({required WidgetRef ref}) { ref.read(issueProvider).clear(); diff --git a/lib/provider/workspace_provider.dart b/lib/provider/workspace_provider.dart index 2a83f98..3b052a0 100644 --- a/lib/provider/workspace_provider.dart +++ b/lib/provider/workspace_provider.dart @@ -669,7 +669,7 @@ class WorkspaceProvider extends ChangeNotifier { } String? getWorkspaceMemberImage({required String userId}) { - for (var member in workspaceMembers) { + for (final member in workspaceMembers) { if (member['member']['id'] == userId) { return member['member']['avatar']; } diff --git a/lib/screens/MainScreens/Projects/ProjectDetail/IssuesTab/CreateIssue/create_issue.dart b/lib/screens/MainScreens/Projects/ProjectDetail/IssuesTab/CreateIssue/create_issue.dart index d808e85..b327dbb 100644 --- a/lib/screens/MainScreens/Projects/ProjectDetail/IssuesTab/CreateIssue/create_issue.dart +++ b/lib/screens/MainScreens/Projects/ProjectDetail/IssuesTab/CreateIssue/create_issue.dart @@ -3,7 +3,6 @@ import 'dart:developer'; import 'package:flutter/material.dart'; -import 'package:flutter_dotenv/flutter_dotenv.dart'; import 'package:flutter_inappwebview/flutter_inappwebview.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:intl/intl.dart'; @@ -15,6 +14,7 @@ import 'package:plane/bottom_sheets/select_issue_labels.dart'; import 'package:plane/bottom_sheets/select_priority.dart'; import 'package:plane/bottom_sheets/select_project_members.dart'; import 'package:plane/bottom_sheets/select_states.dart'; +import 'package:plane/config/config_variables.dart'; import 'package:plane/config/const.dart'; import 'package:plane/mixins/widget_state_mixin.dart'; import 'package:plane/provider/provider_list.dart'; @@ -466,7 +466,7 @@ class _CreateIssueState extends ConsumerState webviewController, title: 'Description', url: - '${dotenv.env['WEB_URL']!}m/${ref.read(ProviderList.workspaceProvider).selectedWorkspace.workspaceSlug}/editor?editable=true', + '${Config.webUrl!}m/${ref.read(ProviderList.workspaceProvider).selectedWorkspace.workspaceSlug}/editor?editable=true', ))); }, child: Container( @@ -566,7 +566,7 @@ class _CreateIssueState extends ConsumerState initialUrlRequest: URLRequest( url: Uri.parse( - '${dotenv.env['WEB_URL']!}m/${ref.read(ProviderList.workspaceProvider).selectedWorkspace.workspaceSlug}/editor?editable=false'))), + '${Config.webUrl!}m/${ref.read(ProviderList.workspaceProvider).selectedWorkspace.workspaceSlug}/editor?editable=false'))), descriptionLoading ? Container( alignment: Alignment @@ -608,7 +608,7 @@ class _CreateIssueState extends ConsumerState title: 'Description', url: - '${dotenv.env['WEB_URL']!}m/${ref.read(ProviderList.workspaceProvider).selectedWorkspace.workspaceSlug}/editor?editable=true', + '${Config.webUrl!}m/${ref.read(ProviderList.workspaceProvider).selectedWorkspace.workspaceSlug}/editor?editable=true', ))); }, child: Container( @@ -688,7 +688,7 @@ class _CreateIssueState extends ConsumerState .keyboard_arrow_down, color: const Color - .fromRGBO( + .fromRGBO( 63, 118, 255, 1), ), ), @@ -745,7 +745,7 @@ class _CreateIssueState extends ConsumerState //icon Icon( //four squares icon - Icons.view_cozy_outlined, + Icons.grid_view, color: themeProvider.themeManager .placeholderTextColor, ), diff --git a/lib/screens/MainScreens/Projects/ProjectDetail/IssuesTab/issue_detail.dart b/lib/screens/MainScreens/Projects/ProjectDetail/IssuesTab/issue_detail.dart index 28b376a..5111f37 100644 --- a/lib/screens/MainScreens/Projects/ProjectDetail/IssuesTab/issue_detail.dart +++ b/lib/screens/MainScreens/Projects/ProjectDetail/IssuesTab/issue_detail.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:flutter_dotenv/flutter_dotenv.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:plane/config/config_variables.dart'; import 'package:plane/provider/issues_provider.dart'; import 'package:plane/provider/my_issues_provider.dart'; import 'package:plane/utils/enums.dart'; @@ -161,7 +161,7 @@ class _IssueDetailState extends ConsumerState { body: EDITOR( from: widget.from, url: - '${dotenv.env['WEB_URL']}m/$workspaceSlug/projects/$projID/issues/${widget.issueId}${widget.isArchive ? '?archive=true' : ''}', + '${Config.webUrl}m/$workspaceSlug/projects/$projID/issues/${widget.issueId}${widget.isArchive ? '?archive=true' : ''}', title: widget.appBarTitle, ), ); diff --git a/lib/screens/on_boarding/auth/setup_workspace.dart b/lib/screens/on_boarding/auth/setup_workspace.dart index bd2a34f..a83aae6 100644 --- a/lib/screens/on_boarding/auth/setup_workspace.dart +++ b/lib/screens/on_boarding/auth/setup_workspace.dart @@ -4,9 +4,9 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_svg/flutter_svg.dart'; +import 'package:plane/config/config_variables.dart'; import 'package:plane/screens/on_boarding/auth/invite_co_workers.dart'; import 'package:plane/utils/custom_toast.dart'; -import 'package:flutter_dotenv/flutter_dotenv.dart'; import 'package:plane/utils/enums.dart'; import 'package:plane/widgets/custom_rich_text.dart'; import 'package:plane/widgets/loading_widget.dart'; @@ -193,7 +193,7 @@ class _SetupWorkspaceState extends ConsumerState { left: 15, ), child: CustomText( - dotenv.env['WEB_URL']!, + Config.webUrl!, type: FontStyle.Small, color: themeProvider.themeManager .placeholderTextColor, diff --git a/lib/screens/on_boarding/auth/sign_in.dart b/lib/screens/on_boarding/auth/sign_in.dart index 9adcdfe..43bcab8 100644 --- a/lib/screens/on_boarding/auth/sign_in.dart +++ b/lib/screens/on_boarding/auth/sign_in.dart @@ -4,12 +4,12 @@ import 'dart:developer'; import 'dart:io'; import 'package:flutter/material.dart'; -import 'package:flutter_dotenv/flutter_dotenv.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_svg/svg.dart'; import 'package:google_sign_in/google_sign_in.dart'; import 'package:loading_indicator/loading_indicator.dart'; import 'package:plane/Authentication/google_sign_in.dart'; +import 'package:plane/config/config_variables.dart'; import 'package:plane/mixins/widget_state_mixin.dart'; import 'package:plane/utils/custom_toast.dart'; import 'package:plane/utils/enums.dart'; @@ -334,11 +334,8 @@ class _SignInScreenState extends ConsumerState const SizedBox( height: 30, ), - (Platform.isIOS && - dotenv.env['GOOGLE_SERVER_CLIENT_ID'] == - null) || - (Platform.isAndroid && - dotenv.env['GOOGLE_CLIENT_ID'] == null) + (Platform.isIOS && Config.googleServerClientId == null) || + (Platform.isAndroid && Config.googleClientId == null) ? Container() : Column( children: [ @@ -358,11 +355,8 @@ class _SignInScreenState extends ConsumerState ), ], ), - (Platform.isIOS && - dotenv.env['GOOGLE_SERVER_CLIENT_ID'] == - null) || - (Platform.isAndroid && - dotenv.env['GOOGLE_CLIENT_ID'] == null) + (Platform.isIOS && Config.googleServerClientId == null) || + (Platform.isAndroid && Config.googleClientId == null) ? Container() : (authProvider.googleAuthState == StateEnum.loading @@ -414,8 +408,7 @@ class _SignInScreenState extends ConsumerState ref .watch(ProviderList.authProvider) .googleAuth(data: { - "clientId": dotenv - .env['GOOGLE_SERVER_CLIENT_ID'], + "clientId": Config.googleServerClientId, "credential": googleAuth.idToken, "medium": "google" }, context: context, ref: ref).then( @@ -425,7 +418,6 @@ class _SignInScreenState extends ConsumerState profileProvider .getProfileState == StateEnum.success) { - if (profileProvider .userProfile.isOnboarded!) { Navigator.pushAndRemoveUntil( diff --git a/lib/startup/dependency_resolver.dart b/lib/startup/dependency_resolver.dart index c5f44c4..677f7cd 100644 --- a/lib/startup/dependency_resolver.dart +++ b/lib/startup/dependency_resolver.dart @@ -19,54 +19,60 @@ import '../utils/theme_manager.dart'; class DependencyResolver { static Future resolve({required WidgetRef ref}) async { - if (Const.accessToken == null) { - CustomToast(manager: ThemeManager(THEME.light)); - FlutterNativeSplash.remove(); - return; - } - final ProfileProvider profileProvider = - ref.read(ProviderList.profileProvider); - final WorkspaceProvider workspaceProvider = - ref.read(ProviderList.workspaceProvider); - - await _resolveUserProfile(ref).then((value) { - value.fold((userProfile) => null, (error) { + await _resolveConfig(ref).then((_) async { + if (Const.accessToken == null) { + CustomToast(manager: ThemeManager(THEME.light)); FlutterNativeSplash.remove(); - OverlayEntry entry = OverlayEntry(builder: (context) { - return Positioned( - width: MediaQuery.of(context).size.width, - bottom: 0, - child: CustomToast.getToastWithColorWidget( - 'Something went wrong while fetching your data, Please try again.', - toastType: ToastType.failure), - ); - }); - Overlay.of(ref.context).insert(entry); - Future.delayed(const Duration(seconds: 1), () { - entry.remove(); - }); return; + } + final ProfileProvider profileProvider = + ref.read(ProviderList.profileProvider); + final WorkspaceProvider workspaceProvider = + ref.read(ProviderList.workspaceProvider); + + await _resolveUserProfile(ref).then((value) { + value.fold((userProfile) => null, (error) { + FlutterNativeSplash.remove(); + OverlayEntry entry = OverlayEntry(builder: (context) { + return Positioned( + width: MediaQuery.of(context).size.width, + bottom: 0, + child: CustomToast.getToastWithColorWidget( + 'Something went wrong while fetching your data, Please try again.', + toastType: ToastType.failure), + ); + }); + Overlay.of(ref.context).insert(entry); + Future.delayed(const Duration(seconds: 1), () { + entry.remove(); + }); + return; + }); }); - }); - if (profileProvider.userProfile.isOnboarded == false) { - FlutterNativeSplash.remove(); - return; - } + if (profileProvider.userProfile.isOnboarded == false) { + FlutterNativeSplash.remove(); + return; + } - await _resolveProfileSetting(ref); + await _resolveProfileSetting(ref); - await _resolveWorkspaces(ref); - if (workspaceProvider.workspaces.isEmpty) { + await _resolveWorkspaces(ref); + if (workspaceProvider.workspaces.isEmpty) { + FlutterNativeSplash.remove(); + return; + } + _resolveTheme(ref); + _resolveDashBoard(ref); + _resolveProjects(ref); + _resolveMyIssues(ref); + _resolveNotifications(ref); + _resolveWhatsNew(ref); FlutterNativeSplash.remove(); - return; - } - _resolveTheme(ref); - _resolveDashBoard(ref); - _resolveProjects(ref); - _resolveMyIssues(ref); - _resolveNotifications(ref); - _resolveWhatsNew(ref); - FlutterNativeSplash.remove(); + }); + } + + static Future _resolveConfig(WidgetRef ref) async { + return await ref.read(ProviderList.configProvider.notifier).getConfig(); } static Future _resolveDashBoard(WidgetRef ref) async { diff --git a/lib/utils/editor.dart b/lib/utils/editor.dart index 4c1c49b..6db73de 100644 --- a/lib/utils/editor.dart +++ b/lib/utils/editor.dart @@ -4,10 +4,10 @@ import 'dart:convert'; import 'package:flutter/foundation.dart'; import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_dotenv/flutter_dotenv.dart'; import 'package:flutter_inappwebview/flutter_inappwebview.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:loading_indicator/loading_indicator.dart'; +import 'package:plane/config/config_variables.dart'; import 'package:plane/provider/issues_provider.dart'; import 'package:plane/provider/provider_list.dart'; import 'package:plane/utils/enums.dart'; @@ -36,7 +36,7 @@ class EDITOR extends ConsumerStatefulWidget { class _EDITORState extends ConsumerState { bool isLoading = true; late InAppWebViewController controller; - Uri baseWebUrl = Uri.parse(dotenv.env['WEB_URL']!); + Uri baseWebUrl = Uri.parse(Config.webUrl!); final cookieManager = CookieManager.instance(); @override diff --git a/lib/utils/global_functions.dart b/lib/utils/global_functions.dart index 97ebc4c..7c7af17 100644 --- a/lib/utils/global_functions.dart +++ b/lib/utils/global_functions.dart @@ -1,16 +1,16 @@ import 'package:flutter/material.dart'; -import 'package:flutter_dotenv/flutter_dotenv.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:plane/config/config_variables.dart'; import 'package:plane/main.dart'; import 'package:plane/provider/provider_list.dart'; import 'package:posthog_flutter/posthog_flutter.dart'; import 'package:sentry_flutter/sentry_flutter.dart'; void sentryService() { - if (dotenv.env['SENTRY_DSN'] != '' && dotenv.env['SENTRY_DSN'] != null) { + if (Config.sentryDsn != '' && Config.sentryDsn != null) { SentryFlutter.init( (options) { - options.dsn = dotenv.env['SENTRY_DSN']; + options.dsn = Config.sentryDsn; }, appRunner: () => runApp(const ProviderScope(child: MyApp())), ); @@ -23,10 +23,7 @@ void postHogService( {required String eventName, required Map properties, required WidgetRef ref}) { - if (dotenv.env['POSTHOG_API'] != null && - dotenv.env['POSTHOG_API'] != '' && - dotenv.env['ENABLE_TRACK_EVENTS'] == '1' && - dotenv.env['ENABLE_TRACK_EVENTS'] != null) { + if (Config.posthogApiKey != null && Config.posthogApiKey != '') { final profileProvider = ref.watch(ProviderList.profileProvider); properties.addAll( { diff --git a/lib/widgets/empty.dart b/lib/widgets/empty.dart index bc643a6..b14e229 100644 --- a/lib/widgets/empty.dart +++ b/lib/widgets/empty.dart @@ -206,7 +206,7 @@ class EmptyPlaceholder { WidgetRef? ref, IssueCategory? type}) { final themeProvider = ref!.watch(ProviderList.themeProvider); - final projectProvider = ref!.watch(ProviderList.projectProvider); + final projectProvider = ref.watch(ProviderList.projectProvider); return Container( alignment: Alignment.center, child: Column( diff --git a/pubspec.yaml b/pubspec.yaml index dddbf11..b4734e5 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -65,7 +65,7 @@ dependencies: flutter_html: any calendar_date_picker2: ^0.5.2 material_symbols_icons: ^4.2668.0 - sentry_flutter: ^7.10.1 + sentry_flutter: ^7.14.0 shimmer: ^3.0.0 posthog_flutter: ^3.1.0 flutter_inappwebview: ^5.8.0 From d579b2f6f98ea2a7933ffd3ce94667fd4792ea76 Mon Sep 17 00:00:00 2001 From: Khushal Singh Rao Date: Tue, 2 Jul 2024 13:26:07 +0530 Subject: [PATCH 2/5] chore: Migrated the deprecated imperative apply of Flutter's Gradle plugins to support Flutter 3.16 and onwards sdk --- android/app/build.gradle | 16 ++---- android/build.gradle | 13 ----- android/settings.gradle | 30 +++++++--- pubspec.lock | 120 ++++++++++++++++++++++----------------- 4 files changed, 96 insertions(+), 83 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index 7d5d91d..d7a4598 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -1,3 +1,9 @@ +plugins { + id "com.android.application" + id "kotlin-android" + id "dev.flutter.flutter-gradle-plugin" +} + def localProperties = new Properties() def localPropertiesFile = rootProject.file('local.properties') if (localPropertiesFile.exists()) { @@ -6,11 +12,6 @@ if (localPropertiesFile.exists()) { } } -def flutterRoot = localProperties.getProperty('flutter.sdk') -if (flutterRoot == null) { - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") -} - def flutterVersionCode = localProperties.getProperty('flutter.versionCode') if (flutterVersionCode == null) { flutterVersionCode = '1' @@ -21,10 +22,6 @@ if (flutterVersionName == null) { flutterVersionName = '1.0' } -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" - def keystoreProperties = new Properties() def keystorePropertiesFile = rootProject.file('key.properties') if (keystorePropertiesFile.exists()) { @@ -90,6 +87,5 @@ flutter { } dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation "androidx.multidex:multidex:2.0.1" } diff --git a/android/build.gradle b/android/build.gradle index 713d7f6..bc157bd 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -1,16 +1,3 @@ -buildscript { - ext.kotlin_version = '1.7.10' - repositories { - google() - mavenCentral() - } - - dependencies { - classpath 'com.android.tools.build:gradle:7.2.0' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - } -} - allprojects { repositories { google() diff --git a/android/settings.gradle b/android/settings.gradle index 44e62bc..b3c40a8 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -1,11 +1,25 @@ -include ':app' +pluginManagement { + def flutterSdkPath = { + def properties = new Properties() + file("local.properties").withInputStream { properties.load(it) } + def flutterSdkPath = properties.getProperty("flutter.sdk") + assert flutterSdkPath != null, "flutter.sdk not set in local.properties" + return flutterSdkPath + }() -def localPropertiesFile = new File(rootProject.projectDir, "local.properties") -def properties = new Properties() + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") -assert localPropertiesFile.exists() -localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} -def flutterSdkPath = properties.getProperty("flutter.sdk") -assert flutterSdkPath != null, "flutter.sdk not set in local.properties" -apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" +plugins { + id "dev.flutter.flutter-plugin-loader" version "1.0.0" + id "com.android.application" version "7.2.0" apply false + id "org.jetbrains.kotlin.android" version "1.7.10" apply false +} + +include ":app" \ No newline at end of file diff --git a/pubspec.lock b/pubspec.lock index 4cd1cb9..2747372 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -189,10 +189,10 @@ packages: dependency: transitive description: name: collection - sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a url: "https://pub.dev" source: hosted - version: "1.17.2" + version: "1.18.0" connectivity_plus: dependency: "direct main" description: @@ -221,10 +221,10 @@ packages: dependency: transitive description: name: coverage - sha256: "2fb815080e44a09b85e0f2ca8a820b15053982b2e714b59267719e8a9ff17097" + sha256: "3945034e86ea203af7a056d98e98e42a5518fff200d6e8e6647e1886b07e936e" url: "https://pub.dev" source: hosted - version: "1.6.3" + version: "1.8.0" cross_file: dependency: transitive description: @@ -333,10 +333,10 @@ packages: dependency: transitive description: name: file - sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" + sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" url: "https://pub.dev" source: hosted - version: "6.1.4" + version: "7.0.0" file_picker: dependency: "direct main" description: @@ -431,10 +431,10 @@ packages: dependency: "direct main" description: name: flutter_inappwebview - sha256: f73505c792cf083d5566e1a94002311be497d984b5607f25be36d685cf6361cf + sha256: d198297060d116b94048301ee6749cd2e7d03c1f2689783f52d210a6b7aba350 url: "https://pub.dev" source: hosted - version: "5.7.2+3" + version: "5.8.0" flutter_lints: dependency: "direct dev" description: @@ -476,7 +476,7 @@ packages: source: hosted version: "0.6.17+3" flutter_native_splash: - dependency: "direct dev" + dependency: "direct main" description: name: flutter_native_splash sha256: ecff62b3b893f2f665de7e4ad3de89f738941fcfcaaba8ee601e749efafa4698 @@ -767,6 +767,30 @@ packages: url: "https://pub.dev" source: hosted version: "4.8.1" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "78eb209deea09858f5269f5a5b02be4049535f568c07b275096836f01ea323fa" + url: "https://pub.dev" + source: hosted + version: "10.0.0" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: b46c5e37c19120a8a01918cfaf293547f47269f7cb4b0058f21531c2465d6ef0 + url: "https://pub.dev" + source: hosted + version: "2.0.1" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: a597f72a664dbd293f3bfc51f9ba69816f84dcd403cdac7066cb3f6003f3ab47 + url: "https://pub.dev" + source: hosted + version: "2.0.1" lints: dependency: transitive description: @@ -827,18 +851,18 @@ packages: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" material_symbols_icons: dependency: "direct main" description: @@ -851,10 +875,10 @@ packages: dependency: transitive description: name: meta - sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" + sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04 url: "https://pub.dev" source: hosted - version: "1.9.1" + version: "1.11.0" mime: dependency: transitive description: @@ -931,10 +955,10 @@ packages: dependency: transitive description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" path_parsing: dependency: transitive description: @@ -1019,10 +1043,10 @@ packages: dependency: transitive description: name: platform - sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76" + sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec" url: "https://pub.dev" source: hosted - version: "3.1.0" + version: "3.1.4" plugin_platform_interface: dependency: transitive description: @@ -1059,10 +1083,10 @@ packages: dependency: transitive description: name: process - sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" + sha256: "21e54fd2faf1b5bdd5102afd25012184a6793927648ea81eea80552ac9405b32" url: "https://pub.dev" source: hosted - version: "4.2.4" + version: "5.0.2" pub_semver: dependency: transitive description: @@ -1123,18 +1147,18 @@ packages: dependency: transitive description: name: sentry - sha256: "830667eadc0398fea3a3424ed1b74568e2db603a42758d0922e2f2974ce55a60" + sha256: "57514bc72d441ffdc463f498d6886aa586a2494fa467a1eb9d649c28010d7ee3" url: "https://pub.dev" source: hosted - version: "7.10.1" + version: "7.20.2" sentry_flutter: dependency: "direct main" description: name: sentry_flutter - sha256: "6730f41b304c6fb0fa590dacccaf73ba11082fc64b274cfe8a79776f2b95309c" + sha256: "9723d58470ca43a360681ddd26abb71ca7b815f706bc8d3747afd054cf639ded" url: "https://pub.dev" source: hosted - version: "7.10.1" + version: "7.20.2" shared_preferences: dependency: "direct main" description: @@ -1163,10 +1187,10 @@ packages: dependency: transitive description: name: shared_preferences_linux - sha256: c2eb5bf57a2fe9ad6988121609e47d3e07bb3bdca5b6f8444e4cf302428a128a + sha256: "9f2cbcf46d4270ea8be39fa156d86379077c8a5228d9dfdb1164ae0bb93f1faa" url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.3.2" shared_preferences_platform_interface: dependency: transitive description: @@ -1187,10 +1211,10 @@ packages: dependency: transitive description: name: shared_preferences_windows - sha256: f763a101313bd3be87edffe0560037500967de9c394a714cd598d945517f694f + sha256: "841ad54f3c8381c480d0c9b508b89a34036f512482c407e6df7a9c4aa2ef8f59" url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.3.2" shelf: dependency: transitive description: @@ -1288,10 +1312,10 @@ packages: dependency: transitive description: name: stack_trace - sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" url: "https://pub.dev" source: hosted - version: "1.11.0" + version: "1.11.1" state_notifier: dependency: transitive description: @@ -1304,10 +1328,10 @@ packages: dependency: transitive description: name: stream_channel - sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" stream_transform: dependency: transitive description: @@ -1376,26 +1400,26 @@ packages: dependency: transitive description: name: test - sha256: "13b41f318e2a5751c3169137103b60c584297353d4b1761b66029bae6411fe46" + sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f url: "https://pub.dev" source: hosted - version: "1.24.3" + version: "1.24.9" test_api: dependency: transitive description: name: test_api - sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8" + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" url: "https://pub.dev" source: hosted - version: "0.6.0" + version: "0.6.1" test_core: dependency: transitive description: name: test_core - sha256: "99806e9e6d95c7b059b7a0fc08f07fc53fabe54a829497f0d9676299f1e8637e" + sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a url: "https://pub.dev" source: hosted - version: "0.5.3" + version: "0.5.9" timezone: dependency: transitive description: @@ -1552,10 +1576,10 @@ packages: dependency: transitive description: name: vm_service - sha256: c620a6f783fa22436da68e42db7ebbf18b8c44b9a46ab911f666ff09ffd9153f + sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 url: "https://pub.dev" source: hosted - version: "11.7.1" + version: "13.0.0" watcher: dependency: transitive description: @@ -1564,14 +1588,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.0" - web: - dependency: transitive - description: - name: web - sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10 - url: "https://pub.dev" - source: hosted - version: "0.1.4-beta" web_socket_channel: dependency: transitive description: @@ -1584,10 +1600,10 @@ packages: dependency: transitive description: name: webdriver - sha256: "3c923e918918feeb90c4c9fdf1fe39220fa4c0e8e2c0fffaded174498ef86c49" + sha256: "003d7da9519e1e5f329422b36c4dcdf18d7d2978d1ba099ea4e45ba490ed845e" url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "3.0.3" webkit_inspection_protocol: dependency: transitive description: @@ -1645,5 +1661,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.1.0 <4.0.0" + dart: ">=3.2.0-0 <4.0.0" flutter: ">=3.10.0" From bfa01763c4054425e7ca7e05446ce43a240bd53f Mon Sep 17 00:00:00 2001 From: Khushal Singh Rao Date: Tue, 2 Jul 2024 13:29:36 +0530 Subject: [PATCH 3/5] chore: updated cached_network_image plugin version --- pubspec.lock | 24 ++++++++---------------- pubspec.yaml | 6 +++--- 2 files changed, 11 insertions(+), 19 deletions(-) diff --git a/pubspec.lock b/pubspec.lock index 2747372..aeb7ff5 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -125,26 +125,26 @@ packages: dependency: "direct main" description: name: cached_network_image - sha256: fd3d0dc1d451f9a252b32d95d3f0c3c487bc41a75eba2e6097cb0b9c71491b15 + sha256: "28ea9690a8207179c319965c13cd8df184d5ee721ae2ce60f398ced1219cea1f" url: "https://pub.dev" source: hosted - version: "3.2.3" + version: "3.3.1" cached_network_image_platform_interface: dependency: transitive description: name: cached_network_image_platform_interface - sha256: bb2b8403b4ccdc60ef5f25c70dead1f3d32d24b9d6117cfc087f496b178594a7 + sha256: "9e90e78ae72caa874a323d78fa6301b3fb8fa7ea76a8f96dc5b5bf79f283bf2f" url: "https://pub.dev" source: hosted - version: "2.0.0" + version: "4.0.0" cached_network_image_web: dependency: transitive description: name: cached_network_image_web - sha256: b8eb814ebfcb4dea049680f8c1ffb2df399e4d03bf7a352c775e26fa06e02fa0 + sha256: "205d6a9f1862de34b93184f22b9d2d94586b2f05c581d546695e3d8f6a805cd7" url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "1.2.0" calendar_date_picker2: dependency: "direct main" description: @@ -390,14 +390,6 @@ packages: description: flutter source: sdk version: "0.0.0" - flutter_blurhash: - dependency: transitive - description: - name: flutter_blurhash - sha256: "05001537bd3fac7644fa6558b09ec8c0a3f2eba78c0765f88912882b1331a5c6" - url: "https://pub.dev" - source: hosted - version: "0.7.0" flutter_cache_manager: dependency: transitive description: @@ -915,10 +907,10 @@ packages: dependency: transitive description: name: octo_image - sha256: "107f3ed1330006a3bea63615e81cf637433f5135a52466c7caa0e7152bca9143" + sha256: "45b40f99622f11901238e18d48f5f12ea36426d8eced9f4cbf58479c7aa2430d" url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "2.0.0" os_detect: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index b4734e5..2166dfd 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -29,7 +29,7 @@ environment: # versions available, run `flutter pub outdated`. dependencies: animations: ^2.0.7 - cached_network_image: ^3.2.3 + cached_network_image: ^3.3.1 cupertino_icons: ^1.0.2 dio: ^5.1.2 emoji_picker_flutter: ^1.5.4 @@ -78,11 +78,11 @@ dependencies: dev_dependencies: build_runner: ^2.1.7 flutter_lints: ^2.0.0 - + flutter_test: sdk: flutter integration_test: - sdk: flutter + sdk: flutter flutter_native_splash: color: "#3F76FF" From 7f60aae9407f3cb771eb2b2547ce419f4c27abf8 Mon Sep 17 00:00:00 2001 From: Khushal Singh Rao Date: Tue, 2 Jul 2024 13:47:19 +0530 Subject: [PATCH 4/5] chore: updated flutter_slidable package version --- pubspec.lock | 4 ++-- pubspec.yaml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pubspec.lock b/pubspec.lock index aeb7ff5..f43bb17 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -495,10 +495,10 @@ packages: dependency: "direct main" description: name: flutter_slidable - sha256: cc4231579e3eae41ae166660df717f4bad1359c87f4a4322ad8ba1befeb3d2be + sha256: "673403d2eeef1f9e8483bd6d8d92aae73b1d8bd71f382bc3930f699c731bc27c" url: "https://pub.dev" source: hosted - version: "3.0.0" + version: "3.1.0" flutter_svg: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 2166dfd..29e02ff 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -39,7 +39,7 @@ dependencies: flutter_dotenv: ^5.1.0 flutter_local_notifications: ^15.1.0+1 flutter_riverpod: ^2.3.6 - flutter_slidable: ^3.0.0 + flutter_slidable: ^3.1.0 flutter_svg: ^2.0.7 fluttertoast: ^8.2.2 font_awesome_flutter: ^10.4.0 From 868512bdbcd562d6f5907103eb78bd3cd8e791b9 Mon Sep 17 00:00:00 2001 From: Khushal Singh Rao Date: Tue, 2 Jul 2024 13:48:40 +0530 Subject: [PATCH 5/5] chore: removed unnecessary debug signingConfigs --- android/app/build.gradle | 7 ------- 1 file changed, 7 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index d7a4598..30e339c 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -64,12 +64,6 @@ android { storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null storePassword keystoreProperties['storePassword'] } - debug { - keyAlias keystoreProperties['keyAlias'] - keyPassword keystoreProperties['keyPassword'] - storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null - storePassword keystoreProperties['storePassword'] - } } buildTypes { @@ -77,7 +71,6 @@ android { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. signingConfig signingConfigs.release - signingConfig signingConfigs.debug } } }