Wrapper for Poke API, written in Dart. Supports PokeAPI v2.
Full API documentation can be found at Poke API.
To use this plugin, add pokeapi
as a dependency in your pubspec.yaml file.
import 'package:pokeapi/pokeapi.dart';
-
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);
-
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');
- Offline Support: Automatically use cached data when offline (configurable)
- Connectivity Detection: Built-in connectivity checking to handle offline scenarios
Berries
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<Berry>(1, 1);
Must pass an ID as Int as Int (e.g. 1).
var response = PokeAPI.getObject<Berry>(1);
Must pass a name as String (e.g. "chesto").
var response = PokeAPI.getObjectByName<Berry>("chesto");
Berry Firmness
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<BerryFirmness>(1, 1);
Must pass an ID as Int as Int (e.g. 1).
var response = PokeAPI.getObject<BerryFirmness>(1);
Must pass a name as String (e.g. "very-soft").
var response = PokeAPI.getObjectByName<BerryFirmness>("very-soft");
Berry Flavors
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<BerryFlavor>(1, 1);
Must pass an ID as Int (e.g. 1).
var response = PokeAPI.getObject<BerryFlavor>(1);
Must pass a name as String (e.g. "spicy").
var response = PokeAPI.getObjectByName<BerryFlavor>("spicy");
Contest Types
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<ContestType>(1, 1);
Must pass an ID as Int (e.g. 1).
var response = PokeAPI.getObject<ContestType>(1);
Must pass a name as String (e.g. "cool").
var response = PokeAPI.getObjectByName<ContestType>("cool");
Contest Effects
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<ContestEffect>(1, 1);
Must pass an ID as Int (e.g. 1).
var response = PokeAPI.getObject<ContestEffect>(1);
Super Contest Effects
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<SuperContestEffect>(1, 1);
Must pass an ID as Int (e.g. 1).
var response = PokeAPI.getObject<SuperContestEffect>(1);
Encounter Methods
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<EncounterMethod>(1, 1);
Must pass an ID as Int (e.g. 1).
var response = PokeAPI.getObject<EncounterMethod>(1);
Must pass a name as String (e.g. "walk").
var response = PokeAPI.getObjectByName<EncounterMethod>("walk");
Encounter Conditions
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<EncounterCondition>(1, 1);
Must pass an ID as Int (e.g. 1).
var response = PokeAPI.getObject<EncounterCondition>(1);
Must pass a name as String (e.g. "swarm").
var response = PokeAPI.getObjectByName<EncounterCondition>("swarm");
Encounter Condition Values
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<EncounterConditionValue>(1, 1);
Must pass an ID as Int (e.g. 1).
var response = PokeAPI.getObject<EncounterConditionValue>(1);
Must pass a name as String (e.g. "swarm-yes").
var response = PokeAPI.getObjectByName<EncounterConditionValue>("swarm-yes");
Evolution Chains
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<EvolutionChain>(1, 1);
Must pass an ID as Int (e.g. 1).
var response = PokeAPI.getObject<EvolutionChain>(1);
- 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
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<EvolutionTrigger>(1, 1);
Must pass an ID as Int (e.g. 1).
var response = PokeAPI.getObject<EvolutionTrigger>(1);
Must pass a name as String (e.g. "level-up").
var response = PokeAPI.getObjectByName<EvolutionTrigger>("level-up");
Generations
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<Generation>(1, 1);
Must pass an ID as Int (e.g. 1).
var response = PokeAPI.getObject<Generation>(1);
Must pass a name as String (e.g. "generation-i").
var response = PokeAPI.getObjectByName<Generation>("generation-i");
Pokedex
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<Pokedex>(1, 1);
Must pass an ID as Int (e.g. 1).
var response = PokeAPI.getObject<Pokedex>(1);
Must pass a name as String (e.g. "national").
var response = PokeAPI.getObjectByName<Pokedex>("national");
Versions
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<Version>(1, 1);
Must pass an ID as Int (e.g. 1).
var response = PokeAPI.getObject<Version>(1);
Must pass a name as String (e.g. "red").
var response = PokeAPI.getObjectByName<Version>("red");
Version Groups
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<VersionGroup>(1, 1);
Must pass an ID as Int (e.g. 1).
var response = PokeAPI.getObject<VersionGroup>(1);
Must pass a name as String (e.g. "red-blue").
var response = PokeAPI.getObjectByName<VersionGroup>("red-blue");
Items
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<Item>(1, 1);
Must pass an ID as Int (e.g. 1).
var response = PokeAPI.getObject<Item>(1);
Must pass a name as String (e.g. "master-ball").
var response = PokeAPI.getObjectByName<Item>("master-ball");
Item Attributes
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<ItemAbility>(1, 1);
Must pass an ID as Int (e.g. 1).
var response = PokeAPI.getObject<ItemAbility>(1);
Must pass a name as String (e.g. "countable").
var response = PokeAPI.getObjectByName<ItemAbility>("countable");
Item Categories
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<ItemCategory>(1, 1);
Must pass an ID as Int (e.g. 1).
var response = PokeAPI.getObject<ItemCategory>(1);
Must pass a name as String (e.g. "stat-boosts").
var response = PokeAPI.getObjectByName<ItemCategory>("stat-boosts");
Item Fling Effects
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<ItemFlingEffect>(1, 1);
Must pass an ID as Int (e.g. 1).
var response = PokeAPI.getObject<ItemFlingEffect>(1);
Must pass a name as String (e.g. "badly-poison").
var response = PokeAPI.getObjectByName<ItemFlingEffect>("badly-poison");
Item Pockets
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<ItemPocket>(1, 1);
Must pass an ID as Int (e.g. 1).
var response = PokeAPI.getObject<ItemPocket>(1);
Must pass a name as String (e.g. "misc").
var response = PokeAPI.getObjectByName<ItemPocket>("misc");
Locations
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<Location>(1, 1);
Must pass an ID as Int (e.g. 1).
var response = PokeAPI.getObject<Location>(1);
Must pass a name as String (e.g. "canalave-city").
var response = PokeAPI.getObjectByName<Location>("canalave-city");
Location Areas
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<LocationArea>(1, 1);
Must pass an ID as Int (e.g. 1).
var response = PokeAPI.getObject<LocationArea>(1);
Must pass a name as String (e.g. "canalave-city-area").
var response = PokeAPI.getObjectByName<LocationArea>("canalave-city-area");
Pal Park Areas
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<PalParkArea>(1, 1);
Must pass an ID as Int (e.g. 1).
var response = PokeAPI.getObject<PalParkArea>(1);
Must pass a name as String (e.g. "forest").
var response = PokeAPI.getObjectByName<PalParkArea>("forest");
Regions
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<Region>(1, 1);
Must pass an ID as Int (e.g. 1).
var response = PokeAPI.getObject<Region>(1);
Must pass a name as String (e.g. "kanto").
var response = PokeAPI.getObjectByName<Region>("kanto");
Machines
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<Machine>(1, 1);
Must pass an ID as Int (e.g. 1).
var response = PokeAPI.getObject<Machine>(1);
Moves
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<Move>(1, 1);
Must pass an ID as Int (e.g. 1).
var response = PokeAPI.getObject<Move>(1);
Must pass a name as String (e.g. "pound").
var response = PokeAPI.getObjectByName<Move>("pound");
Move Ailments
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<MoveAilment>(1, 1);
Must pass an ID as Int (e.g. 1).
var response = PokeAPI.getObject<MoveAilment>(1);
Must pass a name as String (e.g. "paralysis").
var response = PokeAPI.getObjectByName<MoveAilment>("paralysis");
Move Battle Styles
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<MoveBattleStyle>(1, 1);
Must pass an ID as Int (e.g. 1).
var response = PokeAPI.getObject<MoveBattleStyle>(1);
Must pass a name as String (e.g. "attack").
var response = PokeAPI.getObjectByName<MoveBattleStyle>("attack");
Move Categories
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<MoveCategory>(1, 1);
Must pass an ID as Int (e.g. 1).
var response = PokeAPI.getObject<MoveCategory>(1);
Must pass a name as String (e.g. "damage").
var response = PokeAPI.getObjectByName<MoveCategory>("damage");
Move Damage Classes
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<MoveDamageClass>(1, 1);
Must pass an ID as Int (e.g. 1).
var response = PokeAPI.getObject<MoveDamageClass>(1);
Must pass a name as String (e.g. "status").
var response = PokeAPI.getObjectByName<MoveDamageClass>("status");
Move Learn Methods
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<MoveLearnMethod>(1, 1);
Must pass an ID as Int (e.g. 1).
var response = PokeAPI.getObject<MoveLearnMethod>(1);
Must pass a name as String (e.g. "level-up").
var response = PokeAPI.getObjectByName<MoveLearnMethod>("level-up");
Move Targets
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<MoveTarget>(1, 1);
Must pass an ID as Int (e.g. 1).
var response = PokeAPI.getObject<MoveTarget>(1);
Must pass a name as String (e.g. "selected-pokemon").
var response = PokeAPI.getObjectByName<MoveTarget>("selected-pokemon");
Abilities
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<Ability>(1, 1);
Must pass an ID as Int (e.g. 1).
var response = PokeAPI.getObject<Ability>(1);
Must pass a name as String (e.g. "stench").
var response = PokeAPI.getObjectByName<Ability>("stench");
Characteristics
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<Characteristic>(1, 1);
Must pass an ID as Int (e.g. 1).
var response = PokeAPI.getObject<Characteristic>(1);
Egg Groups
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<EggGroup>(1, 1);
Must pass an ID as Int (e.g. 1).
var response = PokeAPI.getObject<EggGroup>(1);
Must pass a name as String (e.g. "monster").
var response = PokeAPI.getObjectByName<EggGroup>("monster");
Genders
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<Gender>(1, 1);
Must pass an ID as Int (e.g. 1).
var response = PokeAPI.getObject<Gender>(1);
Must pass a name as String (e.g. "female").
var response = PokeAPI.getObjectByName<Gender>("female");
Growth Rates
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<GrowthRate>(1, 1);
Must pass an ID as Int (e.g. 1).
var response = PokeAPI.getObject<GrowthRate>(1);
Must pass a name as String (e.g. "slow").
var response = PokeAPI.getObjectByName<GrowthRate>("slow");
Natures
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<Nature>(1, 1);
Must pass an ID as Int (e.g. 1).
var response = PokeAPI.getObject<Nature>(1);
Must pass a name as String (e.g. "hardy").
var response = PokeAPI.getObjectByName<Nature>("hardy");
Pokeathlon Stats
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<PokeAthlonStat>(1, 1);
Must pass an ID as Int (e.g. 1).
var response = PokeAPI.getObject<PokeAthlonStat>(1);
Must pass a name as String (e.g. "speed").
var response = PokeAPI.getObjectByName<PokeAthlonStat>("speed");
Pokemon
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<Pokemon>(1, 1);
Must pass an ID as Int (e.g. 1).
var response = PokeAPI.getObject<Pokemon>(1);
Must pass a name as String (e.g. "bulbasaur").
var response = PokeAPI.getObjectByName<Pokemon>("bulbasaur");
For performance, you can get just names and URLs:
var basicList = PokeAPI.getCommonList<Pokemon>(1, 20);
Pokemon Colors
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<PokemonColor>(1, 1);
Must pass an ID as Int (e.g. 1).
var response = PokeAPI.getObject<PokemonColor>(1);
Must pass a name as String (e.g. "black").
var response = PokeAPI.getObjectByName<PokemonColor>("black");
Pokemon Forms
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<PokemonForm>(1, 1);
Must pass an ID as Int (e.g. 1).
var response = PokeAPI.getObject<PokemonForm>(1);
Must pass a name as String (e.g. "bulbasaur").
var response = PokeAPI.getObjectByName<PokemonForm>("bulbasaur");
Pokemon Habitats
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<PokemonHabitat>(1, 1);
Must pass an ID as Int (e.g. 1).
var response = PokeAPI.getObject<PokemonHabitat>(1);
Must pass a name as String (e.g. "cave").
var response = PokeAPI.getObjectByName<PokemonHabitat>("cave");
Pokemon Shapes
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<PokemonShape>(1, 1);
Must pass an ID as Int (e.g. 1).
var response = PokeAPI.getObject<PokemonShape>(1);
Must pass a name as String (e.g. "ball").
var response = PokeAPI.getObjectByName<PokemonShape>("ball");
Pokemon Species
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<PokemonSpecie>(1, 1);
Must pass an ID as Int (e.g. 1).
var response = PokeAPI.getObject<PokemonSpecie>(1);
Must pass a name as String (e.g. "bulbasaur").
var response = PokeAPI.getObjectByName<PokemonSpecie>("bulbasaur");
Stats
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<Stat>(1, 1);
Must pass an ID as Int (e.g. 1).
var response = PokeAPI.getObject<Stat>(1);
Must pass a name as String (e.g. "hp").
var response = PokeAPI.getObjectByName<Stat>("hp");
Types
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<Type>(1, 1);
Must pass an ID as Int (e.g. 1).
var response = PokeAPI.getObject<Type>(1);
Must pass a name as String (e.g. "normal").
var response = PokeAPI.getObjectByName<Type>("normal");
Languages
Must pass an offset and limit as Int (e.g. 1, 1).
var response = PokeAPI.getObjectList<Language>(1, 1);
Must pass an ID as Int (e.g. 1).
var response = PokeAPI.getObject<Language>(1);
Must pass a name as String (e.g. "en").
var response = PokeAPI.getObjectByName<Language>("en");