Dart 在颤振中使用变量作为全局变量

Dart 在颤振中使用变量作为全局变量,dart,flutter,Dart,Flutter,我需要在另一个文件中使用Datosuario变量。如何才能做到这一点 My main.dart是一个登录名,我需要使用query result变量在我的主页小部件中打印该结果 主飞镖 class LoginStates extends State<Login>{ @override Widget build(BuildContext context) { TextEditingController user=new TextEditingController(); TextE

我需要在另一个文件中使用Datosuario变量。如何才能做到这一点

My main.dart是一个登录名,我需要使用query result变量在我的主页小部件中打印该结果

主飞镖

class LoginStates extends State<Login>{

@override

Widget build(BuildContext context) {

TextEditingController user=new TextEditingController();

TextEditingController pass=new TextEditingController();

Future<List> _login() async{

  final response =await 

http.post("https://exclinico.com/admin/FlutterClases/login.php", body: {

 "correo": user.text,

 "password": pass.text,

});

print(response.body);

var datosusuario = json.decode(response.body);


 if (datosusuario.length==0) {
  //print("$nombre");
   }
   else{
     //print("$nombre");
   }
}

有两种方法,首先可以使用其构造函数将变量传递到
home.dart
文件

在您的
home.dart
文件中

class Home extends StatelessWidget {
  final datosusuario;

  Home(this.datosusuario);

  @override
  Widget build(BuildContext context) {
    ...
  }
}
main.dart
文件中,使用

Home(datosusuario)

第二种解决方案:您可以将变量设置为
main.dart
文件的全局变量,并在
home.dart
中导入此文件并使用它,但请确保它不为null

var datosusuario; // in top of the main.dart

太好了,你刚刚发现了一个基本的计算机科学问题:状态管理

有很多方法可以在颤振中进行状态管理,我真的建议您查看,其中概述了处理颤振状态的不同方法的优缺点

为了方便起见,这里有一种实用的方法: 您可以将
datosuario
作为构造函数参数添加到
Home
小部件中,如下所示:

class Home扩展了无状态小部件{
家({
@需要此文件,请参见,
});
最终数据集;
@凌驾
小部件构建(){
//在这里,您可以使用datasusuario
}
}
然后从
登录
小部件将其传递到
主页
小部件:

Home(datasusario:datasusario),

创建我更喜欢使用的全局服务的另一种方法是为此创建一个提供者/服务

例如,假设您希望变量可导入且在任何文件中都可用,而无需实例化对象,则可以创建一个具有静态值的类,如下所示:

服务/提供商

class GlobalData {
  static const var datosusuario = datosusuario_value;
}
在其他文件中使用

import 'package:my_app_name/path/to/provider.dart' as Globals;

Globals.datosusuario;
import 'package:my_app_name/path/to/provider.dart' as Globals;

Globals.datosusuario;