pokeapi-dart

June 5, 2025 · View on GitHub

Wrapper for Poke API, written in Dart. Supports PokeAPI v2.

Documentation

Full API documentation can be found at Poke API.

Getting Started

To use this plugin, add pokeapi as a dependency in your pubspec.yaml file.

import 'package:pokeapi/pokeapi.dart';

Features

Main API Functions

  • Get Object by ID: Fetch individual resources by their ID

    var pokemon = await PokeAPI.getObject<Pokemon>(1); // Get Bulbasaur
    
  • Get Object by Name: Fetch resources by their name (more convenient than ID in many cases)

    var pokemon = await PokeAPI.getObjectByName<Pokemon>("bulbasaur");
    
  • Get List of Objects: Fetch paginated lists of complete objects

    var pokemonList = await PokeAPI.getObjectList<Pokemon>(1, 10); // Get first 10 Pokemon
    
  • Get Common List: Fetch basic information (name and URL) for resources

    var basicPokemonList = await PokeAPI.getCommonList<Pokemon>(1, 20);
    

Caching System

  • Configurable Caching: Control how data is cached

    // Use default cache settings (4 hour expiry)
    PokeAPI.configureCaching(CacheConfig.defaultConfig);
    
    // Disable caching
    PokeAPI.configureCaching(CacheConfig.noCache);
    
    // Long-term caching (30 days)
    PokeAPI.configureCaching(CacheConfig.longTerm);
    
    // Short-term caching (30 minutes)
    PokeAPI.configureCaching(CacheConfig.shortTerm);
    
    // Custom cache configuration
    PokeAPI.configureCaching(CacheConfig(
      enabled: true,
      expiryDuration: Duration(hours: 12),
      maxMemoryCacheItems: 200,
      useWhenOffline: true,
    ));
    
  • Cache Management:

    // Clear all cached data
    await PokeAPI.clearCache();
    
    // Check if an item exists in cache
    bool isCached = await PokeAPI.isInCache('cache_key');
    

Connectivity Features

  • Offline Support: Automatically use cached data when offline (configurable)
  • Connectivity Detection: Built-in connectivity checking to handle offline scenarios

Endpoints

Berries

Berries

Get Berries

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<Berry>(1, 1);

Get Berry

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<Berry>(1);

Get Berry by Name

Must pass a name as String (e.g. "chesto").

var response = PokeAPI.getObjectByName<Berry>("chesto");
Berry Firmness

Get Berry Firmnesses

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<BerryFirmness>(1, 1);

Get Berry Firmness

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<BerryFirmness>(1);

Get Berry Firmness by Name

Must pass a name as String (e.g. "very-soft").

var response = PokeAPI.getObjectByName<BerryFirmness>("very-soft");
Berry Flavors

Get Berry Flavors

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<BerryFlavor>(1, 1);

Get Berry Flavor

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<BerryFlavor>(1);

Get Berry Flavor by Name

Must pass a name as String (e.g. "spicy").

var response = PokeAPI.getObjectByName<BerryFlavor>("spicy");

Contests

Contest Types

Get Contest Types

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<ContestType>(1, 1);

Get Contest Type

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<ContestType>(1);

Get Contest Type by Name

Must pass a name as String (e.g. "cool").

var response = PokeAPI.getObjectByName<ContestType>("cool");
Contest Effects

Get Contest Effects

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<ContestEffect>(1, 1);

Get Contest Effect

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<ContestEffect>(1);
Super Contest Effects

Get Super Contest Effects

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<SuperContestEffect>(1, 1);

Get Super Contest Effect

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<SuperContestEffect>(1);

Encounters

Encounter Methods

Get Encounter Methods

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<EncounterMethod>(1, 1);

Get Encounter Method

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<EncounterMethod>(1);

Get Encounter Method by Name

Must pass a name as String (e.g. "walk").

var response = PokeAPI.getObjectByName<EncounterMethod>("walk");
Encounter Conditions

Get Encounter Conditions

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<EncounterCondition>(1, 1);

Get Encounter Condition

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<EncounterCondition>(1);

Get Encounter Condition by Name

Must pass a name as String (e.g. "swarm").

var response = PokeAPI.getObjectByName<EncounterCondition>("swarm");
Encounter Condition Values

Get Encounter Condition Values

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<EncounterConditionValue>(1, 1);

Get Encounter Condition Value

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<EncounterConditionValue>(1);

Get Encounter Condition Value by Name

Must pass a name as String (e.g. "swarm-yes").

var response = PokeAPI.getObjectByName<EncounterConditionValue>("swarm-yes");

Evolution

Evolution Chains

Get Evolution Chains

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<EvolutionChain>(1, 1);

Get Evolution Chain

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<EvolutionChain>(1);

Evolution Chain Support Features

  • Full support for all evolution pattern types:
    • Linear evolutions (e.g., Bulbasaur → Ivysaur → Venusaur)
    • Branching evolutions (e.g., Eevee → Vaporeon/Jolteon/Flareon/etc.)
    • Multi-path evolutions (e.g., Wurmple → Cascoon/Silcoon → Dustox/Beautifly)
    • Complex evolution requirements (stats, time of day, held items, etc.)
Evolution Triggers

Get Evolution Triggers

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<EvolutionTrigger>(1, 1);

Get Evolution Trigger

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<EvolutionTrigger>(1);

Get Evolution Trigger by Name

Must pass a name as String (e.g. "level-up").

var response = PokeAPI.getObjectByName<EvolutionTrigger>("level-up");

Games

Generations

Get Generations

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<Generation>(1, 1);

Get Generation

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<Generation>(1);

Get Generation by Name

Must pass a name as String (e.g. "generation-i").

var response = PokeAPI.getObjectByName<Generation>("generation-i");
Pokedex

Get All Pokedex

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<Pokedex>(1, 1);

Get Single Pokedex

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<Pokedex>(1);

Get Pokedex by Name

Must pass a name as String (e.g. "national").

var response = PokeAPI.getObjectByName<Pokedex>("national");
Versions

Get Versions

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<Version>(1, 1);

Get Version

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<Version>(1);

Get Version by Name

Must pass a name as String (e.g. "red").

var response = PokeAPI.getObjectByName<Version>("red");
Version Groups

Get Version Groups

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<VersionGroup>(1, 1);

Get Version Group

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<VersionGroup>(1);

Get Version Group by Name

Must pass a name as String (e.g. "red-blue").

var response = PokeAPI.getObjectByName<VersionGroup>("red-blue");

Items

Items

Get Items

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<Item>(1, 1);

Get Item

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<Item>(1);

Get Item by Name

Must pass a name as String (e.g. "master-ball").

var response = PokeAPI.getObjectByName<Item>("master-ball");
Item Attributes

Get Item Attributes

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<ItemAttribute>(1, 1);

Get Item Attribute

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<ItemAttribute>(1);

Get Item Attribute by Name

Must pass a name as String (e.g. "countable").

var response = PokeAPI.getObjectByName<ItemAttribute>("countable");
Item Categories

Get Item Categories

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<ItemCategory>(1, 1);

Get Item Category

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<ItemCategory>(1);

Get Item Category by Name

Must pass a name as String (e.g. "stat-boosts").

var response = PokeAPI.getObjectByName<ItemCategory>("stat-boosts");
Item Fling Effects

Get Item Fling Effects

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<ItemFlingEffect>(1, 1);

Get Item Fling Effect

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<ItemFlingEffect>(1);

Get Item Fling Effect by Name

Must pass a name as String (e.g. "badly-poison").

var response = PokeAPI.getObjectByName<ItemFlingEffect>("badly-poison");
Item Pockets

Get Item Pockets

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<ItemPocket>(1, 1);

Get Item Pocket

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<ItemPocket>(1);

Get Item Pocket by Name

Must pass a name as String (e.g. "misc").

var response = PokeAPI.getObjectByName<ItemPocket>("misc");

Locations

Locations

Get Locations

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<Location>(1, 1);

Get Location

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<Location>(1);

Get Location by Name

Must pass a name as String (e.g. "canalave-city").

var response = PokeAPI.getObjectByName<Location>("canalave-city");
Location Areas

Get Location Areas

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<LocationArea>(1, 1);

Get Location Area

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<LocationArea>(1);

Get Location Area by Name

Must pass a name as String (e.g. "canalave-city-area").

var response = PokeAPI.getObjectByName<LocationArea>("canalave-city-area");
Pal Park Areas

Get Pal Park Areas

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<PalParkArea>(1, 1);

Get Pal Park Area

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<PalParkArea>(1);

Get Pal Park Area by Name

Must pass a name as String (e.g. "forest").

var response = PokeAPI.getObjectByName<PalParkArea>("forest");
Regions

Get Regions

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<Region>(1, 1);

Get Region

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<Region>(1);

Get Region by Name

Must pass a name as String (e.g. "kanto").

var response = PokeAPI.getObjectByName<Region>("kanto");

Machines

Machines

Get Machines

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<Machine>(1, 1);

Get Machine

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<Machine>(1);

Moves

Moves

Get Moves

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<Move>(1, 1);

Get Move

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<Move>(1);

Get Move by Name

Must pass a name as String (e.g. "pound").

var response = PokeAPI.getObjectByName<Move>("pound");
Move Ailments

Get Move Ailments

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<MoveAilment>(1, 1);

Get Move Ailment

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<MoveAilment>(1);

Get Move Ailment by Name

Must pass a name as String (e.g. "paralysis").

var response = PokeAPI.getObjectByName<MoveAilment>("paralysis");
Move Battle Styles

Get Move Battle Styles

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<MoveBattleStyle>(1, 1);

Get Move Battle Style

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<MoveBattleStyle>(1);

Get Move Battle Style by Name

Must pass a name as String (e.g. "attack").

var response = PokeAPI.getObjectByName<MoveBattleStyle>("attack");
Move Categories

Get Move Categories

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<MoveCategory>(1, 1);

Get Move Category

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<MoveCategory>(1);

Get Move Category by Name

Must pass a name as String (e.g. "damage").

var response = PokeAPI.getObjectByName<MoveCategory>("damage");
Move Damage Classes

Get Move Damage Classes

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<MoveDamageClass>(1, 1);

Get Move Damage Class

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<MoveDamageClass>(1);

Get Move Damage Class by Name

Must pass a name as String (e.g. "status").

var response = PokeAPI.getObjectByName<MoveDamageClass>("status");
Move Learn Methods

Get Move Learn Methods

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<MoveLearnMethod>(1, 1);

Get Move Learn Method

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<MoveLearnMethod>(1);

Get Move Learn Method by Name

Must pass a name as String (e.g. "level-up").

var response = PokeAPI.getObjectByName<MoveLearnMethod>("level-up");
Move Targets

Get Move Targets

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<MoveTarget>(1, 1);

Get Move Target

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<MoveTarget>(1);

Get Move Target by Name

Must pass a name as String (e.g. "selected-pokemon").

var response = PokeAPI.getObjectByName<MoveTarget>("selected-pokemon");

Pokemon

Abilities

Get Abilities

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<Ability>(1, 1);

Get Ability

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<Ability>(1);

Get Ability by Name

Must pass a name as String (e.g. "stench").

var response = PokeAPI.getObjectByName<Ability>("stench");
Characteristics

Get Characteristics

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<Characteristic>(1, 1);

Get Characteristic

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<Characteristic>(1);
Egg Groups

Get Egg Groups

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<EggGroup>(1, 1);

Get Egg Group

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<EggGroup>(1);

Get Egg Group by Name

Must pass a name as String (e.g. "monster").

var response = PokeAPI.getObjectByName<EggGroup>("monster");
Genders

Get Genders

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<Gender>(1, 1);

Get Gender

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<Gender>(1);

Get Gender by Name

Must pass a name as String (e.g. "female").

var response = PokeAPI.getObjectByName<Gender>("female");
Growth Rates

Get Growth Rates

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<GrowthRate>(1, 1);

Get Growth Rate

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<GrowthRate>(1);

Get Growth Rate by Name

Must pass a name as String (e.g. "slow").

var response = PokeAPI.getObjectByName<GrowthRate>("slow");
Natures

Get Natures

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<Nature>(1, 1);

Get Nature

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<Nature>(1);

Get Nature by Name

Must pass a name as String (e.g. "hardy").

var response = PokeAPI.getObjectByName<Nature>("hardy");
Pokeathlon Stats

Get Pokeathlon Stats

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<PokeAthlonStat>(1, 1);

Get Pokeathlon Stat

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<PokeAthlonStat>(1);

Get Pokeathlon Stat by Name

Must pass a name as String (e.g. "speed").

var response = PokeAPI.getObjectByName<PokeAthlonStat>("speed");
Pokemon

Get All Pokemon

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<Pokemon>(1, 1);

Get Single Pokemon

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<Pokemon>(1);

Get Pokemon by Name

Must pass a name as String (e.g. "bulbasaur").

var response = PokeAPI.getObjectByName<Pokemon>("bulbasaur");

Get Basic Pokemon List

For performance, you can get just names and URLs:

var basicList = PokeAPI.getCommonList<Pokemon>(1, 20);
Pokemon Colors

Get Pokemon Colors

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<PokemonColor>(1, 1);

Get Pokemon Color

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<PokemonColor>(1);

Get Pokemon Color by Name

Must pass a name as String (e.g. "black").

var response = PokeAPI.getObjectByName<PokemonColor>("black");
Pokemon Forms

Get Pokemon Forms

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<PokemonForm>(1, 1);

Get Pokemon Form

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<PokemonForm>(1);

Get Pokemon Form by Name

Must pass a name as String (e.g. "bulbasaur").

var response = PokeAPI.getObjectByName<PokemonForm>("bulbasaur");
Pokemon Habitats

Get Pokemon Habitats

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<PokemonHabitat>(1, 1);

Get Pokemon Habitat

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<PokemonHabitat>(1);

Get Pokemon Habitat by Name

Must pass a name as String (e.g. "cave").

var response = PokeAPI.getObjectByName<PokemonHabitat>("cave");
Pokemon Shapes

Get Pokemon Shapes

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<PokemonShape>(1, 1);

Get Pokemon Shape

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<PokemonShape>(1);

Get Pokemon Shape by Name

Must pass a name as String (e.g. "ball").

var response = PokeAPI.getObjectByName<PokemonShape>("ball");
Pokemon Species

Get All Pokemon Species

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<PokemonSpecie>(1, 1);

Get Single Pokemon Species

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<PokemonSpecie>(1);

Get Pokemon Species by Name

Must pass a name as String (e.g. "bulbasaur").

var response = PokeAPI.getObjectByName<PokemonSpecie>("bulbasaur");
Stats

Get Stats

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<Stat>(1, 1);

Get Stat

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<Stat>(1);

Get Stat by Name

Must pass a name as String (e.g. "hp").

var response = PokeAPI.getObjectByName<Stat>("hp");
Types

Get Types

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<Type>(1, 1);

Get Type

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<Type>(1);

Get Type by Name

Must pass a name as String (e.g. "normal").

var response = PokeAPI.getObjectByName<Type>("normal");

Utility

Languages

Get Languages

Must pass an offset and limit as Int (e.g. 1, 1).

var response = PokeAPI.getObjectList<Language>(1, 1);

Get Language

Must pass an ID as Int (e.g. 1).

var response = PokeAPI.getObject<Language>(1);

Get Language by Name

Must pass a name as String (e.g. "en").

var response = PokeAPI.getObjectByName<Language>("en");