Flutter Bloc Simple Api

This project is using weather api for featch data and display based on user input data

Weather Cubit

class WeatherCubit extends Cubit<WeatherState> {
  //_weatherReposotory object for fetch data from Reposotory
  final WeatherReposotory _weatherReposotory;

  WeatherCubit(
    this._weatherReposotory,
  ) : super(const WeatherInitial());

  //getWeather function use for get weather data from Reposotory.
  Future<void> getWeather(String cityName) async {
    //notify frontend to Weather loading state
    emit(const WeatherLoading());

    try {
      final weather = await _weatherReposotory.getWeatherLocationData(cityName);
      //notify frontend to Weather loaded state with weather data
      emit(WeatherLoaded(weather, cityName));
    } on SocketException {
      //notify frontend to WeatherError state with SocketException
      emit(const WeatherError("400"));
    } catch (e) {
      final failure = e as Failure;
      //notify frontend to WeatherError state with failure message
      emit(WeatherError(failure.message));
    }
  }
}

Weather Repository

class WeatherReposotory {
  //api object use for fetch data from api
  final WeatherApi api;
  WeatherReposotory({required this.api});

  //getWeatherLocationData function is asyncrones method and using fetch data and return data to cubit
  Future<dynamic> getWeatherLocationData(String cityName) async {
    //rawWeather get response from api using user enter city name
    final Response rawWeather = await api.getWeatherRawData(cityName);
    if (rawWeather.statusCode == 200) {
      //decode jason response body and map body data
      Map<String, dynamic> weatherMap = jsonDecode(rawWeather.body);
      //Map cityname and temp using weather model and return weather data
      var weather = Weather.fromJson(weatherMap);
      return weather;
    } else {
      throw const Failure(message: '404');
    }
  }
}

Weather Api

class WeatherApi {
  //base url. url end point
  static const String _baseUrl =
      "http://api.openweathermap.org/data/2.5/weather?q=";

  //Api key
  static const String _apiKey = "01cc8328d04c516c03c84af29cd9c0d9";
  final http.Client _client;

  WeatherApi({http.Client? client}) : _client = client ?? http.Client();

  void dispose() {
    _client.close();
  }

  //Fectch weather data from api
  Future<dynamic> getWeatherRawData(String cityName) async {
    final url = '$_baseUrl$cityName&appid=$_apiKey';

    final response = await _client.post(
      Uri.parse(url),
    );
    return response;
  }
}
```# flutter_bloc_cubit_test_knowdge

GitHub

View Github