首页 > 解决方案 > 如何在颤动中将.dart文件的变量获取到另一个.dart文件

问题描述

class widget_model extends StatelessWidget {
    final text;
    widget_model(this.text);

    String input = "";
    @override
    Widget build(BuildContext context) {
    return Expanded(
      child: Row(
        children: <Widget>[
          Expanded(
            child: Column(
              children: <Widget>[
    Container(
                  height: 60,
                  alignment: Alignment.center,
                  decoration: BoxDecoration(
                      gradient: LinearGradient(
                          colors: [Colors.pink, Colors.purpleAccent])),

                  child: InkWell(
                    onTap: () {
                      print("Pressed one");
                      print("The text is $input");
                      input=input+"1";
                      print("The text after $input");
                      Navigator.push(context, MaterialPageRoute(builder: (BuildContext)=>Homepage(input)));
                    },

                    child: Text(
                      "$text",
                      style: TextStyle(color: Colors.white, fontSize: 50),
                    ),
                  ),
                ),
              ],
            ),
          ),
          SizedBox(
            height: 10,
            width: 5,
          )
        ],
      ),
    );
  }
}

此 .dart 文件中的变量“输入”已在无状态小部件中声明,但我怎样才能将此变量获取到另一个 .dart 文件。如何通知变量值的变化。

标签: androidfluttervariablesdartparameter-passing

解决方案


你可以通过两种方式做到这一点

  1. 使用 pub.dev 中的 Provider 包,然后您可以在任何其他 dart 文件中使用该变量。这是比较复杂的程序的首选方式。
  2. 您可以在小部件外部声明和初始化变量,也可以在另一个 dart 文件中使用该变量。像这样,
String input = "";

class widget_model extends StatelessWidget {
final text;
widget_model(this.text);

@override
Widget build(BuildContext context) {
return Expanded(
  child: Row(
    children: <Widget>[
      Expanded(
        child: Column(
          children: <Widget>[
Container(
              height: 60,
              alignment: Alignment.center,
              decoration: BoxDecoration(
                  gradient: LinearGradient(
                      colors: [Colors.pink, Colors.purpleAccent])),

              child: InkWell(
                onTap: () {
                  print("Pressed one");
                  print("The text is $input");
                  input=input+"1";
                  print("The text after $input");
                  Navigator.push(context, MaterialPageRoute(builder: (BuildContext)=>Homepage(input)));
                },

                child: Text(
                  "$text",
                  style: TextStyle(color: Colors.white, fontSize: 50),
                ),
              ),
            ),
          ],
        ),
      ),
      SizedBox(
        height: 10,
        width: 5,
      )
    ],
  ),
);

推荐阅读