Md Abdul Halim Rafi
Md Abdul Halim Rafi

Reputation: 1980

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

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

Upvotes: 3

Views: 1363

Answers (2)

Deven
Deven

Reputation: 724

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;

}

Upvotes: 1

Igor Kharakhordin
Igor Kharakhordin

Reputation: 9923

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.

Upvotes: 2

Related Questions