Change Events
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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});
|
||||||
}
|
}
|
||||||
@@ -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),
|
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
16
pubspec.lock
16
pubspec.lock
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user