Flutter 颤振动态文本方向性问题

Flutter 颤振动态文本方向性问题,flutter,text,direction,Flutter,Text,Direction,复制错误的代码: class TestWidget extends StatefulWidget { @override _TestWidgetState createState() => _TestWidgetState(); } class _TestWidgetState extends State<TestWidget> { bool isRtl = false; @override Widget build(BuildContext conte

复制错误的代码:

class TestWidget extends StatefulWidget {
  @override
  _TestWidgetState createState() => _TestWidgetState();
}

class _TestWidgetState extends State<TestWidget> {
  bool isRtl = false;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisSize: MainAxisSize.max,
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Directionality(
              child: TextField(),
              textDirection: isRtl ? TextDirection.rtl : TextDirection.ltr,
            ),
            RaisedButton(
              child: Text('click me!'),
              onPressed: () => setState(() => isRtl = !isRtl),
            ),
          ],
        ),
      ),
    );
  }
}
class TestWidget扩展了StatefulWidget{
@凌驾
_TestWidgetState createState();
}
类_TestWidgetState扩展了状态{
bool-isRtl=false;
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:中(
子:列(
mainAxisSize:mainAxisSize.max,
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
方向性(
子项:TextField(),
textDirection:isRtl?textDirection.rtl:textDirection.ltr,
),
升起的按钮(
child:Text('click me!'),
按下时:()=>setState(()=>isRtl=!isRtl),
),
],
),
),
);
}
}
复制步骤:

  • 在文本字段中键入“某物”
  • 拆下它,它可以正常工作
  • 点击按钮
  • 在文本字段中键入“سلادنیا”
  • 尝试删除它#查看错误
    此错误是否有解决方法或修复方法?

    解决方案1。
    文本字段中的
    最小行设置为
    1
    ,将
    最大行设置为
    null

    @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: Center(
            child: Column(
              mainAxisSize: MainAxisSize.max,
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                Directionality(
                  child: TextField(
                    minLines: 1, // this is new
                    maxLines: null, // this is new
                  ),
                  textDirection: isRtl ? TextDirection.rtl : TextDirection.ltr,
                ),
                RaisedButton(
                  child: Text('click me!'),
                  onPressed: () => setState(() => isRtl = !isRtl),
                ),
              ],
            ),
          ),
        );
      }
    
    @覆盖
    小部件构建(构建上下文){
    返回脚手架(
    正文:中(
    子:列(
    mainAxisSize:mainAxisSize.max,
    mainAxisAlignment:mainAxisAlignment.center,
    儿童:[
    方向性(
    孩子:TextField(
    minLines:1,//这是新的
    maxLines:null,//这是新的
    ),
    textDirection:isRtl?textDirection.rtl:textDirection.ltr,
    ),
    升起的按钮(
    child:Text('click me!'),
    按下时:()=>setState(()=>isRtl=!isRtl),
    ),
    ],
    ),
    ),
    );
    }
    
    解决方案2。删除在rtl中点击空格键时插入的额外字符:

      TextEditingController _textEditingController = TextEditingController();
      var isRtl = false;
      var _text = '';
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: Center(
            child: Column(
              mainAxisSize: MainAxisSize.max,
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                Directionality(
                  textDirection: isRtl ? TextDirection.rtl : TextDirection.ltr,
                  child: TextFormField(
                    onChanged: (val) {
                      if (val.codeUnitAt(val.length - 1) == 8207 ||
                          val.codeUnitAt(val.length - 1) == 8206) {
                        setState(() {
                          _text = val.replaceAll(String.fromCharCode(8207), '');
                          _text = _text.replaceAll(String.fromCharCode(8206), '');
                          _textEditingController =
                          new TextEditingController.fromValue(
                              new TextEditingValue(
                                  text: _text,
                                  selection: new TextSelection.collapsed(
                                      offset: _text.length)));
                        });
                      }
                      else {
                        setState(() {
                          _text = val;
                        });
                      }
                    },
                    controller: _textEditingController,
                  ),
                ),
                RaisedButton(
                  child: Text('click me!'),
                  onPressed: () => setState(() {
                    isRtl = !isRtl;
                  }),
                ),
              ],
            ),
          ),
        );
      }
    
    TextEditingController\u TextEditingController=TextEditingController();
    var-isRtl=false;
    var_text='';
    @凌驾
    小部件构建(构建上下文){
    返回脚手架(
    正文:中(
    子:列(
    mainAxisSize:mainAxisSize.max,
    mainAxisAlignment:mainAxisAlignment.center,
    儿童:[
    方向性(
    textDirection:isRtl?textDirection.rtl:textDirection.ltr,
    子项:TextFormField(
    一旦更改:(val){
    如果(val.codeunit)(val.length-1)=8207||
    val.codeUnitAt(val.length-1)=8206){
    设置状态(){
    _text=val.replaceAll(String.fromCharCode(8207),“”);
    _text=_text.replaceAll(String.fromCharCode(8206),“”);
    _文本编辑控制器=
    新建TextEditingController.fromValue(
    新文本编辑值(
    文本:_text,
    选择:新建TextSelection.com(
    偏移量:_text.length));
    });
    }
    否则{
    设置状态(){
    _text=val;
    });
    }
    },
    控制器:_textededitingcontroller,
    ),
    ),
    升起的按钮(
    child:Text('click me!'),
    按下时:()=>设置状态(){
    isRtl=!isRtl;
    }),
    ),
    ],
    ),
    ),
    );
    }
    
    我稍微改变了他的答案:

      TextEditingController _textEditingController = TextEditingController();
      var isRtl = false;
      var _text = '';
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: Center(
            child: Column(
              mainAxisSize: MainAxisSize.max,
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                Directionality(
                  textDirection: isRtl ? TextDirection.rtl : TextDirection.ltr,
                  child: TextFormField(
                    onChanged: (val) {
                      if (val.codeUnitAt(val.length - 1) == 8207 ||
                          val.codeUnitAt(val.length - 1) == 8206) {
                        setState(() {
                          _text = val.replaceAll(String.fromCharCode(8207), '');
                          _text = _text.replaceAll(String.fromCharCode(8206), '');
                          _textEditingController.value = TextEditingValue(
                            text: _text,
                            selection: TextSelection.collapsed(offset: _text.length),
                          ); //changed here!
                        });
                      }
                      else {
                        setState(() {
                          _text = val;
                        });
                      }
                    },
                    controller: _textEditingController,
                  ),
                ),
                RaisedButton(
                  child: Text('click me!'),
                  onPressed: () => setState(() {
                    isRtl = !isRtl;
                  }),
                ),
              ],
            ),
          ),
        );
      }
    
    TextEditingController\u TextEditingController=TextEditingController();
    var-isRtl=false;
    var_text='';
    @凌驾
    小部件构建(构建上下文){
    返回脚手架(
    正文:中(
    子:列(
    mainAxisSize:mainAxisSize.max,
    mainAxisAlignment:mainAxisAlignment.center,
    儿童:[
    方向性(
    textDirection:isRtl?textDirection.rtl:textDirection.ltr,
    子项:TextFormField(
    一旦更改:(val){
    如果(val.codeunit)(val.length-1)=8207||
    val.codeUnitAt(val.length-1)=8206){
    设置状态(){
    _text=val.replaceAll(String.fromCharCode(8207),“”);
    _text=_text.replaceAll(String.fromCharCode(8206),“”);
    _textEditingController.value=TextEditingValue(
    文本:_text,
    选择:文本选择。折叠(偏移量:_text.length),
    )这里变了!
    });
    }
    否则{
    设置状态(){
    _text=val;
    });
    }
    },
    控制器:_textededitingcontroller,
    ),
    ),
    升起的按钮(
    child:Text('click me!'),
    按下时:()=>设置状态(){
    isRtl=!isRtl;
    }),
    ),
    ],
    ),
    ),
    );
    }
    
    它对我来说很好,有什么错误吗?@Mobina你用的是什么版本的flifter?我用的是
    1.17.5
    。我也用的是1.17.5 stable,但对我来说它有问题!也许设备/模拟器有问题?考虑尝试另一个装置。谢谢你的回答。它的工作,但我需要最大线设置为1!还有其他的解决方案吗?我认为除了为文本字段创建一个新类之外,没有其他解决方案。如果解决了问题,还可以将maxLines设置为2@AmirHosseinMohammadzadehmax线路必须为1。。你能告诉我更多关于你为学生开设新课程的意思吗