Reputation: 890
I'm trying to create some counter widget with increment and dicrement buttons and count number between them. Is it possible to create counter with design:
Here is what I have now:
@override
Widget build(BuildContext context) {
return Container(
padding: EdgeInsets.zero,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
_createIncrementDicrementButton(Icons.remove, () => _dicrement()),
Text(_currentCount.toString()),
_createIncrementDicrementButton(Icons.add, () => _increment()),
],
),
);
}
void _increment() {
setState(() {
_currentCount++;
_counterCallback(_currentCount);
});
}
void _dicrement() {
setState(() {
if (_currentCount > 1) {
_currentCount--;
_counterCallback(_currentCount);
}
});
}
Widget _createIncrementDicrementButton(IconData icon, Function onPressed) {
return RawMaterialButton(
materialTapTargetSize: MaterialTapTargetSize.padded,
constraints: BoxConstraints(minWidth: 24.0, minHeight: 24.0),
onPressed: onPressed,
elevation: 2.0,
fillColor: LightGreyColor,
child: Icon(
icon,
color: BlackColor,
size: 12.0,
),
shape: CircleBorder(),
);
}
The problem is that I can't put borderRadius to container, it gives me an error. Thanks!
Upvotes: 0
Views: 15434
Reputation: 890
To the next searchers! Full code of counter:
class CounterView extends StatefulWidget {
final int initNumber;
final Function(int) counterCallback;
final Function increaseCallback;
final Function decreaseCallback;
final int minNumber;
CounterView({this.initNumber, this.counterCallback, this.increaseCallback, this.decreaseCallback, this.minNumber});
@override
_CounterViewState createState() => _CounterViewState();
}
class _CounterViewState extends State<CounterView> {
int _currentCount;
Function _counterCallback;
Function _increaseCallback;
Function _decreaseCallback;
int _minNumber;
@override
void initState() {
_currentCount = widget.initNumber ?? 1;
_counterCallback = widget.counterCallback ?? (int number) {};
_increaseCallback = widget.increaseCallback ?? () {};
_decreaseCallback = widget.decreaseCallback ?? () {};
_minNumber = widget.minNumber ?? 0;
super.initState();
}
@override
Widget build(BuildContext context) {
return Container(
padding: EdgeInsets.zero,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(BorderRadiusMedium),
color: LightGreyColor,
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
_createIncrementDicrementButton(Icons.remove, () => _dicrement()),
Text(_currentCount.toString()),
_createIncrementDicrementButton(Icons.add, () => _increment()),
],
),
);
}
void _increment() {
setState(() {
_currentCount++;
_counterCallback(_currentCount);
_increaseCallback();
});
}
void _dicrement() {
setState(() {
if (_currentCount > minNumber) {
_currentCount--;
_counterCallback(_currentCount);
_decreaseCallback();
}
});
}
Widget _createIncrementDicrementButton(IconData icon, Function onPressed) {
return RawMaterialButton(
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
constraints: BoxConstraints(minWidth: 32.0, minHeight: 32.0),
onPressed: onPressed,
elevation: 2.0,
fillColor: LightGreyColor,
child: Icon(
icon,
color: BlackColor,
size: 12.0,
),
shape: CircleBorder(),
);
}
}
Upvotes: 8