diff --git a/mobile-v2/lib/main.dart b/mobile-v2/lib/main.dart index 7862fadfd0..6701f48118 100644 --- a/mobile-v2/lib/main.dart +++ b/mobile-v2/lib/main.dart @@ -1,5 +1,7 @@ import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:immich_mobile/domain/service_locator.dart'; +import 'package:immich_mobile/presentation/home_page/cubit/home_cubit.dart'; void main() { // Ensure the bindings are initialized @@ -22,7 +24,41 @@ class MainWidget extends StatelessWidget { colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), useMaterial3: true, ), - home: const Text('Flutter Demo Home Page'), + home: MultiBlocProvider( + providers: [BlocProvider(create: (context) => HomeCubit())], + child: Scaffold( + appBar: AppBar( + title: const Text("Immich v2"), + ), + body: BlocConsumer( + listener: (context, state) { + print(state); + }, + builder: (context, state) { + return Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text("Album count: ${state.albumCount}"), + ElevatedButton( + onPressed: () { + context.read().increaseAlbumCount(); + }, + child: const Text("Increase"), + ), + ElevatedButton( + onPressed: () { + context.read().decreaseAlbumCount(); + }, + child: const Text("Decrease"), + ), + ], + ), + ); + }, + ), + ), + ), ); } } diff --git a/mobile-v2/lib/presentation/home_page/cubit/home_cubit.dart b/mobile-v2/lib/presentation/home_page/cubit/home_cubit.dart new file mode 100644 index 0000000000..c67ea80c64 --- /dev/null +++ b/mobile-v2/lib/presentation/home_page/cubit/home_cubit.dart @@ -0,0 +1,15 @@ +import 'package:bloc/bloc.dart'; + +part 'home_state.dart'; + +class HomeCubit extends Cubit { + HomeCubit() : super(HomeState(albumCount: 0)); + + void increaseAlbumCount() { + emit(state.copyWith(albumCount: state.albumCount + 1)); + } + + void decreaseAlbumCount() { + emit(state.copyWith(albumCount: state.albumCount - 1)); + } +} diff --git a/mobile-v2/lib/presentation/home_page/cubit/home_state.dart b/mobile-v2/lib/presentation/home_page/cubit/home_state.dart new file mode 100644 index 0000000000..64d15c3663 --- /dev/null +++ b/mobile-v2/lib/presentation/home_page/cubit/home_state.dart @@ -0,0 +1,41 @@ +part of 'home_cubit.dart'; + +class HomeState { + final int albumCount; + HomeState({ + required this.albumCount, + }); + + HomeState copyWith({ + int? albumCount, + }) { + return HomeState( + albumCount: albumCount ?? this.albumCount, + ); + } + + Map toMap() { + return { + 'albumCount': albumCount, + }; + } + + factory HomeState.fromMap(Map map) { + return HomeState( + albumCount: map['albumCount']?.toInt() ?? 0, + ); + } + + @override + String toString() => 'HomeState(albumCount: $albumCount)'; + + @override + bool operator ==(Object other) { + if (identical(this, other)) return true; + + return other is HomeState && other.albumCount == albumCount; + } + + @override + int get hashCode => albumCount.hashCode; +}