Flutter 如何使用按钮的onPressed属性将小部件文本的值复制到另一个小部件文本
我需要复制一个文本小部件的值并将其复制到另一个 我试着使用键来实现这一点,但我不知道在这种情况下如何访问文本小部件 是否可以使用onPressed特性在颤振中执行此操作Flutter 如何使用按钮的onPressed属性将小部件文本的值复制到另一个小部件文本,flutter,dart,Flutter,Dart,我需要复制一个文本小部件的值并将其复制到另一个 我试着使用键来实现这一点,但我不知道在这种情况下如何访问文本小部件 是否可以使用onPressed特性在颤振中执行此操作 import 'package:flutter/material.dart'; class TextWidget extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( bo
import 'package:flutter/material.dart';
class TextWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
"Value to be copied",
key: Key('text1')
),
RaisedButton(
onPressed: (){
// code here
},
child: Text("Copy value"),
),
SizedBox(height: 40),
Text(
"",
key: Key('text2')
)
],
),
),
);
}
}
class TextWidget扩展StatefulWidget{
@凌驾
_TextWidgetState createState()=>\u TextWidgetState();
}
类_TextWidgetState扩展状态{
String text1Value=“要复制的文本”;
字符串text2Value=“”;
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:中(
子:列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
正文(
text1值,
),
升起的按钮(
已按下:(){
设置状态(){
text2Value=text1Value;
});
},
子项:文本(“复制值”),
),
尺寸箱(高度:40),
正文(
text2Value,
)
],
),
),
);
}
}
试试这个
import 'package:flutter/material.dart';
final Color darkBlue = Color.fromARGB(255, 18, 32, 47);
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData.dark().copyWith(scaffoldBackgroundColor: darkBlue),
debugShowCheckedModeBanner: false,
home: Scaffold(
body: Center(
child: MyWidget(),
),
),
);
}
}
class MyWidget extends StatefulWidget {
@override
_MyWidgetState createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
String _text = "Value to be copied";
bool _buttonToggle;
@override
void initState() {
super.initState();
_buttonToggle = false;
}
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(_text),
SizedBox(height: 40),
RaisedButton(
onPressed: _toggle,
child: Text("Copy value"),
),
Switch(
value: _buttonToggle,
onChanged: (_) => _toggle(),
),
SizedBox(height: 40),
Text(_buttonToggle ? _text : '')
],
);
}
void _toggle() {
setState(() => _buttonToggle = !_buttonToggle);
}
}
导入“包装:颤振/材料.省道”;
最终颜色深蓝色=颜色。来自argb(255,18,32,47);
void main(){
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
主题:ThemeData.dark().copyWith(脚手架背景颜色:深蓝色),
debugShowCheckedModeBanner:false,
家:脚手架(
正文:中(
子项:MyWidget(),
),
),
);
}
}
类MyWidget扩展了StatefulWidget{
@凌驾
_MyWidgetState createState()=>\u MyWidgetState();
}
类_MyWidgetState扩展状态{
字符串_text=“要复制的值”;
按钮切换;
@凌驾
void initState(){
super.initState();
_按钮切换=错误;
}
@凌驾
小部件构建(构建上下文){
返回列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
文本(_Text),
尺寸箱(高度:40),
升起的按钮(
按下按钮:_切换,
子项:文本(“复制值”),
),
开关(
值:_按钮切换,
一旦更改:()=>_toggle(),
),
尺寸箱(高度:40),
文本(_按钮切换?_文本:“”)
],
);
}
void _toggle(){
设置状态(()=>\u按钮切换=!\u按钮切换);
}
}
直接回答您的问题:您可以使用其属性访问text
小部件中的文本
Text小部件=文本(“文本值”);
字符串文本=widget.data;
打印(文本);//文本值
接下来,您不能通过小部件的键属性访问它们。至少你不应该这样做,因为它们是为不同的目的而设计的:这里有一个关于颤振键的例子
您可以在这里将TextWidget
从StatelessWidget
转换为StatefulWidget
,并根据状态呈现第二个文本的内容。关于什么是状态以及为什么要使用状态的详细介绍可以在官方网站上找到:
然后,您可以将第一个文本
小部件保存在变量中,然后使用数据
属性更新直接访问其内容,然后更新整个小部件的状态
更规范且通常更可取的方法是基于状态呈现两个按钮的内容,并从状态变量而不是小部件本身获取所需文本,如Sebastian和MSARKrish所建议的
请注意,您不能强制更改文本小部件的数据
属性,就像您在JavaScript DOM API中使用innerText
所做的那样:
\u textWidget.data=“新文本”//不起作用
因为它的数据
是最终的
。在《颤栗》中,你必须以陈述的方式思考,这是值得的。text1的值将始终是静态的?在这种情况下,yesOkay,那么,我添加了一个答案@DiChrist
import 'package:flutter/material.dart';
final Color darkBlue = Color.fromARGB(255, 18, 32, 47);
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData.dark().copyWith(scaffoldBackgroundColor: darkBlue),
debugShowCheckedModeBanner: false,
home: Scaffold(
body: Center(
child: MyWidget(),
),
),
);
}
}
class MyWidget extends StatefulWidget {
@override
_MyWidgetState createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
String _text = "Value to be copied";
bool _buttonToggle;
@override
void initState() {
super.initState();
_buttonToggle = false;
}
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(_text),
SizedBox(height: 40),
RaisedButton(
onPressed: _toggle,
child: Text("Copy value"),
),
Switch(
value: _buttonToggle,
onChanged: (_) => _toggle(),
),
SizedBox(height: 40),
Text(_buttonToggle ? _text : '')
],
);
}
void _toggle() {
setState(() => _buttonToggle = !_buttonToggle);
}
}