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。。你能告诉我更多关于你为学生开设新课程的意思吗