/* * This file is part of Stack Wallet. * * Copyright (c) 2023 Cypher Stack * All Rights Reserved. * The code is distributed under GPLv3 license, see LICENSE file for details. * Generated by Cypher Stack on 2023-05-26 * */ import 'package:flutter/material.dart'; import '../../../themes/stack_colors.dart'; import 'step_indicator.dart'; class StepRow extends StatelessWidget { const StepRow({ super.key, required this.count, required this.current, required this.width, this.indicatorSize = 16, this.minSpacing = 4, }); final int count; final int current; final double width; final double indicatorSize; final double minSpacing; Color getColor(int index, BuildContext context) { if (current >= count - 1) { return Theme.of(context).extension()!.accentColorDark; } if (current <= index) { return Theme.of(context) .extension()! .stepIndicatorBGLinesInactive; } else { return Theme.of(context).extension()!.stepIndicatorBGLines; } } StepIndicatorStatus getStatus(int index) { if (current < index) { return StepIndicatorStatus.incomplete; } else if (current > index) { return StepIndicatorStatus.completed; } else { return StepIndicatorStatus.current; } } List _buildList(double spacerWidth, BuildContext context) { final List list = []; for (int i = 0; i < count - 1; i++) { list.add( StepIndicator( step: i + 1, status: getStatus(i), ), ); list.add( _SpacerRow( width: spacerWidth, dotSize: 1.5, spacing: 4, color: getColor(i, context), ), ); } list.add( StepIndicator( step: count, status: getStatus(count - 1), ), ); return list; } @override Widget build(BuildContext context) { final spacerWidth = ((width - (indicatorSize * count)) / (count - 1)) - (2 * minSpacing); return Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ ..._buildList(spacerWidth, context), ], ); } } class _SpacerRow extends StatelessWidget { const _SpacerRow({ super.key, required this.width, required this.dotSize, required this.spacing, required this.color, }); final Color color; final double width; final double dotSize; final double spacing; @override Widget build(BuildContext context) { final count = ((width - dotSize) / (dotSize + spacing)).floor() + 1; return Row( children: [ for (int i = 0; i < count - 1; i++) Row( children: [ _SpacerDot( color: color, size: dotSize, ), SizedBox( width: spacing, ), ], ), _SpacerDot( color: color, size: dotSize, ), ], ); } } class _SpacerDot extends StatelessWidget { const _SpacerDot({ super.key, required this.color, this.size = 1.5, }); final double size; final Color color; @override Widget build(BuildContext context) { return Container( width: size, height: size, decoration: BoxDecoration( color: color, borderRadius: BorderRadius.circular(size), ), ); } }