英文:
Using Localization inside a list - Flutter
问题
在我的应用程序中,包含了本地化(翻译“en”和“ar”)。在我的翻译JSON文件中,有用户在注册过程中选择的城市,这些城市将显示在一个DropDownButtonFormField小部件中,如下所示:
final provincesField = DropdownButtonFormField<String>(
  value: dropDownValue,
  onChanged: (String? newValue) {
    setState(() {
      dropDownValue = newValue!;
    });
  },
  items: provinces.map<DropdownMenuItem<String>>((String value) {
    return DropdownMenuItem<String>(
        value: value,
        child: SizedBox(
          width: 100.0,
          child: Text(value, textAlign: TextAlign.center),
        ));
  }).toList(),
  elevation: 4,
  decoration: InputDecoration(
    prefixIcon: Icon(Icons.flag_circle),
    labelText: AppLocalizations.of(context)!.chooseProvinence,
    alignLabelWithHint: true,
    border: OutlineInputBorder(
      borderRadius: BorderRadius.circular(10),
    ),
  ),
);
这些城市在以下列表中声明:
List<String> provinces = [
  'عمان',
  'إربد',
  'الزرقاء',
  'المفرق',
  'الطفيلة',
  'عجلون',
  'معان',
  'الكرك',
  'مادبا',
  'العقبة',
  'البلقاء',
  'جرش'
];
String dropDownValue = 'عمان';
我尝试通过在列表内使用AppLocalizations.of(context)!.city,但它不起作用,所以我相信有一种方法可以根据本地化声明列表值,我会感激任何帮助。
英文:
My application contains localizations (translation "en","ar"), in my translation JSON files there are cities that users will choose while registration process these cities appears in a DropDownButtonFormField widget as follows:
final provincesField = DropdownButtonFormField<String>(
      value: dropDownValue,
      onChanged: (String? newValue) {
        setState(() {
          dropDownValue = newValue!;
        });
      },
      items: provinces.map<DropdownMenuItem<String>>((String value) {
        return DropdownMenuItem<String>(
            value: value,
            child: SizedBox(
              width: 100.0,
              child: Text(value, textAlign: TextAlign.center),
            ));
      }).toList(),
      elevation: 4,
      decoration: InputDecoration(
        prefixIcon: Icon(Icons.flag_circle),
        labelText: AppLocalizations.of(context)!.chooseProvinence,
        alignLabelWithHint: true,
        border: OutlineInputBorder(
          borderRadius: BorderRadius.circular(10),
        ),
      ),
    );
the cities are declared in this list:
List<String> provinces = [
    'عمان',
    'إربد',
    'الزرقاء',
    'المفرق',
    'الطفيلة',
    'عجلون',
    'معان',
    'الكرك',
    'مادبا',
    'العقبة',
    'البلقاء',
    'جرش'
  ];
  String dropDownValue = 'عمان';
what am trying to achieve is that cities will appear to user based on the app language. I have tried to use AppLocalizations.of(context)!.city inside of the list but its not working so i believe there is some way to declare the list values based on localization, ill appreciate any help
答案1
得分: 1
      "دكا" : "دكا",
      "شيتاغونغ" : "شيتاغونغ",
      "كوميلا" : "كوميلا",
      "راجشاهي" : "راجشاهي",
      "بولا" : "بولا",
      List<String> provinces = [
        "دكا",
        "شيتاغونغ",
        "كوميلا",
        "راجشاهي",
        "بولا",
      ];
      String dropDownValue = 'دكا';
      Widget TestWidget() {
        return DropdownButtonFormField<String>(
          value: dropDownValue,
          onChanged: (String? newValue) {
            // To print the value with localization
            print(newValue!.tr);
          },
          items: provinces.map<DropdownMenuItem<String>>((String value) {
            return DropdownMenuItem<String>(value: value, child: Text(value.tr));
          }).toList(),
          elevation: 4,
          decoration: InputDecoration(
            prefixIcon: Icon(Icons.flag_circle),
            labelText: 'Select',
            alignLabelWithHint: true,
            border: OutlineInputBorder(
              borderRadius: BorderRadius.circular(10),
            ),
          ),
        );
      }
英文:
Suppose below localizations data is your cities list
English:
  "Dhaka" : "Dhaka",
  "Chittagong" : "Chittagong",
  "Cumilla" : "Cumilla",
  "Rajshahi" : "Rajshahi",
  "Bhola" : "Bhola",
Arabic:
  "Dhaka" : "دكا",
  "Chittagong" : "شيتاغونغ",
  "Cumilla" : "كوميلا",
  "Rajshahi" : "راجشاهي",
  "Bhola" : "بولا",
initialize your the localization keys of your cities and dropDownValue
  List<String> provinces = [
    "Dhaka",
    "Chittagong",
    "Cumilla",
    "Rajshahi",
    "Bhola",
  ];
  String dropDownValue = 'Dhaka';
here is the widget. I used getx localization. So I used 'tr' after the child text of DropdownMenuItem. I hope it's can help u.
  Widget TestWidget() {
    return DropdownButtonFormField<String>(
      value: dropDownValue,
      onChanged: (String? newValue) {
        // To print the value with localization
        print(newValue!.tr);
      },
      items: provinces.map<DropdownMenuItem<String>>((String value) {
        return DropdownMenuItem<String>(value: value, child: Text(value.tr));
      }).toList(),
      elevation: 4,
      decoration: InputDecoration(
        prefixIcon: Icon(Icons.flag_circle),
        labelText: 'Select',
        alignLabelWithHint: true,
        border: OutlineInputBorder(
          borderRadius: BorderRadius.circular(10),
        ),
      ),
    );
  }
If you need to store the city in database or anywhere with localization then you can use it like [dropDownValue.tr]
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论