flutter - 从 TextWidget 中获取文本
问题描述
我正在创建一个天气应用程序,在其中我向 TextField 提供位置字符串并获取其中的文本。我知道如果我每次都使用 TextField 小部件,我可以做到这一点,但我想使用代码可重用性,这就是为什么我创建了一个名为 TextFieldWidget 的不同小部件,我在其中提供了一个提示变量,它返回其中的文本。我不知道如何返回文本。这是我的代码。
import 'package:flutter/material.dart';
class TextFieldWidget extends StatefulWidget {
final String _hint;
TextFieldWidget(this._hint);
@override
_TextFieldWidgetState createState() => _TextFieldWidgetState();
}
class _TextFieldWidgetState extends State<TextFieldWidget> {
TextEditingController _textEditingController;
InputDecoration _inputdecoration;
@override
void initState() {
super.initState();
_textEditingController = TextEditingController();
_inputdecoration = InputDecoration(hintText: widget._hint,floatingLabelBehavior: FloatingLabelBehavior.always);
}
@override
Widget build(BuildContext context) {
return TextField(
autocorrect: true,
controller: _textEditingController,
keyboardType: TextInputType.text,
enableSuggestions: true,
decoration: _inputdecoration,
onSubmitted: (value){
// somehow return data
// I want to access this part..
},
);
}
}
解决方案
1.您必须在调用类中创建一个方法
void _setTextValue(String value) {
// Submitted text should appear here from value
}
TextFieldWidget(_setTextValue)
2. 然后在 TextFormField 中使用它
final Function _setValue;
TextFieldWidget(this._setValue);
3. onSubmitted 调用内部
widget._setValue(value);
最后,您将在调用类中获得价值
编辑:
我们可以使用命名参数在调用小部件本身时添加回调,这是正确的做法
例子:
class _TextFieldWidgetState extends State<TextFieldWidget> {
TextEditingController _textEditingController;
InputDecoration _inputdecoration;
@override
void initState() {
super.initState();
_textEditingController = TextEditingController();
_inputdecoration = InputDecoration(hintText: 'UserName',floatingLabelBehavior: FloatingLabelBehavior.always);
}
@override
Widget build(BuildContext context) {
return TextField(
autocorrect: true,
controller: _textEditingController,
keyboardType: TextInputType.text,
enableSuggestions: true,
decoration: _inputdecoration,
onSubmitted: (value){
widget.getUserName(value);
// somehow return data
// I want to access this part..
},
);
}
}
调用上面的代码
TextFieldWidget(getUserName: (value) {
// Get the username here
print(value);
}),
注意:我们可以像这样添加尽可能多的命名参数
推荐阅读
- c - GTK3 - 单选按钮:每次切换按钮时都会调用两次回调
- c# - 在单元测试中模拟域实体类的属性:方法、抽象类还是虚拟属性?
- android - 查询数据后在 Firebase Recycler Adapter 中对结果进行排序
- java - 使用 Hibernate 的存储过程在嵌入式 h2 数据库中失败
- java - Java 约束验证不适用于参数
- sql-server-2008 - Power BI 中书签钻取的最佳方法
- c++ - 输入验证以仅接受 Int 值
- php - 使用 findOrFail 时获取“尝试获取非对象的属性‘小计’”
- python - 由于使用了自定义损失函数,自动编码器的预测都是 NaN
- node.js - 无法通过nodejs中的某些路由访问静态文件