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");