mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-08-26 02:30:00 +08:00
62 lines
1.4 KiB
Dart
62 lines
1.4 KiB
Dart
import 'package:flutter/material.dart';
|
|
|
|
import 'package:equatable/equatable.dart';
|
|
|
|
class PaymentInfo extends Equatable {
|
|
final double value;
|
|
final String text;
|
|
|
|
PaymentInfo(this.value, this.text);
|
|
|
|
@override
|
|
List<Object> get props => [value, text];
|
|
}
|
|
|
|
typedef PaymentSliderChanged = Function(PaymentInfo);
|
|
|
|
class PurchaseSlider extends StatelessWidget {
|
|
final List<PaymentInfo> values;
|
|
final PaymentInfo selectedValue;
|
|
final PaymentSliderChanged onChanged;
|
|
|
|
PurchaseSlider({
|
|
@required this.values,
|
|
@required this.selectedValue,
|
|
@required this.onChanged,
|
|
}) {
|
|
values.sort((a, b) => a.value.compareTo(b.value));
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Slider(
|
|
min: values.first.value,
|
|
max: values.last.value + 0.50,
|
|
value: selectedValue.value,
|
|
onChanged: (double val) {
|
|
int i = -1;
|
|
for (i = 1; i < values.length; i++) {
|
|
var prev = values[i - 1].value;
|
|
var cur = values[i].value;
|
|
|
|
if (prev < val && val <= cur) {
|
|
i--;
|
|
break;
|
|
}
|
|
}
|
|
if (val == values.first.value) {
|
|
i = 0;
|
|
} else if (val >= values.last.value) {
|
|
i = values.length - 1;
|
|
}
|
|
|
|
if (i != -1) {
|
|
onChanged(values[i]);
|
|
}
|
|
},
|
|
label: selectedValue.text,
|
|
divisions: values.length,
|
|
);
|
|
}
|
|
}
|