如何使用Dart / Flutter在不同类别上使用变量

时间:2019-03-20 09:31:21

标签: dart

我有一个类,即我的getToken类。在此类ı中,获得的令牌是 String token 。这是我的 getToken.dart

class GetToken {
  String token;
  Future<Null> getData() async {
    var url = "http://192.168.1.39:7070/api/v2/token";
    http.post(url, body: {
      "grant_type": "string",
      "branchcode": "string",
      "password": "string",
      "username": "string",
      "dbname": "string",
      "dbuser": "string",
      "dbpassword": "string",
      "dbtype": "string"
    }).then((response) {
      print("Response Status: ${response.statusCode}");
      //print("Response Body: ${response.body}");
      print('access token is -> ${json.decode(response.body)['access_token']}');
      token = json.decode(response.body)['access_token'];
    });
  }
}

我想在我的getCari类中使用这个令牌,并在我的rest api中获取Json值。这是我的 getCari.dart

class GetCari{
  getCari() async {
    final response = await http.get("http://192.168.1.39:7070/api/v2/ARPs",
    headers: {HttpHeaders.AUTHORIZATION: token});

    if(response.statusCode ==200){
      return Cari.fromJson(json.decode(response.body));
    }else{
      throw Exception("Failed to Load");
    }
  }
}

我想问我如何在我的getCari.dart类中使用我的令牌(从getToken.dart获取)。我如何将令牌变量传递给其他类?

3 个答案:

答案 0 :(得分:1)

请使用Dart的顶级函数代替不需要实例化的类。

Effective Dart documentation

中提到了这一点

token_manager.dart

String _token;
String get token => _token    // To ensure readonly

Future<Null> setToken() async {
  // set your _token here
}

get_cari.dart

import 'token_manager.dart' as token_manager    // use your import path here

getCari() async {
  // You can now access token from token_manager from any class like this.
  final String token = token_manager.token;
}

摘录

  

在Java和C#中,每个定义都必须在一个类内,因此   常见的“类”仅存在于放置静态的地方   成员。其他类用作命名空间-一种提供共享的方式   给一堆成员加前缀以使它们彼此相关或避免   名称冲突。

     

Dart具有顶级函数,变量和常量,因此您不需要   需要一个类来定义一些东西。如果你想要的是   在名称空间中,最好使用一个库。图书馆支持进口   前缀和显示/隐藏组合器。这些功能强大的工具可以   代码的使用者以有效的方式处理名称冲突   最适合他们。

     

如果函数或变量在逻辑上未绑定到类,则将其放在   顶层。如果您担心名称冲突,请多加一些   精确名称或将其移至可以导入的单独库中   加上前缀。

答案 1 :(得分:0)

您可以通过从GetCari()类创建对象将数据传递给getCari方法  看到这个

 df['Age']=[','.join(i) for i in df['Age']] 

答案 2 :(得分:0)

您可以使用get_it之类的服务管理器在应用程序中的任何位置重用值。

  1. 创建将保存您的共享信息的类

    class GetToken{
      String token;
      ...
    }
    
  2. 在main.dart文件中,设置GetIt实例

    final getIt = GetIt.instance;
    
    void setup() {
      getIt.registerSingleton<GetToken>(GetToken());
    }
    
  3. 现在,您可以在应用程序中的任何位置调用该类并获取令牌。

    var mytoken= getIt.get<AppModel>().token;