当我尝试将textfieldcontroller作为flutter 2.5中的streambuilder中的事件推动时,键盘从数字变为alpha
void main() {
runApp(MyApp());
}
final _controller = StreamDataController<TextEditingController>();
var texttype="";
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: StreamBuilder<TextEditingController>(
stream: _controller.stream,
builder: (context,snapShot){
return HomeScreen();
}),
),
);
}
}
class HomeScreen extends StatefulWidget {
static final StringBuffer dummyText = StringBuffer();
@override
State<HomeScreen> createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
TextEditingController controllerText= TextEditingController(text: HomeScreen.dummyText.toString());
@override
void dispose() {
super.dispose();
controllerText.dispose();
}
//HomeScreen({required Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
return TextField(
controller: controllerText,
decoration: InputDecoration(
labelText: "Enter Text here"
),
onChanged: (String text){
if((text.length - HomeScreen.dummyText.length).abs() == 3){
controllerText=TextEditingController(text:text);
HomeScreen.dummyText.write(text);
_controller.pushEvent(controllerText);
}
},
);
// });
}
}
class StreamDataController<T> {
final _controller = StreamController<T>();
Stream<T> get stream => _controller.stream;
void pushEvent(T event){
_controller.sink.add(event);
}
void dispose(){
_controller.close();
}
}
为此,任何解决方案都需要通过此方法刷新组件,只需避免每次尝试输入一个数字时,键盘从数字转移到Alpha。 我很可能是导致SCE引起的,我在Stream Builder中再次推动控制器,否则会发生这种情况,但我想要某种方法来解决此问题。这在Flutter 2.2.0版本之前正常工作。
void main() {
runApp(MyApp());
}
final _controller = StreamDataController<TextEditingController>();
var texttype="";
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: StreamBuilder<TextEditingController>(
stream: _controller.stream,
builder: (context,snapShot){
return HomeScreen();
}),
),
);
}
}
class HomeScreen extends StatefulWidget {
static final StringBuffer dummyText = StringBuffer();
@override
State<HomeScreen> createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
TextEditingController controllerText= TextEditingController(text: HomeScreen.dummyText.toString());
@override
void dispose() {
super.dispose();
controllerText.dispose();
}
//HomeScreen({required Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
return TextField(
controller: controllerText,
decoration: InputDecoration(
labelText: "Enter Text here"
),
onChanged: (String text){
if((text.length - HomeScreen.dummyText.length).abs() == 3){
controllerText=TextEditingController(text:text);
HomeScreen.dummyText.write(text);
_controller.pushEvent(controllerText);
}
},
);
// });
}
}
class StreamDataController<T> {
final _controller = StreamController<T>();
Stream<T> get stream => _controller.stream;
void pushEvent(T event){
_controller.sink.add(event);
}
void dispose(){
_controller.close();
}
}
any fix for this since i do need to refresh my component by this method just avoid the keyboard shifting from numeric to alpha every time i try to enter a number.
it is most probably being caused sce i am pushing the controller again in stream builder, else it dosent happen but i want some way to fix this issue. this was working correctly before flutter 2.2.0 version.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
尝试将此行添加到您的TextField()
更新答案(基于评论),
因此,如果您希望我单个TextField容纳不同的用例,例如手机号码和电子邮件,可以使用选择器来选择要输入的内容选择文本字段的输入类型的字段和条件。
我将添加一个有关代码的外观的小示例 -
Try adding this line to your TextField()
UPDATED ANSWER (based on the comment)
So if you want I single textfield to accommodate different use cases like for mobile number and email, you can use a selector to select what you'll be entering to the field and condition to choose the input type for the text field.
I will add a small example of how the code will look -