android - Flutter - 如何在其他小部件中访问 TextEditingController?

标签 android flutter dart

我有一个 文本字段 在我的 main.dart 中, Controller 名为 文本 Controller .
在其他小部件(button.dart)中,我有一个按钮。如果我按下该按钮,它应该设置 的文本正文 我的 main.dart 中的小部件到 的文本文本字段 .只需执行与 main.dart 中的第一个按钮相同的操作即可。如何从其他小部件(文件)访问此 TextEditingController?
这是我的应用程序的视频,以便更好地理解。
https://streamable.com/xi0dn1
这是我的 main.dart 完整代码

import 'button.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  MyHomePageState createState() => MyHomePageState();
}

class MyHomePageState extends State<MyHomePage> {
  String var1 = "text1";
  TextEditingController textController = TextEditingController();
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("My app"),
      ),
      body: Center(
        child: Column(
          children: <Widget>[
            TextField(
              controller: textController,
            ),
            RaisedButton(
              child: Text("button in the same widget"),
              onPressed: () {
                setState(() {
                  var1 = textController.text;
                });
              },
            ),
            Text(var1),
            Button2(),
          ],
        ),
      ),
    );
  }
}

这是我的 button.dart 代码
import 'main.dart';

class Button2 extends StatefulWidget {
  @override
  _Button2State createState() => _Button2State();
}

class _Button2State extends State<Button2> {
  String var2 = "text2";

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Column(
        children: <Widget>[
          RaisedButton(
            child: Text("button in second widget"),
            onPressed: () {
              setState(() {
                var2 = MyHomePageState().textController.text.toString();
              });
            },
          ),
          Text(var2),
        ],
      ),
    );
  }
}

最佳答案

将函数与小部件分离并传递函数。
在我的主页状态中:

// Extract the function
void onPressedFunction() {
  setState(() {
    var1 =  textController.text;
  });
}

@override
Widget build(BuildContext context) {
  return Scaffold(
    // ...
    child: Column(
      children: <Widget>[
        RaisedButton(
          // ...
          onPressed: onPressedFunction, // function is extracted
        ),
        Text(var1),
        Button2(onPressedFunction), // pass the function
      ],
    ),
  ); 
}
在按钮 2 中:
class Button2 extends StatefulWidget {
  final Function onPressedFunction;

  Button2(this.onPressedFunction); // accept the function

  @override
  _Button2State createState() => _Button2State();
}

class _Button2State extends State<Button2> {
  @override
  Widget build(BuildContext context) {
    return Center(
      child: Column(
        children: <Widget>[
          RaisedButton(
            child: Text("button in second widget"),
            onPressed: widget.onPressedFunction, // use the same function
          ),
          Text(var2),
        ],
      ),
    );
  }
}
这样,您的 Button2 将执行与按下第一个按钮相同的操作。

关于android - Flutter - 如何在其他小部件中访问 TextEditingController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63181358/

相关文章:

flutter - 在处理 flutter 之前删除listerers

dart - 在Dart中收听JS CustomEvent

dart - Dart 中的 curl 功能

android - 使用 ExoPlayer 播放本地 aes128 cbc 加密的 mp3

java - 当电话关闭时,我的服务表现异常

flutter - 我可以在 Flutter 应用中使用 Android 8.0 自适应图标吗?

dart - Dart Angular 2注解如何工作?

Android Facebook 开放图谱?

java - myDate 无法解析为变量

url - 如何在flutter中将参数插入URL中间?