Skip to content
Snippets Groups Projects
Commit 2823e0f5 authored by Benoît Harrault's avatar Benoît Harrault
Browse files

Merge branch '32-add-persistence' into 'master'

Resolve "Add persistence"

Closes #32

See merge request !33
parents 0718f9ed 760b2b8e
No related branches found
No related tags found
1 merge request!33Resolve "Add persistence"
Pipeline #4536 passed
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
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),
),
],
);
},
),
);
}
}
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,
};
}
}
part of 'data_cubit.dart';
@immutable
class DataState extends Equatable {
const DataState({
this.counter,
});
final int? counter;
@override
List<Object?> get props => <Object?>[
counter,
];
}
......@@ -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,
......
......@@ -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:
......
......@@ -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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment