Flutter TextInputFormatter does not do what is intended
I have tried to extend the Flutter's TextInputFormatter
to add thousand comma separator on the fly as the user types.
import 'package:flutter/services.dart';
class ThousandSeparatorTextInputFormatter extends TextInputFormatter {
@override
TextEditingValue formatEditUpdate(
TextEditingValue oldValue,
TextEditingValue newValue) {
return newValue.copyWith(
text: _addThousandsSeparator(newValue.text)
);
}
// This adds thousand comma separator
String _addThousandsSeparator(String value) {
RegExp reg = RegExp(r'(d{1,3})(?=(d{3})+(?!d))');
Function determine = (Match match) => '${match[1]},';
return value.replaceAllMapped(reg, determine);
}
}
The problem is when used in the TextField
the comma separator appears at the right position the first time, as the user keep typing the separator appears after every digit from the last three.
When the _addThousandSeparator function is used on its own, i.e. on some values, it does work. What am I doing wrong?
dart flutter
add a comment |
I have tried to extend the Flutter's TextInputFormatter
to add thousand comma separator on the fly as the user types.
import 'package:flutter/services.dart';
class ThousandSeparatorTextInputFormatter extends TextInputFormatter {
@override
TextEditingValue formatEditUpdate(
TextEditingValue oldValue,
TextEditingValue newValue) {
return newValue.copyWith(
text: _addThousandsSeparator(newValue.text)
);
}
// This adds thousand comma separator
String _addThousandsSeparator(String value) {
RegExp reg = RegExp(r'(d{1,3})(?=(d{3})+(?!d))');
Function determine = (Match match) => '${match[1]},';
return value.replaceAllMapped(reg, determine);
}
}
The problem is when used in the TextField
the comma separator appears at the right position the first time, as the user keep typing the separator appears after every digit from the last three.
When the _addThousandSeparator function is used on its own, i.e. on some values, it does work. What am I doing wrong?
dart flutter
add a comment |
I have tried to extend the Flutter's TextInputFormatter
to add thousand comma separator on the fly as the user types.
import 'package:flutter/services.dart';
class ThousandSeparatorTextInputFormatter extends TextInputFormatter {
@override
TextEditingValue formatEditUpdate(
TextEditingValue oldValue,
TextEditingValue newValue) {
return newValue.copyWith(
text: _addThousandsSeparator(newValue.text)
);
}
// This adds thousand comma separator
String _addThousandsSeparator(String value) {
RegExp reg = RegExp(r'(d{1,3})(?=(d{3})+(?!d))');
Function determine = (Match match) => '${match[1]},';
return value.replaceAllMapped(reg, determine);
}
}
The problem is when used in the TextField
the comma separator appears at the right position the first time, as the user keep typing the separator appears after every digit from the last three.
When the _addThousandSeparator function is used on its own, i.e. on some values, it does work. What am I doing wrong?
dart flutter
I have tried to extend the Flutter's TextInputFormatter
to add thousand comma separator on the fly as the user types.
import 'package:flutter/services.dart';
class ThousandSeparatorTextInputFormatter extends TextInputFormatter {
@override
TextEditingValue formatEditUpdate(
TextEditingValue oldValue,
TextEditingValue newValue) {
return newValue.copyWith(
text: _addThousandsSeparator(newValue.text)
);
}
// This adds thousand comma separator
String _addThousandsSeparator(String value) {
RegExp reg = RegExp(r'(d{1,3})(?=(d{3})+(?!d))');
Function determine = (Match match) => '${match[1]},';
return value.replaceAllMapped(reg, determine);
}
}
The problem is when used in the TextField
the comma separator appears at the right position the first time, as the user keep typing the separator appears after every digit from the last three.
When the _addThousandSeparator function is used on its own, i.e. on some values, it does work. What am I doing wrong?
dart flutter
dart flutter
edited Jan 3 at 14:55
Amani
asked Jan 3 at 11:28
AmaniAmani
3,325114573
3,325114573
add a comment |
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54021415%2fflutter-textinputformatter-does-not-do-what-is-intended%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54021415%2fflutter-textinputformatter-does-not-do-what-is-intended%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown