flutter - 如何将数据从无状态小部件发送到有状态小部件?
问题描述
我正在颤振中创建一个简单的应用程序,其中主要功能中有两个小部件。一个是显示文本小部件,用于在屏幕上显示文本,另一个是从用户那里获取输入,即 TextField。这很简单。现在我在 main.dart 中创建了一个无状态小部件支架,在主体中我调用了两个类。一个是“textfield”无状态小部件(作为单独的 dart 文件),另一个是“显示”有状态小部件(作为单独的 dart 文件),因为我想为输入文本字段的每次更改更新显示。现在我在 textfield.dart 中设置并创建了文本字段和发送按钮,我需要将该文本发送到具有状态小部件的 display_text.dart。怎么做。不要笑,请.. 编程和颤振的新手。
class TextFieldInput extends StatelessWidget {
final txtController = TextEditingController();
@override
Widget build(BuildContext context) {
return Container(
child: Column(
children: <Widget>[
TextField(
controller: txtController,
style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
),
RaisedButton(
child: Text('Click Me'),
onPressed: () {
//want to send txtController.text to DisplayText (display_text.dart);
},
)
],
),
);
}
}
class DisplayText extends StatefulWidget {
//DisplayText({Key key}) : super(key: key);
_DisplayTextState createState() => _DisplayTextState();
}
class _DisplayTextState extends State<DisplayText> {
@override
Widget build(BuildContext context) {
return Container(
child: Text(
'text from iput text fied here',
style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
),
);
}
}
解决方案
您可以通过导航器传递数据并使用有状态方法中的小部件对象进行访问。
我在以下代码中添加了解决方案。
import 'package:flutter/material.dart';
class TextFieldInput extends StatelessWidget {
final txtController = TextEditingController();
@override
Widget build(BuildContext context) {
return Container(
child: Column(
children: <Widget>[
TextField(
controller: txtController,
style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
),
RaisedButton(
child: Text('Click Me'),
onPressed: () {
Navigator.push(
context, new MaterialPageRoute(
builder: (context) => new DisplayText(text: txtController.text,)));
},
)
],
),
);
}
}
class DisplayText extends StatefulWidget {
String text;
DisplayText({Key key,this.text}) : super(key: key);
_DisplayTextState createState() => _DisplayTextState();
}
class _DisplayTextState extends State<DisplayText> {
@override
Widget build(BuildContext context) {
return Container(
child: Text(
widget.text,
style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
),
);
}
}
推荐阅读
- ios - 类实例的问题
- java - 未找到 Google Cloud Logging 处理程序
- python - 带有文本和图标项的 QListWidget
- linux - 设置时未设置错误 JAVA_HOME
- ruby-on-rails - Ruby on Rails:我可以使用 ID 以外的属性/列删除记录吗?
- javascript - 如何根据嵌套元素的锚点使div居中
- python-3.x - 使用字符串格式化来评估值的十六进制、二进制、十进制和八进制版本
- sql - 使用 WHERE 子句在 SQL 中输入数字的条件
- ios - Swift如何限制手机左侧和右侧的触摸点击
- objective-c - OSX - 从使用沙盒应用程序拖放的 FileURL 中获取文件路径