Flutter:在一个简单的示例中,输入文本字段无法正常工作.....我哪里错了?
Flutter: input text field don't work properly in a simple example..... where am I wrong?
我用输入文本做了一个简单的例子,但是在我的 phone (nokia edge 6) 上,在旧平板电脑 (samsung) 上都不起作用....2 问题:
1) 如果我点击输入,插入的字符串(只要我写了一些文本)就不会出现在输入中
2) 如果使用输入的初始值,如果我点击它,我无法写入文本,也无法将光标定位在我想要的位置(它只能在输入中的其他文本之前移动)
我该怎么办?非常感谢!
这是我的代码:
import 'package:flutter/material.dart';
void main() {
runApp(
new MaterialApp(
title: 'Flutter Demo',
theme: new ThemeData(
primarySwatch: Colors.blue
),
home: new FlutterDemo()
)
);
}
class FlutterDemo extends StatefulWidget {
FlutterDemo({ Key key }) : super(key: key);
@override
_FlutterDemoState createState() => new _FlutterDemoState();
}
class _FlutterDemoState extends State<FlutterDemo> {
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text('Input Demo')
),
body: new Center(
child:
new Input(
value: new InputValue(text: 'via Dei Giacinti n° 8'),
labelText: 'INDIRIZZO'
)
)
);
}
}
据我了解,问题是每次用户编辑文本(或更改光标的位置)时,小部件的状态都会发生变化,因此需要重新构建。构建小部件时,您指定 Input
的文本,因此它永远不会改变。
以下应该有效:
class _FlutterDemoState extends State<FlutterDemo> {
InputValue inputValue = new InputValue(text: 'via Dei Giacinti n° 8');
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(title: new Text('Input Demo')),
body: new Center(child: new Input(
value: inputValue,
labelText: 'INDIRIZZO',
onChanged: (InputValue newInputValue) {
setState(() {
inputValue = newInputValue;
});
})));
}
}
我在 flutter web 中遇到了同样的问题,但后来我注意到如果我添加 maxlines: 2
它确实有效。
TextFotmField() and TextField()
我用输入文本做了一个简单的例子,但是在我的 phone (nokia edge 6) 上,在旧平板电脑 (samsung) 上都不起作用....2 问题:
1) 如果我点击输入,插入的字符串(只要我写了一些文本)就不会出现在输入中
2) 如果使用输入的初始值,如果我点击它,我无法写入文本,也无法将光标定位在我想要的位置(它只能在输入中的其他文本之前移动)
我该怎么办?非常感谢!
这是我的代码:
import 'package:flutter/material.dart';
void main() {
runApp(
new MaterialApp(
title: 'Flutter Demo',
theme: new ThemeData(
primarySwatch: Colors.blue
),
home: new FlutterDemo()
)
);
}
class FlutterDemo extends StatefulWidget {
FlutterDemo({ Key key }) : super(key: key);
@override
_FlutterDemoState createState() => new _FlutterDemoState();
}
class _FlutterDemoState extends State<FlutterDemo> {
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text('Input Demo')
),
body: new Center(
child:
new Input(
value: new InputValue(text: 'via Dei Giacinti n° 8'),
labelText: 'INDIRIZZO'
)
)
);
}
}
据我了解,问题是每次用户编辑文本(或更改光标的位置)时,小部件的状态都会发生变化,因此需要重新构建。构建小部件时,您指定 Input
的文本,因此它永远不会改变。
以下应该有效:
class _FlutterDemoState extends State<FlutterDemo> {
InputValue inputValue = new InputValue(text: 'via Dei Giacinti n° 8');
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(title: new Text('Input Demo')),
body: new Center(child: new Input(
value: inputValue,
labelText: 'INDIRIZZO',
onChanged: (InputValue newInputValue) {
setState(() {
inputValue = newInputValue;
});
})));
}
}
我在 flutter web 中遇到了同样的问题,但后来我注意到如果我添加 maxlines: 2
它确实有效。
TextFotmField() and TextField()