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

时间:2020-06-10 15:00:29

标签: flutter dart

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

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

是否可以使用onPressed属性在Flutter中进行操作?

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

3 个答案:

答案 0 :(得分:2)

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

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

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

您可以在这里将TextWidgetStatelessWidget变成StatefulWidget,然后根据状态呈现第二个Text的内容。可以在Flutter官方网站Start thinking declaratively上找到关于状态是什么以及为什么要使用它的很好的介绍。

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

Example 1 on DartPad

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

Example 2 on DartPad

请注意,您不能像使用data在JavaScript DOM API中那样强制性地更改Text小部件的innerText属性:

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

因为它的datafinal。在Flutter中,您必须进行声明式思考,这是值得的。

答案 1 :(得分:1)

class TextWidget extends StatefulWidget {
@override
 _TextWidgetState createState() => _TextWidgetState();
 }

class _TextWidgetState extends State<TextWidget> {
  String text1Value = "text to be copied";

  String text2Value = "";

   @override
   Widget build(BuildContext context) {
     return Scaffold(
       body: Center(
         child: Column(
           mainAxisAlignment: MainAxisAlignment.center,
           children: [
             Text(
               text1Value,
              ),
             RaisedButton(
               onPressed: () {
                 setState(() {
                   text2Value = text1Value;
                  });
               },
               child: Text("Copy value"),
             ),
             SizedBox(height: 40),
            Text(
              text2Value,
            )
        ],
    ),
  ),
  );
 }
}

答案 2 :(得分:1)

尝试

version: 2.1
orbs:
  node: circleci/node@2.0.1
  slack: circleci/slack@3.4.2
...
      - slack/status:
          webhook: https://hooks.slack.com/services/XXXXXXX/XXXXXXXXXXXX/XXXXXXXXXXXXXXXXXXXXXXX
...