merge develop into components
- modify onboarding screen to use step indicator component
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
import 'package:auth/src/onboarding/domain/onboarding_page.dart';
|
import 'package:auth/src/onboarding/domain/onboarding_page.dart';
|
||||||
import 'package:auth/src/onboarding/presentation/onboarding_view_model.dart';
|
import 'package:auth/src/onboarding/presentation/onboarding_view_model.dart';
|
||||||
import 'package:auth/src/onboarding/presentation/widgets/onboarding_content.dart';
|
import 'package:auth/src/onboarding/presentation/widgets/onboarding_content.dart';
|
||||||
import 'package:auth/src/onboarding/presentation/widgets/onboarding_dots_indicator.dart';
|
import 'package:design_system/design_system.dart';
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
@@ -62,9 +62,10 @@ class OnboardingScreen extends ConsumerWidget {
|
|||||||
},
|
},
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
OnboardingDotsIndicator(
|
StepIndicator(
|
||||||
currentIndex: state.cardIndex,
|
current: state.cardIndex,
|
||||||
total: onboardingPages.length,
|
total: onboardingPages.length,
|
||||||
|
color: const Color(0xFF4A4A4A),
|
||||||
),
|
),
|
||||||
const SizedBox(height: 38),
|
const SizedBox(height: 38),
|
||||||
Container(
|
Container(
|
||||||
|
|||||||
@@ -1,35 +0,0 @@
|
|||||||
import 'package:flutter/material.dart';
|
|
||||||
|
|
||||||
class OnboardingDotsIndicator extends StatelessWidget {
|
|
||||||
final int currentIndex;
|
|
||||||
final int total;
|
|
||||||
|
|
||||||
const OnboardingDotsIndicator({
|
|
||||||
super.key,
|
|
||||||
required this.currentIndex,
|
|
||||||
required this.total,
|
|
||||||
});
|
|
||||||
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) {
|
|
||||||
return Row(
|
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
|
||||||
children: List.generate(total, (index) {
|
|
||||||
final bool isActive = index == currentIndex;
|
|
||||||
|
|
||||||
return AnimatedContainer(
|
|
||||||
duration: const Duration(milliseconds: 200),
|
|
||||||
curve: Curves.easeOut,
|
|
||||||
margin: const EdgeInsets.symmetric(horizontal: 6),
|
|
||||||
width: 16.0,
|
|
||||||
height: 16.0,
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
shape: BoxShape.circle,
|
|
||||||
color: isActive ? const Color(0xFF4A4A4A) : Colors.white,
|
|
||||||
border: Border.all(color: const Color(0xFF4A4A4A), width: 2),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -42,7 +42,7 @@ class FormStepLayout extends ConsumerWidget{
|
|||||||
spacing: 24,
|
spacing: 24,
|
||||||
children: [
|
children: [
|
||||||
StepIndicator(
|
StepIndicator(
|
||||||
max: numSteps,
|
total: numSteps,
|
||||||
current: currentStep,
|
current: currentStep,
|
||||||
color: theme.getColorFor(ThemeCode.buttonPrimary)
|
color: theme.getColorFor(ThemeCode.buttonPrimary)
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -1,28 +1,33 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
class StepIndicator extends StatelessWidget{
|
class StepIndicator extends StatelessWidget{
|
||||||
final int max;
|
final int total;
|
||||||
final int current;
|
final int current;
|
||||||
final Color color;
|
final Color color;
|
||||||
|
|
||||||
const StepIndicator({super.key, required this.max, required this.current, required this.color});
|
const StepIndicator({super.key, required this.total, required this.current, required this.color});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Row(
|
return Row(
|
||||||
spacing: 12,
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
children: [
|
children: [
|
||||||
Spacer(),
|
...List<Widget>.generate(total, (index){
|
||||||
...List<Widget>.generate(max, (int index){
|
final bool isActive = index < current;
|
||||||
return DecoratedBox(
|
|
||||||
decoration: ShapeDecoration(
|
return AnimatedContainer(
|
||||||
shape: CircleBorder(side: BorderSide(color: color)),
|
duration: const Duration(milliseconds: 200),
|
||||||
color: (index < current)? color: Colors.transparent
|
curve: Curves.easeOut,
|
||||||
|
margin: const EdgeInsets.symmetric(horizontal: 6),
|
||||||
|
width: 16.0,
|
||||||
|
height: 16.0,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
shape: BoxShape.circle,
|
||||||
|
color: isActive ? color : Colors.white,
|
||||||
|
border: Border.all(color: color, width: 2),
|
||||||
),
|
),
|
||||||
child: SizedBox(width: 16, height: 16),
|
|
||||||
);
|
);
|
||||||
}),
|
}),
|
||||||
Spacer()
|
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ void main() {
|
|||||||
themePackages();
|
themePackages();
|
||||||
|
|
||||||
testGoldens('Step Indicator', (tester) async {
|
testGoldens('Step Indicator', (tester) async {
|
||||||
final widget = (int step)=>StepIndicator(max: 3, current: step, color: Colors.blueAccent);
|
final widget = (int step)=>StepIndicator(total: 3, current: step, color: Colors.blueAccent);
|
||||||
final builder = GoldenBuilder.column()
|
final builder = GoldenBuilder.column()
|
||||||
..addScenario('step -1', widget(-1))
|
..addScenario('step -1', widget(-1))
|
||||||
..addScenario('step 0', widget(0))
|
..addScenario('step 0', widget(0))
|
||||||
|
|||||||
Reference in New Issue
Block a user