我有一个类,即我的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获取)。我如何将令牌变量传递给其他类?
答案 0 :(得分:1)
请使用Dart的顶级函数代替不需要实例化的类。
中提到了这一点String _token;
String get token => _token // To ensure readonly
Future<Null> setToken() async {
// set your _token here
}
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之类的服务管理器在应用程序中的任何位置重用值。
创建将保存您的共享信息的类
class GetToken{
String token;
...
}
在main.dart文件中,设置GetIt实例
final getIt = GetIt.instance;
void setup() {
getIt.registerSingleton<GetToken>(GetToken());
}
现在,您可以在应用程序中的任何位置调用该类并获取令牌。
var mytoken= getIt.get<AppModel>().token;