From 5580352f5646d7e1a49e91e5d07ca672e1c71742 Mon Sep 17 00:00:00 2001 From: Aman Date: Mon, 11 Jul 2022 22:20:21 +0530 Subject: [PATCH 1/4] rfac: remove unnecessary focus state variable Signed-off-by: Aman --- lib/presentation/login/bloc/login_bloc.dart | 14 +-- lib/presentation/login/bloc/login_state.dart | 6 -- .../login/widgets/background_decoration.dart | 4 +- .../login/widgets/login_widgets.dart | 3 +- .../login/widgets/text_fields.dart | 93 ++++++++----------- test/presentation/login/login_test.dart | 8 +- 6 files changed, 45 insertions(+), 83 deletions(-) diff --git a/lib/presentation/login/bloc/login_bloc.dart b/lib/presentation/login/bloc/login_bloc.dart index 6cbf7d88..6f2ca76e 100644 --- a/lib/presentation/login/bloc/login_bloc.dart +++ b/lib/presentation/login/bloc/login_bloc.dart @@ -29,8 +29,6 @@ class LoginBloc extends Bloc { if (!state.isFormFilled()) return; emit(state.copyWith( - isPasswordFocused: false, - isUsernameFocused: false, status: const Status.loading(), )); @@ -84,18 +82,10 @@ class LoginBloc extends Bloc { } void _updatePasswordInput(PasswordInput event, Emitter emit) { - emit(state.copyWith( - isPasswordFocused: true, - isUsernameFocused: false, - password: event.value, - )); + emit(state.copyWith(password: event.value)); } void _updateUsernameInput(UsernameInput event, Emitter emit) { - emit(state.copyWith( - isUsernameFocused: true, - isPasswordFocused: false, - username: event.value, - )); + emit(state.copyWith(username: event.value)); } } diff --git a/lib/presentation/login/bloc/login_state.dart b/lib/presentation/login/bloc/login_state.dart index 019724c3..a43298d4 100644 --- a/lib/presentation/login/bloc/login_state.dart +++ b/lib/presentation/login/bloc/login_state.dart @@ -6,12 +6,6 @@ part of 'login_bloc.dart'; class LoginState with _$LoginState { /// State class for [LoginBloc]. const factory LoginState({ - /// Whether the username field is in focus. - @Default(false) bool isUsernameFocused, - - /// Whether the password field is in focus. - @Default(false) bool isPasswordFocused, - /// Whether the password field should be obscured. @Default(true) bool obscurePassword, diff --git a/lib/presentation/login/widgets/background_decoration.dart b/lib/presentation/login/widgets/background_decoration.dart index a168eaf8..ba059f2d 100644 --- a/lib/presentation/login/widgets/background_decoration.dart +++ b/lib/presentation/login/widgets/background_decoration.dart @@ -15,7 +15,7 @@ class BackgroundDecoration extends StatelessWidget { Positioned( top: 0, left: 0, - child: SvgPicture.asset( + child: svg.SvgPicture.asset( AppAssets.circle1, width: 170.r, ), @@ -23,7 +23,7 @@ class BackgroundDecoration extends StatelessWidget { Positioned( top: 80.r, right: 0, - child: SvgPicture.asset( + child: svg.SvgPicture.asset( AppAssets.triangle, width: 140.r, ), diff --git a/lib/presentation/login/widgets/login_widgets.dart b/lib/presentation/login/widgets/login_widgets.dart index c3da7f39..c0757c35 100644 --- a/lib/presentation/login/widgets/login_widgets.dart +++ b/lib/presentation/login/widgets/login_widgets.dart @@ -2,7 +2,8 @@ import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:flutter_svg/flutter_svg.dart'; +import 'package:flutter_svg/flutter_svg.dart' as svg; +import 'package:flutter_svg_provider/flutter_svg_provider.dart'; import 'package:get/get.dart'; import '../../../data/constants/assets.dart'; diff --git a/lib/presentation/login/widgets/text_fields.dart b/lib/presentation/login/widgets/text_fields.dart index 239b0286..9a38cc58 100644 --- a/lib/presentation/login/widgets/text_fields.dart +++ b/lib/presentation/login/widgets/text_fields.dart @@ -7,45 +7,35 @@ class PasswordField extends StatelessWidget { @override Widget build(BuildContext context) { - // [BlocSelector] is not used because widget depends on both - // [state.isPasswordFocused] and [state.obscurePassword]. - return BlocBuilder( - builder: (context, state) { - return Stack( - alignment: Alignment.centerRight, - children: [ - TextInput( - action: TextInputAction.done, - hint: 'Password', - keyboard: TextInputType.visiblePassword, - obscureText: state.obscurePassword, - onChanged: (value) => - context.read().add(PasswordInput(value)), - prefix: Padding( - padding: EdgeInsets.symmetric( - horizontal: 8.r, - vertical: 10.r, - ), - child: SvgPicture.asset( - AppAssets.lock, - // TODO(BURG3R5): Deal with Focus transfer. - color: (state.isPasswordFocused) - ? AppColors.primary - : AppColors.grey1, - ), - ), + return BlocSelector( + selector: (state) => state.obscurePassword, + builder: (context, obscurePassword) { + return TextInput( + action: TextInputAction.done, + hint: 'Password', + keyboard: TextInputType.visiblePassword, + obscureText: obscurePassword, + onChanged: (value) => + context.read().add(PasswordInput(value)), + prefix: Padding( + padding: EdgeInsets.symmetric( + horizontal: 8.r, + vertical: 10.r, + ), + // TODO(BURG3R5): Deal with Focus transfer. + child: const ImageIcon( + Svg(AppAssets.lock), ), - IconButton( - icon: SvgPicture.asset( - (state.obscurePassword) ? AppAssets.eyeOff : AppAssets.eyeOn, - color: state.isPasswordFocused - ? AppColors.primary - : AppColors.grey1, + ), + suffix: IconButton( + icon: ImageIcon( + Svg( + obscurePassword ? AppAssets.eyeOff : AppAssets.eyeOn, ), - onPressed: () => - context.read().add(const ToggleObscure()), ), - ], + onPressed: () => + context.read().add(const ToggleObscure()), + ), ); }, ); @@ -59,25 +49,18 @@ class UsernameField extends StatelessWidget { @override Widget build(BuildContext context) { - return BlocSelector( - selector: (state) => state.isUsernameFocused, - builder: (context, isUsernameFocused) { - return TextInput( - hint: 'Username', - onChanged: (value) => - context.read().add(UsernameInput(value)), - prefix: Padding( - padding: EdgeInsets.symmetric( - horizontal: 8.r, - vertical: 10.r, - ), - child: SvgPicture.asset( - AppAssets.person, - color: isUsernameFocused ? AppColors.primary : AppColors.grey1, - ), - ), - ); - }, + return TextInput( + hint: 'Username', + onChanged: (value) => context.read().add(UsernameInput(value)), + prefix: Padding( + padding: EdgeInsets.symmetric( + horizontal: 8.r, + vertical: 10.r, + ), + child: const ImageIcon( + Svg(AppAssets.person), + ), + ), ); } } diff --git a/test/presentation/login/login_test.dart b/test/presentation/login/login_test.dart index 70404c17..280b00ea 100644 --- a/test/presentation/login/login_test.dart +++ b/test/presentation/login/login_test.dart @@ -14,8 +14,6 @@ void blocTests() { bloc.state, const LoginState( rememberMe: true, - isUsernameFocused: false, - isPasswordFocused: false, obscurePassword: true, showDialog: false, status: Status(), @@ -60,9 +58,7 @@ void blocTests() { ..add(const PasswordInput('')) ..add(const UsernameInput('A')), expect: () => const [ - LoginState(isUsernameFocused: true), - LoginState(isPasswordFocused: true), - LoginState(isUsernameFocused: true, username: 'A'), + LoginState(username: 'A'), ], ); @@ -75,12 +71,10 @@ void blocTests() { expect: () => const [ LoginState( username: 'username', - isUsernameFocused: true, ), LoginState( username: 'username', password: 'password', - isPasswordFocused: true, ), ], ); From 5cb798d4a42967783678ef88d3d90ae38eb8047a Mon Sep 17 00:00:00 2001 From: Aman Date: Tue, 12 Jul 2022 01:20:00 +0530 Subject: [PATCH 2/4] bfix: fix textfield cursor when typed fast Signed-off-by: Aman --- .../components/inputs/form_input.dart | 6 + .../components/inputs/text_input.dart | 3 + .../contests/widgets/contest_card.dart | 4 +- .../signup/bloc/sign_up_bloc.dart | 8 +- .../signup/bloc/sign_up_state.dart | 8 +- lib/presentation/signup/signup_screen.dart | 12 +- .../signup/widgets/pop_button.dart | 2 +- .../signup/widgets/signup_pages.dart | 135 +++++++++--------- .../signup/widgets/signup_widgets.dart | 3 +- 9 files changed, 94 insertions(+), 87 deletions(-) diff --git a/lib/presentation/components/inputs/form_input.dart b/lib/presentation/components/inputs/form_input.dart index 9884df50..cd974397 100644 --- a/lib/presentation/components/inputs/form_input.dart +++ b/lib/presentation/components/inputs/form_input.dart @@ -18,6 +18,8 @@ class FormInput extends StatelessWidget { this.maxLines = 1, this.obscureText = false, this.onChanged, + this.onSubmitted, + this.onEditingComplete, this.prefix, Key? key, }) : assert( @@ -34,10 +36,12 @@ class FormInput extends StatelessWidget { final String title; final String? errorText; final Function(String)? onChanged; + final Function(String)? onSubmitted; final TextInputAction action; final TextInputType? keyboard; final TextEditingController? controller; final Widget? prefix; + final Function()? onEditingComplete; @override Widget build(BuildContext context) { @@ -65,6 +69,8 @@ class FormInput extends StatelessWidget { controller: enabled ? controller : null, prefix: prefix, errorText: errorText, + onEditingComplete: onEditingComplete, + onSubmitted: onSubmitted, ), ], ); diff --git a/lib/presentation/components/inputs/text_input.dart b/lib/presentation/components/inputs/text_input.dart index dcc52d0c..7be46454 100644 --- a/lib/presentation/components/inputs/text_input.dart +++ b/lib/presentation/components/inputs/text_input.dart @@ -23,6 +23,7 @@ class TextInput extends StatelessWidget { this.fillColor, this.border, this.onSubmitted, + this.onEditingComplete, this.prefixIconConstraints, this.validator, Key? key, @@ -49,6 +50,7 @@ class TextInput extends StatelessWidget { final InputBorder? border; final BoxConstraints? prefixIconConstraints; final String? Function(String?)? validator; + final Function()? onEditingComplete; @override Widget build(BuildContext context) { @@ -83,6 +85,7 @@ class TextInput extends StatelessWidget { onChanged: onChanged, style: AppStyles.h6.copyWith(color: AppColors.grey3), textInputAction: action, + onEditingComplete: onEditingComplete, onFieldSubmitted: onSubmitted, ); } diff --git a/lib/presentation/contests/widgets/contest_card.dart b/lib/presentation/contests/widgets/contest_card.dart index 54f26699..7a8912e7 100644 --- a/lib/presentation/contests/widgets/contest_card.dart +++ b/lib/presentation/contests/widgets/contest_card.dart @@ -290,12 +290,12 @@ extension on Ongoing { String get platformName => PlatformUtil.getName(platform); String get icon => PlatformUtil.getIcon(platform); String get time => - 'Ends on ${DateFormat('dd, MMMM yyyy hh:mm a').format(endTime)}'; + 'Ends on ${DateFormat('dd MMMM, yyyy hh:mm a').format(endTime)}'; } extension on Upcoming { String get platformName => PlatformUtil.getName(platform); String get icon => PlatformUtil.getIcon(platform); String get time => - 'Starts on ${DateFormat('dd, MMMM yyyy hh:mm a').format(startTime)}'; + 'Starts on ${DateFormat('dd MMMM, yyyy hh:mm a').format(startTime)}'; } diff --git a/lib/presentation/signup/bloc/sign_up_bloc.dart b/lib/presentation/signup/bloc/sign_up_bloc.dart index 36e6a129..b90db928 100644 --- a/lib/presentation/signup/bloc/sign_up_bloc.dart +++ b/lib/presentation/signup/bloc/sign_up_bloc.dart @@ -71,6 +71,7 @@ class SignUpBloc extends Bloc { Future _initialize(Initialize event, Emitter emit) async { // initialize controllers final newState = state.copyWith( + status: const Status(), emailController: TextEditingController(), instituteController: TextEditingController(), nameController: TextEditingController(), @@ -188,8 +189,6 @@ class SignUpBloc extends Bloc { void _updatePassword(PasswordInput event, Emitter emit) { emit(state.copyWith( - isPasswordFocused: true, - isUsernameFocused: false, passwordController: state.passwordController?.updateWith(event.value), )); } @@ -199,8 +198,6 @@ class SignUpBloc extends Bloc { Emitter emit, ) async { emit(state.copyWith( - isUsernameFocused: true, - isPasswordFocused: false, usernameController: state.usernameController?.updateWith(event.value), )); if (event.value.length >= 3) { @@ -228,7 +225,8 @@ extension on TextEditingController { final controller = TextEditingController(text: value); // ignore: cascade_invocations controller.selection = TextSelection.fromPosition( - TextPosition(offset: selection.baseOffset), + TextPosition(offset: value.length), + // TextPosition(offset: selection.baseOffset), ); return controller; } diff --git a/lib/presentation/signup/bloc/sign_up_state.dart b/lib/presentation/signup/bloc/sign_up_state.dart index c7ef8a3e..f8733afd 100644 --- a/lib/presentation/signup/bloc/sign_up_state.dart +++ b/lib/presentation/signup/bloc/sign_up_state.dart @@ -14,12 +14,6 @@ class SignUpState with _$SignUpState { /// Whether the name field is in focus. @Default(false) bool isNameFocused, - /// Whether the password field is in focus. - @Default(false) bool isPasswordFocused, - - /// Whether the username field is in focus. - @Default(false) bool isUsernameFocused, - /// Whether the username entered is unique. @Default(true) bool isUsernameUnique, @@ -55,7 +49,7 @@ class SignUpState with _$SignUpState { @Default({}) Map handleControllers, /// State of the screen. - @Default(Status()) Status status, + @Default(Status.loading()) Status status, }) = _SignUpState; const SignUpState._(); diff --git a/lib/presentation/signup/signup_screen.dart b/lib/presentation/signup/signup_screen.dart index ff12ca05..2477d97c 100644 --- a/lib/presentation/signup/signup_screen.dart +++ b/lib/presentation/signup/signup_screen.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; +import '../../domain/models/status.dart'; import 'bloc/sign_up_bloc.dart'; import 'widgets/signup_widgets.dart'; @@ -16,15 +17,18 @@ class SignUpScreen extends StatelessWidget { create: (_) => SignUpBloc()..add(const Initialize()), child: SnackBarWrapper( child: ScrollAndNavWrapper( - child: BlocSelector( - selector: (state) => state.pageIndex, - builder: (context, pageIndex) { + child: BlocBuilder( + builder: (context, state) { + if (state.status is Loading) { + return Container(); + } + return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ const PopButton(), SizedBox(height: 25.r), - signUpPages[pageIndex](), + signUpPages[state.pageIndex](), SizedBox(height: 25.r), ], ); diff --git a/lib/presentation/signup/widgets/pop_button.dart b/lib/presentation/signup/widgets/pop_button.dart index 0540d126..bad73543 100644 --- a/lib/presentation/signup/widgets/pop_button.dart +++ b/lib/presentation/signup/widgets/pop_button.dart @@ -15,7 +15,7 @@ class PopButton extends StatelessWidget { } else { return GestureDetector( onTap: () => context.read().add(const Back()), - child: SvgPicture.asset( + child: svg.SvgPicture.asset( AppAssets.arrowBackward, width: 16.r, ), diff --git a/lib/presentation/signup/widgets/signup_pages.dart b/lib/presentation/signup/widgets/signup_pages.dart index 8ed4c56b..a9947d86 100644 --- a/lib/presentation/signup/widgets/signup_pages.dart +++ b/lib/presentation/signup/widgets/signup_pages.dart @@ -2,6 +2,8 @@ part of 'signup_widgets.dart'; Widget _pageOne() { return BlocBuilder( + buildWhen: (previous, current) => + previous.isEmailUnique ^ current.isEmailUnique, builder: (context, state) { return Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -27,39 +29,47 @@ Widget _pageOne() { 'Institute (optional)', style: AppStyles.h4.copyWith(fontWeight: FontWeight.w900), ), + _buildInstituteInput(), SizedBox(height: 8.r), - TypeAheadFormField( - onSuggestionSelected: (value) => - context.read().add(InstituteInput(value)), - itemBuilder: (context, suggestion) => - ListTile(title: Text(suggestion)), - textFieldConfiguration: TextFieldConfiguration( - onChanged: (value) => - context.read().add(InstituteInput(value)), - controller: state.instituteController, - decoration: InputDecoration( - hintText: 'Enter the name of your institute', - hintStyle: AppStyles.h6, - border: OutlineInputBorder( - borderRadius: BorderRadius.circular(2.r), - borderSide: const BorderSide(color: AppColors.primary), - ), - focusedBorder: const OutlineInputBorder( - borderSide: BorderSide( - color: AppColors.primary, - width: 1.5, - ), - ), + ], + ); + }, + ); +} + +Widget _buildInstituteInput() { + return BlocSelector( + selector: (state) => state.instituteController, + builder: (context, controller) { + return TypeAheadFormField( + onSuggestionSelected: (value) => + context.read().add(InstituteInput(value)), + itemBuilder: (context, suggestion) => ListTile(title: Text(suggestion)), + textFieldConfiguration: TextFieldConfiguration( + onSubmitted: (value) => + context.read().add(InstituteInput(value)), + controller: controller, + decoration: InputDecoration( + hintText: 'Enter the name of your institute', + hintStyle: AppStyles.h6, + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(2.r), + borderSide: const BorderSide(color: AppColors.primary), + ), + focusedBorder: const OutlineInputBorder( + borderSide: BorderSide( + color: AppColors.primary, + width: 1.5, ), ), - suggestionsCallback: (pattern) { - pattern = pattern.toLowerCase(); - return SignUpBloc.institutes.where( - (element) => element.toLowerCase().contains(pattern), - ); - }, ), - ], + ), + suggestionsCallback: (pattern) { + pattern = pattern.toLowerCase(); + return SignUpBloc.institutes.where( + (element) => element.toLowerCase().contains(pattern), + ); + }, ); }, ); @@ -67,6 +77,7 @@ Widget _pageOne() { Widget _pageTwo() { return BlocBuilder( + buildWhen: (previous, current) => false, builder: (context, state) { return Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -199,7 +210,7 @@ Widget _pageThree() { border: Border.all(color: AppColors.grey1), borderRadius: BorderRadius.circular(90.r), ), - child: SvgPicture.asset( + child: svg.SvgPicture.asset( AppAssets.defaultUserIcon, fit: BoxFit.fill, ), @@ -245,6 +256,8 @@ Widget _pageThree() { Widget _pageFour() { return BlocBuilder( + buildWhen: (previous, current) => + previous.obscurePassword ^ current.obscurePassword, builder: (context, state) { return Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -266,50 +279,38 @@ Widget _pageFour() { horizontal: 8.r, vertical: 10.r, ), - child: SvgPicture.asset( - AppAssets.person, - color: state.isUsernameFocused - ? AppColors.primary - : AppColors.grey1, + child: const ImageIcon( + Svg(AppAssets.person), ), ), ), SizedBox(height: 34.r), - Stack( - alignment: Alignment.centerRight, - children: [ - TextInput( - action: TextInputAction.done, - hint: 'Password', - keyboard: TextInputType.visiblePassword, - obscureText: state.obscurePassword, - controller: state.passwordController, - onChanged: (value) => - context.read().add(PasswordInput(value)), - prefix: Padding( - padding: EdgeInsets.symmetric( - horizontal: 8.r, - vertical: 10.r, - ), - child: SvgPicture.asset( - AppAssets.lock, - color: (state.isPasswordFocused) - ? AppColors.primary - : AppColors.grey1, - ), - ), + TextInput( + action: TextInputAction.done, + hint: 'Password', + keyboard: TextInputType.visiblePassword, + obscureText: state.obscurePassword, + controller: state.passwordController, + onChanged: (value) => + context.read().add(PasswordInput(value)), + prefix: Padding( + padding: EdgeInsets.symmetric( + horizontal: 8.r, + vertical: 10.r, ), - IconButton( - icon: SvgPicture.asset( - (state.obscurePassword) ? AppAssets.eyeOff : AppAssets.eyeOn, - color: state.isPasswordFocused - ? AppColors.primary - : AppColors.grey1, + child: const ImageIcon( + Svg(AppAssets.lock), + ), + ), + suffix: IconButton( + icon: ImageIcon( + Svg( + state.obscurePassword ? AppAssets.eyeOff : AppAssets.eyeOn, ), - onPressed: () => - context.read().add(const ToggleObscure()), ), - ], + onPressed: () => + context.read().add(const ToggleObscure()), + ), ), ], ); diff --git a/lib/presentation/signup/widgets/signup_widgets.dart b/lib/presentation/signup/widgets/signup_widgets.dart index 752afc69..62df0d2f 100644 --- a/lib/presentation/signup/widgets/signup_widgets.dart +++ b/lib/presentation/signup/widgets/signup_widgets.dart @@ -3,7 +3,8 @@ import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:flutter_svg/flutter_svg.dart'; +import 'package:flutter_svg/flutter_svg.dart' as svg; +import 'package:flutter_svg_provider/flutter_svg_provider.dart'; import 'package:flutter_typeahead/flutter_typeahead.dart'; import 'package:get/get.dart'; From 42fb7c33c0db06b3abc5d99588a6496257e0a3d3 Mon Sep 17 00:00:00 2001 From: Aman Date: Sun, 17 Jul 2022 05:52:37 +0530 Subject: [PATCH 3/4] bfix: fix test Signed-off-by: Aman --- test/presentation/login/login_test.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/test/presentation/login/login_test.dart b/test/presentation/login/login_test.dart index 280b00ea..bdd3cc45 100644 --- a/test/presentation/login/login_test.dart +++ b/test/presentation/login/login_test.dart @@ -58,6 +58,7 @@ void blocTests() { ..add(const PasswordInput('')) ..add(const UsernameInput('A')), expect: () => const [ + LoginState(), LoginState(username: 'A'), ], ); From 75f3db86e4407efb76f8926f12e2bb56edea093c Mon Sep 17 00:00:00 2001 From: Aman Date: Sun, 17 Jul 2022 06:53:39 +0530 Subject: [PATCH 4/4] chor: bump dependencies Signed-off-by: Aman --- android/build.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- pubspec.lock | 104 +++++++++--------- 3 files changed, 54 insertions(+), 54 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index 254b2088..5fff48df 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -6,7 +6,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:4.1.0' + classpath 'com.android.tools.build:gradle:7.0.2' classpath 'com.google.gms:google-services:4.3.8' classpath 'com.google.firebase:firebase-crashlytics-gradle:2.7.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index bc6a58af..b8793d3c 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip diff --git a/pubspec.lock b/pubspec.lock index ff7a1121..0a2b43cc 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -70,7 +70,7 @@ packages: name: build_config url: "https://pub.dartlang.org" source: hosted - version: "1.0.0" + version: "1.1.0" build_daemon: dependency: transitive description: @@ -84,14 +84,14 @@ packages: name: build_resolvers url: "https://pub.dartlang.org" source: hosted - version: "2.0.8" + version: "2.0.9" build_runner: dependency: "direct dev" description: name: build_runner url: "https://pub.dartlang.org" source: hosted - version: "2.1.11" + version: "2.2.0" build_runner_core: dependency: transitive description: @@ -112,7 +112,7 @@ packages: name: built_value url: "https://pub.dartlang.org" source: hosted - version: "8.3.0" + version: "8.4.0" cached_network_image: dependency: "direct main" description: @@ -140,7 +140,7 @@ packages: name: card_swiper url: "https://pub.dartlang.org" source: hosted - version: "2.0.3" + version: "2.0.4" characters: dependency: transitive description: @@ -203,7 +203,7 @@ packages: name: convert url: "https://pub.dartlang.org" source: hosted - version: "3.0.1" + version: "3.0.2" coverage: dependency: transitive description: @@ -217,7 +217,7 @@ packages: name: cross_file url: "https://pub.dartlang.org" source: hosted - version: "0.3.3" + version: "0.3.3+1" crypto: dependency: transitive description: @@ -238,7 +238,7 @@ packages: name: dbus url: "https://pub.dartlang.org" source: hosted - version: "0.7.3" + version: "0.7.4" diff_match_patch: dependency: transitive description: @@ -294,56 +294,56 @@ packages: name: firebase_core url: "https://pub.dartlang.org" source: hosted - version: "1.17.0" + version: "1.19.2" firebase_core_platform_interface: dependency: transitive description: name: firebase_core_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "4.4.0" + version: "4.4.3" firebase_core_web: dependency: transitive description: name: firebase_core_web url: "https://pub.dartlang.org" source: hosted - version: "1.6.4" + version: "1.7.0" firebase_crashlytics: dependency: "direct main" description: name: firebase_crashlytics url: "https://pub.dartlang.org" source: hosted - version: "2.8.0" + version: "2.8.5" firebase_crashlytics_platform_interface: dependency: transitive description: name: firebase_crashlytics_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "3.2.6" + version: "3.2.11" firebase_messaging: dependency: "direct main" description: name: firebase_messaging url: "https://pub.dartlang.org" source: hosted - version: "11.4.0" + version: "11.4.4" firebase_messaging_platform_interface: dependency: transitive description: name: firebase_messaging_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "3.5.0" + version: "3.5.4" firebase_messaging_web: dependency: transitive description: name: firebase_messaging_web url: "https://pub.dartlang.org" source: hosted - version: "2.4.0" + version: "2.4.4" firebase_remote_config: dependency: "direct main" description: @@ -357,14 +357,14 @@ packages: name: firebase_remote_config_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "1.1.6" + version: "1.1.11" firebase_remote_config_web: dependency: transitive description: name: firebase_remote_config_web url: "https://pub.dartlang.org" source: hosted - version: "1.0.12" + version: "1.1.0" fixnum: dependency: transitive description: @@ -404,7 +404,7 @@ packages: name: flutter_keyboard_visibility url: "https://pub.dartlang.org" source: hosted - version: "5.2.0" + version: "5.3.0" flutter_keyboard_visibility_platform_interface: dependency: transitive description: @@ -425,7 +425,7 @@ packages: name: flutter_launcher_icons url: "https://pub.dartlang.org" source: hosted - version: "0.9.2" + version: "0.9.3" flutter_lints: dependency: "direct dev" description: @@ -439,14 +439,14 @@ packages: name: flutter_local_notifications url: "https://pub.dartlang.org" source: hosted - version: "9.5.3+1" + version: "9.7.0" flutter_local_notifications_linux: dependency: transitive description: name: flutter_local_notifications_linux url: "https://pub.dartlang.org" source: hosted - version: "0.4.2" + version: "0.5.0+1" flutter_local_notifications_platform_interface: dependency: transitive description: @@ -460,7 +460,7 @@ packages: name: flutter_native_splash url: "https://pub.dartlang.org" source: hosted - version: "2.1.6" + version: "2.2.4" flutter_native_timezone: dependency: "direct main" description: @@ -474,7 +474,7 @@ packages: name: flutter_plugin_android_lifecycle url: "https://pub.dartlang.org" source: hosted - version: "2.0.6" + version: "2.0.7" flutter_screenutil: dependency: "direct main" description: @@ -488,7 +488,7 @@ packages: name: flutter_svg url: "https://pub.dartlang.org" source: hosted - version: "1.0.3" + version: "1.1.1+1" flutter_svg_provider: dependency: "direct main" description: @@ -547,14 +547,14 @@ packages: name: get url: "https://pub.dartlang.org" source: hosted - version: "4.6.3" + version: "4.6.5" glob: dependency: transitive description: name: glob url: "https://pub.dartlang.org" source: hosted - version: "2.0.2" + version: "2.1.0" graphs: dependency: transitive description: @@ -568,7 +568,7 @@ packages: name: hive url: "https://pub.dartlang.org" source: hosted - version: "2.2.1" + version: "2.2.3" hive_flutter: dependency: "direct main" description: @@ -589,7 +589,7 @@ packages: name: http_multi_server url: "https://pub.dartlang.org" source: hosted - version: "3.2.0" + version: "3.2.1" http_parser: dependency: transitive description: @@ -610,7 +610,7 @@ packages: name: image url: "https://pub.dartlang.org" source: hosted - version: "3.1.3" + version: "3.2.0" image_cropper: dependency: "direct main" description: @@ -631,7 +631,7 @@ packages: name: image_picker_android url: "https://pub.dartlang.org" source: hosted - version: "0.8.4+13" + version: "0.8.5+1" image_picker_for_web: dependency: transitive description: @@ -645,7 +645,7 @@ packages: name: image_picker_ios url: "https://pub.dartlang.org" source: hosted - version: "0.8.5+4" + version: "0.8.5+6" image_picker_platform_interface: dependency: transitive description: @@ -680,14 +680,14 @@ packages: name: json_annotation url: "https://pub.dartlang.org" source: hosted - version: "4.5.0" + version: "4.6.0" json_serializable: dependency: "direct dev" description: name: json_serializable url: "https://pub.dartlang.org" source: hosted - version: "6.2.0" + version: "6.3.1" lint: dependency: transitive description: @@ -771,7 +771,7 @@ packages: name: package_config url: "https://pub.dartlang.org" source: hosted - version: "2.0.2" + version: "2.1.0" package_info_plus: dependency: transitive description: @@ -841,28 +841,28 @@ packages: name: path_provider url: "https://pub.dartlang.org" source: hosted - version: "2.0.10" + version: "2.0.11" path_provider_android: dependency: transitive description: name: path_provider_android url: "https://pub.dartlang.org" source: hosted - version: "2.0.14" + version: "2.0.16" path_provider_ios: dependency: transitive description: name: path_provider_ios url: "https://pub.dartlang.org" source: hosted - version: "2.0.9" + version: "2.0.10" path_provider_linux: dependency: transitive description: name: path_provider_linux url: "https://pub.dartlang.org" source: hosted - version: "2.1.6" + version: "2.1.7" path_provider_macos: dependency: transitive description: @@ -883,7 +883,7 @@ packages: name: path_provider_windows url: "https://pub.dartlang.org" source: hosted - version: "2.0.6" + version: "2.0.7" pedantic: dependency: transitive description: @@ -918,7 +918,7 @@ packages: name: pool url: "https://pub.dartlang.org" source: hosted - version: "1.5.0" + version: "1.5.1" process: dependency: transitive description: @@ -932,7 +932,7 @@ packages: name: provider url: "https://pub.dartlang.org" source: hosted - version: "6.0.2" + version: "6.0.3" pub_semver: dependency: transitive description: @@ -953,49 +953,49 @@ packages: name: rxdart url: "https://pub.dartlang.org" source: hosted - version: "0.27.3" + version: "0.27.5" sentry: dependency: transitive description: name: sentry url: "https://pub.dartlang.org" source: hosted - version: "6.5.1" + version: "6.6.3" sentry_flutter: dependency: "direct main" description: name: sentry_flutter url: "https://pub.dartlang.org" source: hosted - version: "6.5.1" + version: "6.6.3" shelf: dependency: transitive description: name: shelf url: "https://pub.dartlang.org" source: hosted - version: "1.3.0" + version: "1.3.1" shelf_packages_handler: dependency: transitive description: name: shelf_packages_handler url: "https://pub.dartlang.org" source: hosted - version: "3.0.0" + version: "3.0.1" shelf_static: dependency: transitive description: name: shelf_static url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.1.1" shelf_web_socket: dependency: transitive description: name: shelf_web_socket url: "https://pub.dartlang.org" source: hosted - version: "1.0.1" + version: "1.0.2" sky_engine: dependency: transitive description: flutter @@ -1042,7 +1042,7 @@ packages: name: sqflite url: "https://pub.dartlang.org" source: hosted - version: "2.0.2+1" + version: "2.0.3" sqflite_common: dependency: transitive description: @@ -1182,7 +1182,7 @@ packages: name: webkit_inspection_protocol url: "https://pub.dartlang.org" source: hosted - version: "1.0.1" + version: "1.1.0" win32: dependency: transitive description: @@ -1203,7 +1203,7 @@ packages: name: xml url: "https://pub.dartlang.org" source: hosted - version: "5.4.1" + version: "6.1.0" yaml: dependency: transitive description: