Change Events

This commit is contained in:
2025-11-14 13:43:46 +01:00
parent da52453371
commit 3bcc44b7f8
4 changed files with 31 additions and 16 deletions

View File

@@ -5,12 +5,18 @@ import 'onboarding_event.dart';
import 'onboarding_state.dart'; import 'onboarding_state.dart';
class OnboardingBloc extends Bloc<OnboardingEvent, OnboardingState> { class OnboardingBloc extends Bloc<OnboardingEvent, OnboardingState> {
OnboardingBloc() : super(OnboardingInitial()); OnboardingBloc() : super(OnboardingInitial()) {
on<PageChangedEvent>((event, emit) {
emit(PageChangedState(counter: event.index));
});
}
int pageIndex = 0; int pageIndex = 0;
final pageController = PageController(initialPage: 0); final pageController = PageController(initialPage: 0);
@override @override
Stream<OnboardingState> mapEventToState( Stream<OnboardingState> mapEventToState(
OnboardingEvent event, OnboardingEvent event,
@@ -29,7 +35,7 @@ class OnboardingBloc extends Bloc<OnboardingEvent, OnboardingState> {
); );
yield PageChangedState(counter: pageIndex); yield PageChangedState(counter: pageIndex);
} else if (event is PageSwipedEvent) { } else if (event is PageChangedEvent) {
pageIndex = event.index; pageIndex = event.index;
yield PageChangedState(counter: pageIndex); yield PageChangedState(counter: pageIndex);
} }

View File

@@ -6,11 +6,7 @@ import 'package:flutter/material.dart';
abstract class OnboardingEvent {} abstract class OnboardingEvent {}
class PageChangedEvent extends OnboardingEvent { class PageChangedEvent extends OnboardingEvent {
}
class PageSwipedEvent extends OnboardingEvent {
final int index; final int index;
PageSwipedEvent({required this.index}); PageChangedEvent({required this.index});
} }

View File

@@ -16,6 +16,7 @@ class OnboardingContent extends StatelessWidget {
return SafeArea( return SafeArea(
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
spacing: 20,
children: [ children: [
Expanded( Expanded(
flex: 4, flex: 4,
@@ -36,22 +37,20 @@ class OnboardingContent extends StatelessWidget {
controller: controller, controller: controller,
children: DataConstants.onboardingTiles, children: DataConstants.onboardingTiles,
onPageChanged: (index) { onPageChanged: (index) {
bloc.add(PageSwipedEvent(index: index)); bloc.add(PageChangedEvent(index: index));
}, },
); );
} }
Widget _createStatic(OnboardingBloc bloc) { Widget _createStatic(OnboardingBloc bloc) {
return Column( return Column(
spacing: 10,
children: [ children: [
SizedBox(
height: 30,
),
BlocBuilder<OnboardingBloc, OnboardingState>( BlocBuilder<OnboardingBloc, OnboardingState>(
buildWhen: (_, currState) => currState is PageChangedState, buildWhen: (_, currState) => currState is PageChangedState,
builder: (context, state) { builder: (context, state) {
return DotsIndicator( return DotsIndicator(
dotsCount: 3, dotsCount: DataConstants.onboardingTiles.length,
position: bloc.pageIndex.toDouble(), position: bloc.pageIndex.toDouble(),
decorator: DotsDecorator( decorator: DotsDecorator(
color: Colors.grey, color: Colors.grey,
@@ -60,7 +59,6 @@ class OnboardingContent extends StatelessWidget {
); );
}, },
), ),
Spacer(),
BlocBuilder<OnboardingBloc, OnboardingState>( BlocBuilder<OnboardingBloc, OnboardingState>(
buildWhen: (_, currState) => currState is PageChangedState, buildWhen: (_, currState) => currState is PageChangedState,
builder: (context, state) { builder: (context, state) {
@@ -69,7 +67,7 @@ class OnboardingContent extends StatelessWidget {
tween: Tween<double>(begin: 0, end: percent), tween: Tween<double>(begin: 0, end: percent),
duration: Duration(seconds: 1), duration: Duration(seconds: 1),
builder: (context, value, _) => CircularPercentIndicator( builder: (context, value, _) => CircularPercentIndicator(
radius: 110, radius: 60,
backgroundColor: ColorConstants.primaryColor, backgroundColor: ColorConstants.primaryColor,
progressColor: Colors.white, progressColor: Colors.white,
percent: 1 - value, percent: 1 - value,
@@ -79,7 +77,7 @@ class OnboardingContent extends StatelessWidget {
child: RawMaterialButton( child: RawMaterialButton(
shape: CircleBorder(), shape: CircleBorder(),
onPressed: () { onPressed: () {
bloc.add(PageChangedEvent()); bloc.add(PageChangedEvent(index: 2));
}, },
child: Padding( child: Padding(
padding: const EdgeInsets.all(24.0), padding: const EdgeInsets.all(24.0),
@@ -94,7 +92,6 @@ class OnboardingContent extends StatelessWidget {
)); ));
}, },
), ),
SizedBox(height: 30),
], ],
); );
} }

View File

@@ -57,6 +57,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.0.8" version: "1.0.8"
dots_indicator:
dependency: "direct main"
description:
name: dots_indicator
sha256: c070af5058a084ba7b354df4b4c26c719595d70a3531eea6edd8af8716684ba3
url: "https://pub.dev"
source: hosted
version: "4.0.1"
fake_async: fake_async:
dependency: transitive dependency: transitive
description: description:
@@ -163,6 +171,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.9.1" version: "1.9.1"
percent_indicator:
dependency: "direct main"
description:
name: percent_indicator
sha256: "157d29133bbc6ecb11f923d36e7960a96a3f28837549a20b65e5135729f0f9fd"
url: "https://pub.dev"
source: hosted
version: "4.2.5"
provider: provider:
dependency: transitive dependency: transitive
description: description: