如何更改FLUTTER DropdownMenuItem的textDirection(更改小部件方向)

时间:2019-05-09 01:35:42

标签: flutter flutter-layout

我需要根据语言选择更改小部件的textDirection。我的全局翻译类中有一个textDirection变量,并将其添加到父窗口小部件中。除了DropdownMenuItems之外,其他所有方法都工作正常。我尝试使用方向性小部件包装文本小部件,但仍无法按预期工作。 例如:当我更改使用rtl项的语言时,应与哪个 目前没有发生。

return DropdownMenuItem(
                child: Directionality(textDirection: Translations.textDirection ,
                    child: new Text(listItems,textDirection: Translations.textDirection,)

                    ...

我还尝试在用容器包装整个DropdownButton之后添加textDirection。

 return Container(
      child: Row(
        mainAxisAlignment: MainAxisAlignment.end,
        textDirection: Translations.textDirection,
        children: <Widget>[
          DropdownButton(                   

但仍然无法正常工作。如何更改DropdownMenuItems的textDirection?任何帮助将不胜感激。

注意:我无法将textDirection添加到MaterialApp。选择其他语言时需要更改它。

3 个答案:

答案 0 :(得分:3)

I Solved it

DropdownButton<String>(
                hint: Text(
                  'City',
                  style: TextStyle(fontFamily: 'Cairo'),
                ),
                isExpanded: true,
                value: dropdownValue,
                elevation: 4,
                style: TextStyle(
                    color: Colors.deepPurple, fontFamily: 'Cairo'),
                underline: Container(
                  height: 2,
                  color: Colors.deepPurpleAccent,
                ),
                onChanged: (String newValue) {
                  setState(() {
                    dropdownValue = newValue;
                    debugPrint(cityInfo.indexOf(newValue).toString());
                  });
                },
                items:
                    cityInfo.map<DropdownMenuItem<String>>((String value) {
                  return DropdownMenuItem<String>(
                    value: value,
                    child: Container(
                      alignment: Alignment.centerRight,
                      child: Text(
                        value,
                      ),
                    ),
                  );
                }).toList(),
              ),

答案 1 :(得分:0)

DropdownButton<String>(
          items: <String>['A', 'B', 'C', 'D'].map((String value) {
            return new DropdownMenuItem<String>(
              value: value,
              child: new Center(
                child: Text(value),
              ),
            );
          }).toList(),
          onChanged: (_) {},
        ),

只需将DropDownMenuItem子窗口小部件(文本)包装为中心窗口小部件

更新:对不起,我想念它是如何使小部件居中的。

您可以将TextDirection.rtl或TextDirection.ltr添加到textDirection属性

如果它不起作用,请尝试将其包装为mainAxisAlignment结尾的行

答案 2 :(得分:0)

对于从左到右的文字方向:

Text('MyText', textDirection: TextDirection.ltr,)

OR

从右向左的文字方向:

Text('MyText', textDirection: TextDirection.rtl)