Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I convert english numbers into another language numbers (I am using Bengali language) in Flutter? [duplicate]

Tags:

flutter

dart

I am getting english numbers (e.g. 123) as integer, now I want to show it in another language form (e.g. ১২৩).

I used a function and it also worked. But, it doesn't work in same stateful class more than once. It worked for the first Text widget but not for the second one

Column(
 children<Widget>:[
  Text(
   "${convertNumber(123)}"
  ),
  Text(
   "${convertNumber(5630)}"
  )
 ]
)
  String convertNumber(int eng){
    String bengali = '';
    for(int i = 0; i < eng.toString().length; i ++){
      setState(() {
        switch(eng.toString()[i]){
          case '1':
            bengali = bengali + '১';
            break;
          case '2':
            bengali = bengali + '২';
            break;
          case '3':
            bengali = bengali + '৩';
            break;
          case '4':
            bengali = bengali + '৪';
            break;
          case '5':
            bengali = bengali + '৫';
            break;
          case '6':
            bengali = bengali + '৬';
            break;
          case '7':
            bengali = bengali + '৭';
            break;
          case '8':
            bengali = bengali + '৮';
            break;
          case '9':
            bengali = bengali + '৯';
            break;
          default:
            bengali = bengali + '0';
        }
      });
    }
    return bengali;
  }

While I am using it for other numbers in the same stateful class, it doesn't work. And error was :

setState() or markNeedsBuild() called during build This LowerHalf widget cannot be marked as needing to build because the framework is already in the process of building widgets. A widget can be marked as needing to be built during the build phase only if one of its ancestors is currently building. This exception is allowed because the framework builds parent widgets before children, which means a dirty descendant will always be built. Otherwise, the framework might not visit this widget during this build phase. The widget on which setState() or markNeedsBuild() was called was: LowerHalf

like image 648
Md Abdul Halim Rafi Avatar asked Dec 02 '25 00:12

Md Abdul Halim Rafi


2 Answers

Do not call setState inside your convert function, just use your function to get a value.

Widgets rebuild after you call setState function. In your case, build calls setState that triggers build again.

like image 60
Igor Kharakhordin Avatar answered Dec 04 '25 19:12

Igor Kharakhordin


Create new function and return string after converting it.

Below function is for converting number from English to Hindi or Gujarati based on users selected language for application.

translateMobileNumber(String mobileNumber) {
var mobileNumberTrim = mobileNumber.toString().trim();
var translatedNumber = '';
var currentLan = 'gu';
switch (Get.locale.toString().substring(0, 2)) {
  case 'gu':
    currentLan = 'gu';
    break;
  case 'hi':
    currentLan = 'hi';
    break;
  case 'en':
    currentLan = 'en';
    break;
  default:
    currentLan = 'en';
    break;
}
if (currentLan == 'en') {
  return mobileNumberTrim;
}
for (int i = 0; i < mobileNumberTrim.length; i++) {
  switch (mobileNumberTrim[i]) {
    case '0':
      translatedNumber =
          currentLan == 'gu' ? '$translatedNumber૦' : '$translatedNumber૦';
      break;
    case '1':
      translatedNumber =
          currentLan == 'gu' ? '$translatedNumber૧' : '$translatedNumber१';
      break;
    case '2':
      translatedNumber =
          currentLan == 'gu' ? '$translatedNumber૨' : '$translatedNumber२';
      break;
    case '3':
      translatedNumber =
          currentLan == 'gu' ? '$translatedNumber૩' : '$translatedNumber३';
      break;
    case '4':
      translatedNumber =
          currentLan == 'gu' ? '$translatedNumber૪' : '$translatedNumber४';
      break;
    case '5':
      translatedNumber =
          currentLan == 'gu' ? '$translatedNumber૫' : '$translatedNumber५';
      break;
    case '6':
      translatedNumber =
          currentLan == 'gu' ? '$translatedNumber૬' : '$translatedNumber६';
      break;
    case '7':
      translatedNumber =
          currentLan == 'gu' ? '$translatedNumber૭' : '$translatedNumber७';
      break;
    case '8':
      translatedNumber =
          currentLan == 'gu' ? '$translatedNumber૮' : '$translatedNumber८';
      break;
    case '9':
      translatedNumber =
          currentLan == 'gu' ? '$translatedNumber૯' : '$translatedNumber९';
      break;
  }
}
return translatedNumber;

}

like image 40
Deven Avatar answered Dec 04 '25 20:12

Deven



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!