stack_wallet/lib/pages/exchange_view/sub_widgets/step_row.dart
2024-05-27 18:01:41 -06:00

157 lines
3.4 KiB
Dart

/*
* 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<StackColors>()!.accentColorDark;
}
if (current <= index) {
return Theme.of(context)
.extension<StackColors>()!
.stepIndicatorBGLinesInactive;
} else {
return Theme.of(context).extension<StackColors>()!.stepIndicatorBGLines;
}
}
StepIndicatorStatus getStatus(int index) {
if (current < index) {
return StepIndicatorStatus.incomplete;
} else if (current > index) {
return StepIndicatorStatus.completed;
} else {
return StepIndicatorStatus.current;
}
}
List<Widget> _buildList(double spacerWidth, BuildContext context) {
final List<Widget> 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),
),
);
}
}