skip to Main Content

I making calculator
for calculator i want 4321 to 4,321 => after 3 numbers it must to put ‘,’
this is the text form fild part i think its bether to skip this part to therd part in cods (go to ///////// part )

 Container(
              alignment: Alignment.centerRight,
              child: TextFormField(
                textAlign: TextAlign.end,
                readOnly: true,
                cursorColor: Colors.grey[700],
                controller: controller,
                keyboardType: TextInputType.none,
                decoration: const InputDecoration(
                  hintText: '0',
                  hintStyle: TextStyle(color: Colors.white, fontSize: 45),
                  enabledBorder: UnderlineInputBorder(
                    borderSide: BorderSide(
                      width: 0,
                      color: Colors.transparent,
                    ),
                  ),
                  focusedBorder: UnderlineInputBorder(
                    borderSide: BorderSide(
                      width: 0,
                      color: Colors.transparent,
                    ),
                  ),
                ),
                style: const TextStyle(color: Colors.white, fontSize: 43),
              ),
            ),

I made class to bild elevator button :

class ElebatedButtonMaker extends StatelessWidget {
  ElebatedButtonMaker({
    Key? key,
    required this.color,
    required this.height,
    required this.width,
    this.widget,
    required this.text,
    this.onPressed,
  }) : super(key: key);

  final String text;
  final Color color;
  final double width;
  final double height;
  void Function()? onPressed;
  Widget? widget;
  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
        onPressed: onPressed ?? () {},
        style: ElevatedButton.styleFrom(
            backgroundColor: color,
            elevation: 0,
            fixedSize: Size(MediaQuery.of(context).size.width * width,
                MediaQuery.of(context).size.width * height)),
        child: text.isNotEmpty
            ? Text(
                text,
                style: const TextStyle(
                  fontSize: 25,
                ),
              )
            : widget);
  }
}

//////////////////////////////////////////////////////////////////////////////////////////////
I didnt see eny problems here and it
Im calling this class for putting it in the onpressed part

class Passclass {
  const Passclass({
    this.pakonebord,
    this.resetbord,
    this.textstring,
    this.textdouble,
    required this.controller,
  });
  final bool? resetbord;
  final bool? pakonebord;
  final String? textstring;
  final TextEditingController controller;
  final int? textdouble;
  final String alamat = ',';
  passer() {
    if (textdouble != null) {
      if (textdouble == 0) {
        return controller.text = '0';
      }
      return controller.text = controller.text + textdouble.toString();
    }
    if (!(controller.text.contains('.'))) {
      return controller.text = controller.text + textstring!;
    }

    if (controller.text.length > 3) {
      return controller.text = controller.text.substring(0, 1) +
          alamat +
          controller.text.substring(1);
    } 
    //  *********BUG*************** this if must to do take 3 numbelrs and put ',' inside them
  }

  reset() {
    if (resetbord == true) {
      return controller.text = '0';
    }
  }

  pakon() {
    if (controller.text.isNotEmpty) {
      if (pakonebord == true) {
        return controller.text =
            controller.text.substring(0, controller.text.length - 1);
      }
    }
  }
}

i dont have eny errors but it didnt do all the if’s was do ing well but thisone i dont know pleas help me

i tryed alot bot i didnt sucsessful i did smplis it for myself do ing :

void main() {
  String text = '4321';
  if (text.length > 3) {
    print('${text.substring(0, 1)},${text.substring(1)}');
  }
}

i did work well but in the project i dont know what is the main problem of it

2

Answers


  1. Instead of all this code, you could use intl package to do this for you:

    import 'package:intl/intl.dart';
    
    final numFormatter = new NumberFormat("#,##0.00", "en_US");
    
    //usage
    var formattedString = numFormatter.format(1234567.89);
    
    //Output will be 1,234,567.89
    print(formattedString);
    
    Login or Signup to reply.
  2. @override
      Widget build(BuildContext context) {
        String addComma(String number, {bool? isReturnZero}) {
          number = number.trim();
          if (double.tryParse(number) != null) {
            if (double.parse(number) == 0) {
              return isReturnZero != null ? '0' : '';
            } else {
              NumberFormat formater = NumberFormat();
              if (double.parse(number) > 999) formater = NumberFormat('#,000');
              return formater.format(double.tryParse(number));
            }
          } else {
            return number;
          }
        }
    
        return Scaffold(
          body: Container(
              alignment: Alignment.center,
              child: TextField(
                controller: _textEditingController,
                inputFormatters: [
                  FilteringTextInputFormatter.allow(RegExp(r"[0-9]"),
                      replacementString: ''),
                  LengthLimitingTextInputFormatter(50),
                ],
                onChanged: (text) {
                  var newText = addComma(text);
                  _textEditingController.value = TextEditingValue(
                      text: newText,
                      selection: TextSelection.fromPosition(TextPosition(
                          affinity: TextAffinity.downstream,
                          offset: newText.length)));
                },
              )),
        );
      }
    }
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search