首页 > 解决方案 > 如何在 Flutter 中将英文数字转换为另一种语言数字(我使用的是孟加拉语)?

问题描述

我将英文数字(例如 123)作为整数,现在我想以另一种语言形式(例如১২৩)显示它。

我使用了一个函数,它也有效。但是,它不能在同一个有状态的类中多次使用。它适用于第一个Text小部件,但不适用于第二个

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;
  }

虽然我将它用于同一有状态类中的其他数字,但它不起作用。错误是:

构建期间调用的 setState() 或 markNeedsBuild() 此 LowerHalf 小部件无法标记为需要构建,因为框架已经在构建小部件的过程中。仅当其祖先之一当前正在构建时,小部件才能在构建阶段标记为需要构建。这个例外是允许的,因为框架在子组件之前构建父窗口小部件,这意味着将始终构建脏后代。否则,框架可能不会在此构建阶段访问此小部件。调用 setState() 或 markNeedsBuild() 的小部件是:LowerHalf

标签: flutterdart

解决方案


不要在你的转换函数中调用setState,只需使用你的函数来获取一个值。

调用setState函数后,小部件会重建。在您的情况下,构建调用setState再次触发构建


推荐阅读