diff --git a/android/gradle.properties b/android/gradle.properties index 5a36ab8c92338284725018aa8f109700499c74fd..2aa2a7ba9299223d13e7b0c4ff3bd3f735ebca5e 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -1,5 +1,5 @@ org.gradle.jvmargs=-Xmx1536M android.useAndroidX=true android.enableJetifier=true -app.versionName=1.0.24 -app.versionCode=25 +app.versionName=1.0.25 +app.versionCode=26 diff --git a/lib/activities/ActivityDemoPage.dart b/lib/activities/ActivityDemoPage.dart index d6c1dba48e3c98c612b14195dda0f4dfc02fb970..24cf707073e59dea7e6b774598cfd77034d8df82 100644 --- a/lib/activities/ActivityDemoPage.dart +++ b/lib/activities/ActivityDemoPage.dart @@ -1,5 +1,9 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:ionicons/ionicons.dart'; +import 'package:random/config/theme.dart'; +import 'package:random/cubit/data_cubit.dart'; class ActivityDemoPage extends StatelessWidget { const ActivityDemoPage({super.key}); @@ -21,7 +25,9 @@ class ActivityDemoPage extends StatelessWidget { mainAxisSize: MainAxisSize.max, children: <Widget>[ Text('TOP').tr(), - SizedBox(height: 2), + SizedBox(height: 20), + persistedCounterBlock(), + SizedBox(height: 20), Text('BOTTOM').tr(), ], ), @@ -31,4 +37,40 @@ class ActivityDemoPage extends StatelessWidget { ), ); } + + Widget persistedCounterBlock() { + return BlocProvider<DataCubit>( + create: (BuildContext context) => DataCubit(), + child: BlocBuilder<DataCubit, DataState>( + builder: (BuildContext context, DataState state) { + void updateCounter(int delta) { + BlocProvider.of<DataCubit>(context).getData( + DataState(counter: (state.counter ?? 0) + delta), + ); + } + + return Row( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + IconButton( + icon: Icon(Ionicons.arrow_down), + color: appTheme.primaryColor, + onPressed: () => updateCounter(-1), + ), + Padding( + padding: EdgeInsets.all(10), + child: Text(state.counter.toString()), + ), + IconButton( + icon: Icon(Ionicons.arrow_up), + color: appTheme.primaryColor, + onPressed: () => updateCounter(1), + ), + ], + ); + }, + ), + ); + } } diff --git a/lib/cubit/data_cubit.dart b/lib/cubit/data_cubit.dart new file mode 100644 index 0000000000000000000000000000000000000000..05335fb9762255ef65e22dda15880eca384d2de4 --- /dev/null +++ b/lib/cubit/data_cubit.dart @@ -0,0 +1,29 @@ +import 'package:equatable/equatable.dart'; +import 'package:flutter/material.dart'; +import 'package:hydrated_bloc/hydrated_bloc.dart'; + +part 'data_state.dart'; + +class DataCubit extends HydratedCubit<DataState> { + DataCubit() : super(const DataState()); + + void getData(DataState state) { + emit(state); + } + + @override + DataState? fromJson(Map<String, dynamic> json) { + int counter = json['counter'] as int; + + return DataState( + counter: counter, + ); + } + + @override + Map<String, int>? toJson(DataState state) { + return <String, int>{ + 'counter': state.counter ?? 0, + }; + } +} diff --git a/lib/cubit/data_state.dart b/lib/cubit/data_state.dart new file mode 100644 index 0000000000000000000000000000000000000000..c1ad76e14ddb21367608447f5c7d63a628c3adec --- /dev/null +++ b/lib/cubit/data_state.dart @@ -0,0 +1,15 @@ +part of 'data_cubit.dart'; + +@immutable +class DataState extends Equatable { + const DataState({ + this.counter, + }); + + final int? counter; + + @override + List<Object?> get props => <Object?>[ + counter, + ]; +} diff --git a/lib/ui/screens/about_page.dart b/lib/ui/screens/about_page.dart index 5c6a6477efb6e7484649a8cb8b226773d87d1a38..9ad2fcfe02ce9129c8489e9bcec904a7c3095afa 100644 --- a/lib/ui/screens/about_page.dart +++ b/lib/ui/screens/about_page.dart @@ -11,6 +11,7 @@ class AboutPage extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.max, children: <Widget>[ + SizedBox(height: 50), Text( 'about_title', textAlign: TextAlign.start, diff --git a/pubspec.lock b/pubspec.lock index f0fbed261d7a349b9ff0b9b06f6d07d6b08137f8..814ae8dc78a2e43816019f755a174bd6a6549363 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -65,6 +65,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.0.2" + equatable: + dependency: "direct main" + description: + name: equatable + sha256: c2b87cb7756efdf69892005af546c56c0b5037f54d2a88269b4f347a505e3ca2 + url: "https://pub.dev" + source: hosted + version: "2.0.5" ffi: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index f779334e1c421c1ae576fca2565b2a4585802584..8afde1c436f9b90abf159446c23b4d562ad1f333 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -3,7 +3,7 @@ description: A random application, for testing purpose only. publish_to: 'none' -version: 1.0.24+25 +version: 1.0.25+26 environment: sdk: '^3.0.0' @@ -13,6 +13,7 @@ dependencies: sdk: flutter easy_localization: ^3.0.1 + equatable: ^2.0.5 flutter_bloc: ^8.1.1 path_provider: ^2.0.11 hydrated_bloc: ^9.0.0