English | ไธญๆ็ฎไฝ
animated_digit
Scroll animation numbers widget, any number that need animation effects and easy to use.

Usage
๐ด๐ป Easy Show
// only show
AnimatedDigitWidget(
value: 9999
),
๐ Easy Show & State
// simple state control
int value = 9999;
AnimatedDigitWidget(
value: value
textStyle: TextStyle(color: Colors.pink),
),
setState((){
value = 191919;
});
๐ก Controller
Built-in accuracy calculation When precision arithmetic hits
number_precisioninteger-boundary limits, controller math now falls back to native arithmetic to avoid runtime crashes.
AnimatedDigitController _controller = AnimatedDigitController(10240.987);
AnimatedDigitWidget(
controller: _controller,
textStyle: TextStyle(color: Colors.pink),
fractionDigits: 2, // number of decimal places reserved, not rounded
enableSeparator: true, // like this 10,240.98
),
// UI Result => 10,240.98
// increment
_controller.addValue(1314);
// minus
_controller.minusValue(1314); // from v3.1.0 added
// times
_controller.timesValue(1314); // from v3.1.0 added
// divide
_controller.divideValue(1314); // from v3.1.0 added
// reset
_controller.resetValue(1314);
// last
_controller.dispose();
๐ผ UI Effect Image & ๐ป Code Example
AnimatedDigitWidget(
value: 12531.98, // or use controller
),
AnimatedDigitWidget(
value: 12531.98, // or use controller
enableSeparator: true,
),
AnimatedDigitWidget(
value: 12531.98, // or use controller
fractionDigits: 2,
enableSeparator: true,
),
SingleDigitProvider(
data: SingleDigitData(
useTextSize: true,
builder: (size, value, isNumber, child) {
return isNumber ? child : FlutterLogo();
},
),
child: AnimatedDigitWidget(
value: 12531.98, // or use controller
textStyle: TextStyle(color: Colors.pink[200], fontSize: 30),
separateLength: 1,
separateSymbol: "#",
enableSeparator: true,
),
),
AnimatedDigitWidget(
value: 12531.98, // or use controller
textStyle: TextStyle(color: Colors.orangeAccent.shade700, fontSize: 30),
fractionDigits: 2,
enableSeparator: true,
separateSymbol: "ยท",
separateLength: 3,
decimalSeparator: ",",
prefix: "\$",
suffix: "โฌ",
),
โ If you want to change color based on value
The add a ValueColor object to valueColors, which is an array, you can add more ...๏ผbut always take the last eligible
Since version v3.3.1+1, colors have supported animated transitions instead of abrupt direct color switching, eliminating harsh transitions.
int value = 9999; // or use Controller.value
AnimatedDigitWidget(
value: value,
textStyle: TextStyle(
color: Colors.orange[200],
fontSize: 30,
),
valueColors: [
ValueColor(
//When value <= 0 , the color changes to red
condition: () => value <= 0,
color: Colors.red,
),
// you can add more ...๏ผbut always take the last eligible.
],
),
๐Disable the initial scroll animation.
AnimatedDigitWidget(
...,
firstScrollAnimate: false // set false | >= v3.3.1+1
),
๐ Optional: animate unchanged digits when value updates
By default, digits with the same character value keep their current position. If you want all digits to roll when the overall value changes, enable this option. Unchanged-digit rolls are staggered for smoother motion and balanced between integer and fraction parts to avoid a delayed fraction feel.
AnimatedDigitWidget(
...,
animateUnchangedDigits: true,
),
๐Support for padding the integer part with leading zeros when the number of digits is less than the specified minimum
range:
0, 9, ๐ง0 โก๏ธ 00ใ1 โก๏ธ 01ใ2 โก๏ธ 02 ...
AnimatedDigitWidget(
...,
fractionDigits: 0, // It must be set to 0; if there are decimal places, it's really unnecessary (wry smile)~~
enableMinIntegerDigits: true // set true๏ผ | >= v3.3.1+2
),
๐ณ Widget Params & Documentation
๐ Required Params
โ ๏ธ
valueandcontrollercannot be bothnull. โ ๏ธcontrollerhas higher priority.
-
controller- digit controller, The displayed number can be controlled viaaddValueandresetValue. -
value- the display number.
๐ TextStyle And BoxStyle Setting
textStyle- the numbers text style.boxDecoration- Use withdecorationofContainer.
๐ Int Type(default) Or Decimal Type Setting
- fractionDigits - the fraction digits,
int, default0.- ๐ Example (
1000520.98765): 0=>1000520;1=>1000520.9;2=>1000520.98;3=>1000520.987;N=>1000520.[N];
- ๐ Example (
The default
0means an integer, when it is a decimal, if the value is less than thefractionDigits, it will be filled with0to the right, and the truncation method is used, so there is no rounding.
๐ Numbers Free Style Setting
-
decimalSeparator- the decimal separator๏ผcan be replaced by other symbols in place of decimal separators, default.. -
enableSeparator- enable digit separator. defaultfalsenot enable, onlytrue,separateLengthandseparateSymbolvalid.- ๐ Example (
true):1000520=>1,000,520(seealsoseparateLengthorseparateSymbol)
- ๐ Example (
-
separateSymbol- the numbers separator symbol (only enableSeparator is true), make numbers much easier to read, default,.- ๐ Example (
1000520): ,=>1,000,520'=>1'000'520-=>1-000-520
- ๐ Example (
-
separateLength- the numbers separator length (only enableSeparator is true),separateSymbolby separator length insert, default3.- ๐ Example (
1000520): 1=>1,0,0,0,5,2,02=>1,00,05,203=>1,000,520
- ๐ Example (
๐ฅ Scroll Animation Setting
duration- the animate duration, default Duration(milliseconds: 300).curve- the animate curve, default Curves.easeInOut. look animate curve.loop- enable loop scroll animate. default true, always scroll down, not scroll up from 9 -> 0;false, scroll up and down.animateUnchangedDigits- whentrue, unchanged digits can still scroll when the overall number updates. defaultfalse.
๐ Digital Size Scheme Setting
-
autoSize- the default true is to automatically expand and contract according to the size of the (number/symbol) itself, false, the text size of the number0is used as the container size of each number, which can ensure the same width, but it seems that there is a slight interval between1and other numbers ๐ . -
animateAutoSize- the animation resizing. defaulttrue,falsewill change directly to the size of the number/symbol.
๐ Number prefix and suffix Setting
prefix- the text to display in front of the counter.suffix- the text to display after the counter.




