Flutter 如何在flatter中调用不同类的变量

Flutter 如何在flatter中调用不同类的变量,flutter,dart,Flutter,Dart,我希望这个程序能做三件事。第一,显示我的号码的当前值。第二,显示我以前输入了多少。第三,输入要从数字的原始值中减去多少 但是我的代码有一个问题。在SubtractState类中,我的FlatButton有一个onPressed函数。内部有一个名为enteredValue的变量。当我试图在类“Type”中调用这个变量时,它显然给了我错误 我知道我需要找到一种从不同类调用变量的方法。但是我该怎么做呢 import 'package:flutter/material.dart'; void main

我希望这个程序能做三件事。第一,显示我的号码的当前值。第二,显示我以前输入了多少。第三,输入要从数字的原始值中减去多少

但是我的代码有一个问题。在SubtractState类中,我的FlatButton有一个onPressed函数。内部有一个名为enteredValue的变量。当我试图在类“Type”中调用这个变量时,它显然给了我错误

我知道我需要找到一种从不同类调用变量的方法。但是我该怎么做呢

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

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

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: Container(
            child: Center(
                child: GestureDetector(
      onTap: () {
        Navigator.push(
          context,
          MaterialPageRoute(builder: (context) => Type()),
        );
      },
      child: Text(
        value.toString(),
        style: TextStyle(
          fontSize: 50.0,
        ),
      ),
    ))));
  }
}

class Type extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        debugShowCheckedModeBanner: false,
        home: Scaffold(
            body: Container(
                child: Center(
                    child: Column(
                        mainAxisAlignment: MainAxisAlignment.center,
                        children: <Widget>[
              GestureDetector(
                child: Text("You Entered ${globals.enteredValue} previously"),
                onTap: () {
                  Navigator.push(
                    context,
                    MaterialPageRoute(builder: (context) => Subtract()),
                  );
                },
              )
            ])))));
  }
}

class Subtract extends StatefulWidget {
  @override
  SubtractState createState() => SubtractState();
}

class SubtractState extends State<Subtract> {
  final _controller = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        home: Scaffold(
            appBar: AppBar(
              elevation: 0,
              leading: IconButton(
                  color: Colors.black,
                  icon: Icon(Icons.arrow_back_ios),
                  onPressed: () => Navigator.pop(context)),
            ),
            body: Container(
                padding: const EdgeInsets.all(30.0),
                child: Container(
                  child: Center(
                      child: Column(
                          mainAxisAlignment: MainAxisAlignment.center,
                          children: [
                        TextFormField(
                            textInputAction: TextInputAction.done,
                            controller: _controller,
                            keyboardType: TextInputType.number),
                        FlatButton(
                          child: Text("Subtract"),
                          onPressed: () {
                            //check if we can parse it
                            if (int.tryParse(_controller.text) == null)
                              return; //can't parse it
                            globals.enteredValue = int.parse(_controller.text);
                            setState(() {
                              value -= globals.enteredValue;
                            });
                            Navigator.push(
                              context,
                              MaterialPageRoute(builder: (context) => MyApp()),
                            );
                          },
                        ),
                      ])),
                ))));
  }
}

int value = 0;
导入“包装:颤振/材料.省道”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
主页:MyHomePage(),
);
}
}
类MyHomePage扩展StatefulWidget{
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
@凌驾
小部件构建(构建上下文){
返回脚手架(
主体:容器(
儿童:中心(
儿童:手势检测器(
onTap:(){
导航器。推(
上下文
MaterialPage路由(生成器:(上下文)=>Type()),
);
},
子:文本(
value.toString(),
样式:TextStyle(
字体大小:50.0,
),
),
))));
}
}
类类型扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
debugShowCheckedModeBanner:false,
家:脚手架(
主体:容器(
儿童:中心(
子:列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
手势检测器(
child:Text(“您以前输入了${globals.enteredValue}”),
onTap:(){
导航器。推(
上下文
MaterialPage路由(生成器:(上下文)=>Subtract()),
);
},
)
])))));
}
}
类减法扩展StatefulWidget{
@凌驾
SubtractState createState()=>SubtractState();
}
类状态扩展状态{
最终_controller=TextEditingController();
@凌驾
小部件构建(构建上下文){
返回材料PP(
家:脚手架(
appBar:appBar(
海拔:0,
领先:IconButton(
颜色:颜色,黑色,
图标:图标(图标、箭头、背面),
onPressed:()=>Navigator.pop(上下文)),
),
主体:容器(
填充:常数边集全部(30.0),
子:容器(
儿童:中心(
子:列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
TextFormField(
textInputAction:textInputAction.done,
控制器:_控制器,
键盘类型:TextInputType.number),
扁平按钮(
子项:文本(“减法”),
已按下:(){
//检查我们是否可以解析它
if(int.tryParse(_controller.text)==null)
return;//无法分析它
globals.enteredValue=int.parse(_controller.text);
设置状态(){
value-=globals.enteredValue;
});
导航器。推(
上下文
MaterialPage路由(生成器:(上下文)=>MyApp()),
);
},
),
])),
))));
}
}
int值=0;

我建议使用一个全局库在类之间共享应用程序变量,这是一个现有的简单解决方案:
创建名为
globals.dart的dart文件

globals.dart:

library YOUR_PACKAGE_NAME.globals;
int x = 1 ; 
类别1:

 import 'package:YOUR_PACKAGE_NAME/globals.dart' as globals;
 print(globals.x) ; //prints 1 
 globals.x= 2 ; 
在你的班级2中:

import 'package:YOUR_PACKAGE_NAME/globals.dart' as globals;
print(globals.x) ; //prints 2 

你是个明星。