[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"technologies":3,"\u002Fopen-source\u002Fflutter-number-editing-controller":167},[4,10,15,21,26,32,38,43,48,53,58,63,68,73,77,82,87,92,97,103,108,113,118,123,128,133,138,143,147,152,157,162],{"title":5,"description":6,"slug":7,"category":8,"icon":9},"Android","Every app we ship reaches Android — platform APIs, background execution, permissions, and the store requirements that come with them.","android","framework","logos:android-icon",{"title":11,"description":12,"slug":13,"category":8,"icon":14},"Angular","The front-end framework we work in when a product is already Angular — a batteries-included structure that suits large, long-lived apps.","angular","logos:angular-icon",{"title":16,"description":17,"slug":18,"category":19,"icon":20},"Dart","The language every Flutter app we ship is written in — sound null safety, real pattern matching, and a compiler that targets native and the web.","dart","language","logos:dart",{"title":22,"description":23,"slug":24,"category":8,"icon":25},"Django","The Python framework we use when a product needs an admin, auth and a real data model on day one rather than a hand-rolled service.","django","logos:django-icon",{"title":27,"description":28,"slug":29,"category":30,"icon":31},"Docker","Every service we build ships as a container, so what runs on a laptop, in CI and in production is one artefact rather than three of them.","docker","infrastructure","logos:docker-icon",{"title":33,"description":34,"slug":35,"category":36,"icon":37},"Fastlane","The release automation behind our mobile work — signing, builds and store uploads run from CI instead of from one engineer's laptop on release day.","fastlane","tools","logos:fastlane",{"title":39,"description":40,"slug":41,"category":8,"icon":42},"Flutter","Our primary mobile stack since 2018 — one Dart codebase shipping to iOS, Android, web and desktop without a separate team per platform.","flutter","logos:flutter",{"title":44,"description":45,"slug":46,"category":36,"icon":47},"Git","Every project we touch lives in Git — reviewed pull requests, CI on every branch, and a history that still makes sense months later.","git","logos:git-icon",{"title":49,"description":50,"slug":51,"category":19,"icon":52},"Go","Our backend language for real-time APIs and services under load — small binaries, fast builds, and concurrency that stays readable.","go","logos:gopher",{"title":54,"description":55,"slug":56,"category":30,"icon":57},"Google Cloud","The cloud our production workloads run on — managed Kubernetes, storage and networking, without hand-built servers nobody wants to maintain.","gcp","logos:google-cloud",{"title":59,"description":60,"slug":61,"category":36,"icon":62},"Gradle","The build system every Android release goes through — product flavours, signing configs, and the dependency wiring under a Flutter app.","gradle","logos:gradle",{"title":64,"description":65,"slug":66,"category":30,"icon":67},"Helm","How we package a Kubernetes deployment — service, config, secrets and ingress as one versioned unit that can be promoted and rolled back.","helm","logos:helm",{"title":69,"description":70,"slug":71,"category":19,"icon":72},"Kotlin","What we reach for when a Flutter app needs real Android underneath it — platform channels, background work, and native SDK integrations.","kotlin","logos:kotlin-icon",{"title":74,"description":75,"slug":76,"category":8,"icon":72},"Kotlin Multiplatform","Sharing business logic across iOS and Android while each platform keeps its own native UI — the alternative when Flutter is not the right fit.","kmp",{"title":78,"description":79,"slug":80,"category":30,"icon":81},"Kubernetes","How we run services in production — Helm-packaged deployments, rollouts that can be rolled back, and scaling that does not need a person at 3am.","kubernetes","logos:kubernetes",{"title":83,"description":84,"slug":85,"category":30,"icon":86},"NATS","Lightweight messaging between services — publish\u002Fsubscribe and request\u002Freply without the operational weight of a full broker cluster.","nats","logos:nats-icon",{"title":88,"description":89,"slug":90,"category":8,"icon":91},"Nuxt","Vue with server rendering, routing and SEO handled — how we build marketing sites and web apps that must be fast and indexable on first load.","nuxt","logos:nuxt-icon",{"title":93,"description":94,"slug":95,"category":19,"icon":96},"PHP","Where we work with an existing PHP backend — extending it, integrating with it, and building the mobile and web clients it has to serve.","php","logos:php",{"title":98,"description":99,"slug":100,"category":101,"icon":102},"PostgreSQL","Our default database — the one we reach for unless a product gives us a specific reason not to, from schema design through to index tuning.","postgres","database","logos:postgresql",{"title":104,"description":105,"slug":106,"category":19,"icon":107},"Python","Our language for backends, data work and AI integrations — including the Python bindings we ship for our own Rust tooling.","python","logos:python",{"title":109,"description":110,"slug":111,"category":8,"icon":112},"React","The front-end library we work in when a product is already React — components, hooks, and the ecosystem that has grown around them.","react","logos:react",{"title":114,"description":115,"slug":116,"category":101,"icon":117},"Redis","Where we put data that has to be fast and can be rebuilt — caches, sessions, rate limits, and the queues behind a product's slow paths.","redis","logos:redis",{"title":119,"description":120,"slug":121,"category":19,"icon":122},"Ruby","The language our mobile release automation is written in — Fastlane lanes, custom actions, and the CI glue that ships builds to the stores.","ruby","logos:ruby",{"title":124,"description":125,"slug":126,"category":19,"icon":127},"Rust","Where we go when performance and correctness both matter — document rendering, CLI tooling, and services that have to stay fast and predictable.","rust","simple-icons:rust",{"title":129,"description":130,"slug":131,"category":101,"icon":132},"SQLite","The database that ships inside the app — local caches, offline-first storage, and anything that still has to work with no network.","sqlite","logos:sqlite",{"title":134,"description":135,"slug":136,"category":8,"icon":137},"Strapi","A headless CMS we reach for when editors need to own the content — a real admin and a clean API, without building either from scratch.","strapi","logos:strapi-icon",{"title":139,"description":140,"slug":141,"category":19,"icon":142},"Swift","What we reach for when a Flutter app needs real iOS underneath it — platform channels, native SDK integrations, widgets and App Clips.","swift","logos:swift",{"title":144,"description":145,"slug":146,"category":8,"icon":142},"SwiftUI","Apple's UI framework, where we build the native surfaces a Flutter app cannot own — widgets, App Clips, extensions and system integrations.","swiftui",{"title":148,"description":149,"slug":150,"category":8,"icon":151},"Tailwind CSS","How we style every front end we build — utility classes and design tokens instead of a stylesheet that only ever grows and is never deleted.","tailwind","logos:tailwindcss-icon",{"title":153,"description":154,"slug":155,"category":19,"icon":156},"TypeScript","The default for everything we write for the browser and for Node services — types that catch integration bugs before they reach a review.","typescript","logos:typescript-icon",{"title":158,"description":159,"slug":160,"category":8,"icon":161},"Vue","Our front-end framework for admin panels, merchant dashboards and product web apps that have to stay maintainable for years, not sprints.","vue","logos:vue",{"title":163,"description":164,"slug":165,"category":36,"icon":166},"Whisper","OpenAI's open-source speech recognition model — the transcription engine behind voice input, running as both a backend service and on-device in the app.","whisper","simple-icons:openai",{"id":168,"title":169,"body":170,"description":825,"extension":826,"links":827,"meta":831,"metaDescription":832,"metaTitle":832,"navigation":677,"ogDescription":833,"path":834,"repository":835,"seo":839,"slug":840,"stem":841,"technologies":842,"updated":843,"__hash__":844,"stats":845},"open_source_en\u002Fopen-source\u002Fflutter-number-editing-controller.md","Flutter Number Editing Controller",{"type":171,"value":172,"toc":812},"minimark",[173,178,195,198,214,218,231,246,254,258,329,333,338,348,352,368,374,378,387,391,398,402,559,563,566,593,596,602,779,794,804,808],[174,175,177],"h2",{"id":176},"the-problem","The Problem",[179,180,181,182,186,187,190,191,194],"p",{},"Flutter's built-in ",[183,184,185],"code",{},"TextEditingController"," treats numbers as plain text. When a user types ",[183,188,189],{},"1000000"," into a price field, they see exactly that — an unreadable wall of digits. There is no grouping, no decimal formatting, and no currency symbol. Developers are left writing custom ",[183,192,193],{},"TextInputFormatter"," logic, manually parsing strings, and fighting cursor-position bugs every time formatting changes the text length.",[179,196,197],{},"Common issues include:",[199,200,201,205,208,211],"ul",{},[202,203,204],"li",{},"Users misread large numbers without thousand separators",[202,206,207],{},"Currency fields that ignore locale conventions (symbol placement, comma vs. dot)",[202,209,210],{},"Fragile parsing code that breaks when the formatted text contains non-digit characters",[202,212,213],{},"Cursor jumping to unexpected positions after each keystroke",[174,215,217],{"id":216},"how-number_editing_controller-solves-it","How number_editing_controller Solves It",[179,219,220,223,224,226,227,230],{},[183,221,222],{},"number_editing_controller"," is a drop-in replacement for ",[183,225,185],{},". Assign it to any ",[183,228,229],{},"TextField"," and it handles formatting, parsing, and cursor management automatically.",[179,232,233,234,237,238,241,242,245],{},"The user sees properly formatted text like ",[183,235,236],{},"$1,234.56"," or ",[183,239,240],{},"1.234,56 €",", while your code reads the clean numeric value through ",[183,243,244],{},"controller.number",".",[179,247,248],{},[249,250],"img",{"alt":251,"src":252,"style":253},"Currency formatting demo","\u002Fopen-source\u002Fnumber-editing-controller\u002Fcurrency.gif","max-height: 600px; height: auto; width: auto;",[174,255,257],{"id":256},"what-it-supports","What It Supports",[199,259,260,275,281,287,304,314,320],{},[202,261,262,266,267,270,271,274],{},[263,264,265],"strong",{},"Integer formatting"," — groups digits with locale-appropriate separators (",[183,268,269],{},"1,000,000"," in English, ",[183,272,273],{},"1.000.000"," in German)",[202,276,277,280],{},[263,278,279],{},"Decimal formatting"," — configurable minimum and maximum fraction digits",[202,282,283,286],{},[263,284,285],{},"Currency formatting"," — places the currency symbol before or after the number based on locale rules",[202,288,289,292,293,296,297,299,300,303],{},[263,290,291],{},"Locale awareness"," — uses ICU formatting patterns so ",[183,294,295],{},"1234.56"," in USD renders as ",[183,298,236],{}," in English and ",[183,301,302],{},"1.234,56 $"," in German",[202,305,306,309,310,313],{},[263,307,308],{},"Negative numbers"," — optional ",[183,311,312],{},"allowNegative"," flag to restrict input to positive values",[202,315,316,319],{},[263,317,318],{},"Runtime changes"," — switch locale, currency, or precision on the fly without recreating the controller",[202,321,322,325,326,328],{},[263,323,324],{},"External currency symbol"," — display the symbol as a ",[183,327,229],{}," prefix\u002Fsuffix decoration instead of inline text",[174,330,332],{"id":331},"real-world-use-cases","Real-World Use Cases",[334,335,337],"h3",{"id":336},"e-commerce-checkout","E-commerce checkout",[179,339,340,341,343,344,347],{},"A payment form needs to accept amounts in multiple currencies. With ",[183,342,222],{},", you create a single currency controller and change ",[183,345,346],{},"currencyName"," when the user picks a different currency. The field reformats instantly — no rebuild required.",[334,349,351],{"id":350},"multi-locale-financial-apps","Multi-locale financial apps",[179,353,354,355,357,358,357,360,363,364,367],{},"A banking app serving users in the US, Germany, and Japan needs each locale's conventions: ",[183,356,236],{}," vs ",[183,359,240],{},[183,361,362],{},"¥1,500",". The controller handles all of this from a single ",[183,365,366],{},"locale"," parameter.",[179,369,370],{},[249,371],{"alt":372,"src":373,"style":253},"Integer formatting demo","\u002Fopen-source\u002Fnumber-editing-controller\u002Finteger.gif",[334,375,377],{"id":376},"inventory-and-quantity-fields","Inventory and quantity fields",[179,379,380,381,383,384,386],{},"Warehouse apps deal with large integer quantities. The integer controller turns ",[183,382,189],{}," into ",[183,385,269],{},", making data entry errors easy to spot.",[334,388,390],{"id":389},"analytics-dashboards","Analytics dashboards",[179,392,393,394,397],{},"Decimal controllers with configurable precision let you format metric values — percentages with 2 digits, scientific measurements with 4 — while keeping the raw ",[183,395,396],{},"num"," value available for calculations.",[174,399,401],{"id":400},"locale-formatting-examples","Locale Formatting Examples",[403,404,405,424],"table",{},[406,407,408],"thead",{},[409,410,411,415,418,421],"tr",{},[412,413,414],"th",{},"Locale",[412,416,417],{},"Type",[412,419,420],{},"Raw Value",[412,422,423],{},"Displayed",[425,426,427,446,464,482,501,521,540],"tbody",{},[409,428,429,435,438,442],{},[430,431,432],"td",{},[183,433,434],{},"en",[430,436,437],{},"Currency (USD)",[430,439,440],{},[183,441,295],{},[430,443,444],{},[183,445,236],{},[409,447,448,453,456,460],{},[430,449,450],{},[183,451,452],{},"de",[430,454,455],{},"Currency (EUR)",[430,457,458],{},[183,459,295],{},[430,461,462],{},[183,463,240],{},[409,465,466,471,473,477],{},[430,467,468],{},[183,469,470],{},"fr",[430,472,455],{},[430,474,475],{},[183,476,295],{},[430,478,479],{},[183,480,481],{},"1 234,56 €",[409,483,484,489,492,497],{},[430,485,486],{},[183,487,488],{},"ja",[430,490,491],{},"Currency (JPY)",[430,493,494],{},[183,495,496],{},"1500",[430,498,499],{},[183,500,362],{},[409,502,503,508,511,516],{},[430,504,505],{},[183,506,507],{},"ru",[430,509,510],{},"Currency (RUB)",[430,512,513],{},[183,514,515],{},"500",[430,517,518],{},[183,519,520],{},"500 ₽",[409,522,523,527,530,535],{},[430,524,525],{},[183,526,434],{},[430,528,529],{},"Integer",[430,531,532],{},[183,533,534],{},"1234567",[430,536,537],{},[183,538,539],{},"1,234,567",[409,541,542,546,549,554],{},[430,543,544],{},[183,545,452],{},[430,547,548],{},"Decimal (max 2)",[430,550,551],{},[183,552,553],{},"1234.89",[430,555,556],{},[183,557,558],{},"1.234,89",[174,560,562],{"id":561},"getting-started","Getting Started",[179,564,565],{},"Install the package:",[567,568,573],"pre",{"className":569,"code":570,"language":571,"meta":572,"style":572},"language-shell shiki shiki-themes material-theme-lighter github-light github-dark","flutter pub add number_editing_controller\n","shell","",[183,574,575],{"__ignoreMap":572},[576,577,580,583,587,590],"span",{"class":578,"line":579},"line",1,[576,581,41],{"class":582},"sbgvK",[576,584,586],{"class":585},"s_sjI"," pub",[576,588,589],{"class":585}," add",[576,591,592],{"class":585}," number_editing_controller\n",[179,594,595],{},"Requires Flutter 3.19+ and Dart 3.3+.",[179,597,598,599,601],{},"Then create a controller and assign it to your ",[183,600,229],{},":",[567,603,606],{"className":604,"code":605,"language":18,"meta":572,"style":572},"language-dart shiki shiki-themes material-theme-lighter github-light github-dark","final controller = NumberEditingTextController.currency(\n  currencyName: 'USD',\n  locale: 'en',\n);\n\nTextField(\n  controller: controller,\n  keyboardType: TextInputType.numberWithOptions(decimal: true, signed: true),\n)\n\n\u002F\u002F Read the numeric value at any time\nfinal amount = controller.number; \u002F\u002F e.g. 1234.56\n",[183,607,608,636,650,663,672,679,686,699,738,744,749,756],{"__ignoreMap":572},[576,609,610,614,618,622,626,629,633],{"class":578,"line":579},[576,611,613],{"class":612},"sbsja","final",[576,615,617],{"class":616},"su5hD"," controller ",[576,619,621],{"class":620},"smGrS","=",[576,623,625],{"class":624},"sZMiF"," NumberEditingTextController",[576,627,245],{"class":628},"sP7_E",[576,630,632],{"class":631},"sGLFI","currency",[576,634,635],{"class":616},"(\n",[576,637,639,642,644,647],{"class":578,"line":638},2,[576,640,641],{"class":616},"  currencyName",[576,643,601],{"class":620},[576,645,646],{"class":585}," 'USD'",[576,648,649],{"class":628},",\n",[576,651,653,656,658,661],{"class":578,"line":652},3,[576,654,655],{"class":616},"  locale",[576,657,601],{"class":620},[576,659,660],{"class":585}," 'en'",[576,662,649],{"class":628},[576,664,666,669],{"class":578,"line":665},4,[576,667,668],{"class":616},")",[576,670,671],{"class":628},";\n",[576,673,675],{"class":578,"line":674},5,[576,676,678],{"emptyLinePlaceholder":677},true,"\n",[576,680,682,684],{"class":578,"line":681},6,[576,683,229],{"class":624},[576,685,635],{"class":616},[576,687,689,692,694,697],{"class":578,"line":688},7,[576,690,691],{"class":616},"  controller",[576,693,601],{"class":620},[576,695,696],{"class":616}," controller",[576,698,649],{"class":628},[576,700,702,705,707,710,712,715,718,720,724,727,730,732,734,736],{"class":578,"line":701},8,[576,703,704],{"class":616},"  keyboardType",[576,706,601],{"class":620},[576,708,709],{"class":624}," TextInputType",[576,711,245],{"class":628},[576,713,714],{"class":631},"numberWithOptions",[576,716,717],{"class":616},"(decimal",[576,719,601],{"class":620},[576,721,723],{"class":722},"s39Yj"," true",[576,725,726],{"class":628},",",[576,728,729],{"class":616}," signed",[576,731,601],{"class":620},[576,733,723],{"class":722},[576,735,668],{"class":616},[576,737,649],{"class":628},[576,739,741],{"class":578,"line":740},9,[576,742,743],{"class":616},")\n",[576,745,747],{"class":578,"line":746},10,[576,748,678],{"emptyLinePlaceholder":677},[576,750,752],{"class":578,"line":751},11,[576,753,755],{"class":754},"sutJx","\u002F\u002F Read the numeric value at any time\n",[576,757,759,761,764,766,768,770,773,776],{"class":578,"line":758},12,[576,760,613],{"class":612},[576,762,763],{"class":616}," amount ",[576,765,621],{"class":620},[576,767,696],{"class":616},[576,769,245],{"class":628},[576,771,772],{"class":616},"number",[576,774,775],{"class":628},";",[576,777,778],{"class":754}," \u002F\u002F e.g. 1234.56\n",[179,780,781,782,785,786,789,790,793],{},"Three controller types are available: ",[183,783,784],{},".integer()",", ",[183,787,788],{},".decimal()",", and ",[183,791,792],{},".currency()",". All options — locale, separators, currency, precision — can be changed at runtime without recreating the controller.",[179,795,796,797,245],{},"A complete working example with a currency picker, locale switcher, and external symbol placement is available in the ",[798,799,803],"a",{"href":800,"rel":801},"https:\u002F\u002Fgithub.com\u002Fnerdy-pro\u002Fflutter_number_editing_controller\u002Ftree\u002Fmain\u002Fexample",[802],"nofollow","example directory",[805,806],"questions",{":items":807},"[{\"title\":\"Does it work with Flutter web?\",\"text\":\"Yes, but JavaScript represents all numbers as 64-bit floats, so integers above 2^53 - 1 (about 9 quadrillion) lose precision silently. On native platforms, 64-bit integers are fully supported.\"},{\"title\":\"Can I change the currency or locale after creating the controller?\",\"text\":\"Yes. All formatting options are mutable at runtime. Changing locale, currency name, separators, or precision immediately reformats the displayed text without recreating the controller.\"},{\"title\":\"Does it support Indian numbering (lakh\u002Fcrore)?\",\"text\":\"Not yet. The library uses uniform group sizes derived from ICU locale patterns (typically groups of 3). Variable-width grouping systems like Indian numbering are not supported.\"},{\"title\":\"How do I display the currency symbol outside the text field?\",\"text\":\"Set showCurrencySymbol to false and use the resolvedCurrencySymbol and currencySymbolPosition properties to place the symbol as a TextField prefix or suffix decoration.\"},{\"title\":\"What happens with very long numbers?\",\"text\":\"Decimal precision is capped at 20 fraction digits (Dart's toStringAsFixed limit). Extremely long inputs may degrade formatting performance, but typical financial and business values are handled without issues.\"}]",[809,810,811],"style",{},"html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sbsja, html code.shiki .sbsja{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZMiF, html code.shiki .sZMiF{--shiki-light:#E2931D;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sGLFI, html code.shiki .sGLFI{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s39Yj, html code.shiki .s39Yj{--shiki-light:#39ADB5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}",{"title":572,"searchDepth":638,"depth":638,"links":813},[814,815,816,817,823,824],{"id":176,"depth":638,"text":177},{"id":216,"depth":638,"text":217},{"id":256,"depth":638,"text":257},{"id":331,"depth":638,"text":332,"children":818},[819,820,821,822],{"id":336,"depth":652,"text":337},{"id":350,"depth":652,"text":351},{"id":376,"depth":652,"text":377},{"id":389,"depth":652,"text":390},{"id":400,"depth":638,"text":401},{"id":561,"depth":638,"text":562},"A TextEditingController that formats numbers, decimals, and currencies as the user types — with full locale support.","md",[828],{"type":829,"url":830},"pub_dev","https:\u002F\u002Fpub.dev\u002Fpackages\u002Fnumber_editing_controller",{},null,"A TextEditingController that formats numbers, decimals and currencies while the user types, in whatever locale they are in.","\u002Fopen-source\u002Fflutter-number-editing-controller",{"type":836,"company":837,"name":838},"github","nerdy-pro","flutter_number_editing_controller",{"title":169,"description":825},"flutter-number-editing-controller","open-source\u002Fflutter-number-editing-controller",[41,18],"2026-03-17","1fdN-V29tM5NMZeLoBjADKt5c7N0NuSnisIrbkfbjDw",{"forks":674,"stars":652,"contributors":846,"last_release":856,"issues":857,"has_contribution_guide":858,"license":859,"last_updated":860,"watchers":652},[847,852],{"login":848,"profile_url":849,"avatar_url":850,"contributions":851},"thenixan","https:\u002F\u002Fgithub.com\u002Fthenixan","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F3602098?v=4",94,{"login":853,"profile_url":854,"avatar_url":855,"contributions":579},"maurovanetti","https:\u002F\u002Fgithub.com\u002Fmaurovanetti","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F402070?v=4","v2.1.0",0,false,"BSD-3-Clause","2026-03-17T10:44:29Z"]