api - 如何设置一个基本 URL 以及在哪里为 api 调用在 flutter dio 中声明它?

标签 api flutter dart dio

比如如何在单独的文件中修复样板代码并在 ui 页面中使用它。

I Need to declare this uri variable in separate file and access across over all pages:

  static var uri = "https://xxx/xxx/web_api/public";
  static BaseOptions options = BaseOptions(
  baseUrl: uri,
  responseType: ResponseType.plain,
  connectTimeout: 30000,
  receiveTimeout: 30000,
  // ignore: missing_return
  validateStatus: (code) {
    if (code >= 200) {
      return true;
    }
  });  static Dio dio = Dio(options);

在 UI 页面中,我必须在未来的函数中声明 uri 变量和 BaseOption 变量:

   Future<dynamic> _loginUser(String email, String password) async {
     try {
  Options options = Options(
    headers: {"Content-Type": "application/json"},
  );
  Response response = await dio.post('/login',
      data: {
        "email": email,
        "password": password,
        "user_type": 2,
        "status": 1
      },
      options: options);

  if (response.statusCode == 200 || response.statusCode == 201) {
    var responseJson = json.decode(response.data);
    return responseJson;
  } else if (response.statusCode == 401) {
    throw Exception("Incorrect Email/Password");
  } else
    throw Exception('Authentication Error');
} on DioError catch (exception) {
  if (exception == null ||
      exception.toString().contains('SocketException')) {
    throw Exception("Network Error");
  } else if (exception.type == DioErrorType.RECEIVE_TIMEOUT ||
      exception.type == DioErrorType.CONNECT_TIMEOUT) {
    throw Exception(
        "Could'nt connect, please ensure you have a stable network.");
  } else {
    return null;
  }
}

}

最佳答案

您可以创建 app_config.dart 文件并管理不同的环境,如下所示:

const _baseUrl = "baseUrl";

enum Environment { dev, stage, prod }

Map<String, dynamic> _config;

void setEnvironment(Environment env) {
  switch (env) {
    case Environment.dev:
      _config = devConstants;
      break;
    case Environment.stage:
      _config = stageConstants;
      break;
    case Environment.prod:
      _config = prodConstants;
      break;
  }
}

dynamic get apiBaseUrl {
  return _config[_baseUrl];
}

Map<String, dynamic> devConstants = {
  _baseUrl: "https://devapi.xyz.com/",
};


Map<String, dynamic> stageConstants = {
  _baseUrl: "https://api.stage.com/",
};

Map<String, dynamic> prodConstants = {
  _baseUrl: "https://api.production.com/",
};

关于api - 如何设置一个基本 URL 以及在哪里为 api 调用在 flutter dio 中声明它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63465124/

相关文章:

Flutter 在一页上自定义 AppBar

flutter - 如何在子目录中为 flutter 项目设置 github 操作

flutter如何摆脱图标填充?

Xcode 构建给出此错误 : ld: library not found for -lFMDB

flutter - 如何在Dart中将Map <String,List <ClassObj >>更改为Map <String,List <Map >>?

mysql - 如何在数据库查询中区分 403 和 404

C++ 游戏设计 - 什么库/API?

api - 如何获取 Paypal API V2 的交易 ID

php - 使用 YouTube API v3 PHP 删除视频

Flutter - setState 未更新内部自定义状态小部件