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

View File

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

View File

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