flutter - 如何使用按钮的 onPressed 属性将小部件文本的值复制到另一个小部件文本

标签 flutter dart

我需要复制文本小部件的值并将其复制到另一个。

我尝试使用按键执行此操作,但我不知道在这种情况下如何访问文本小部件。

是否可以在 Flutter 中使用 onPressed 属性来实现?

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')
            )
          ],
        ),
      ),
    );
  }
}

最佳答案

直接回答您的问题:您可以使用其 data 访问 Text 小部件内的文本属性。

Text widget = Text('text value');
String text = widget.data;
print(text); // text value

接下来,您无法通过小部件的关键属性来访问它们。至少你不应该这样做,因为它们是为不同的目的而设计的:这是一个 video和一个article关于 Flutter 中的键。

您在这里可以做的是将您的 TextWidgetStatelessWidget 转换为 StatefulWidget 并呈现第二个 Text 的内容> 基于状态。关于状态是什么以及为什么应该使用它的很好的介绍可以在 Flutter 官方网站上找到:Start thinking declaratively .

然后,您可以将第一个 Text 小部件保存在变量中,然后使用 data 属性更新直接访问其内容,然后更新整个小部件的状态。

Example 1 on DartPad

更规范且通常更可取的方法是根据状态呈现两个按钮的内容,并从状态变量而不是从小部件本身获取所需的文本,如 Sebastian 和 MSARKrish 所提议的。

Example 2 on DartPad

请注意,您无法强制更改文本小部件的 data 属性,就像在 JavaScript DOM API 中使用 innerText 所做的那样:

_textWidget.data = "New text"; // Doesn't work

因为它的数据最终。在 Flutter 中,你必须以声明式的方式思考,这是值得的。

关于flutter - 如何使用按钮的 onPressed 属性将小部件文本的值复制到另一个小部件文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62306745/

相关文章:

if-statement - 为什么使用三元运算符会出现错误?

android - 修复 Flutter 中的 Unicode 渲染

listview - 在 Flutter 中刷新 ListView

dart - 如何向 In Flutter Web 发出 HTTP 请求

flutter - 如何在flutter中删除pubspec.yaml中指定的 Assets ?

flutter - Flutter 中的 Scaffold 和 Container 有什么区别?

canvas - Flutter - Canvas 绘制 Z 顺序

Flutter/Dart - 滑动动画的反向?

flutter - 如何通过 flutter 中的导航栏为单页 Web 应用程序实现动态滚动?

Flutter Flare 动画无法正常工作