init static method
Future<AutoPilotApi>
init({
- required String baseUrl,
- String tokenType = 'Bearer',
- int timeoutSeconds = 30,
- bool? enableLogs,
- bool enableCache = false,
- Duration cacheDuration = const Duration(minutes: 5),
- Map<
String, String> globalHeaders = const {}, - int maxRetries = 3,
- Duration retryDelay = const Duration(seconds: 1),
- bool enableTokenRefresh = false,
- Future<
String?> onRefreshToken()?, - bool enableGlobalLoader = false,
- void onLoadingChanged(
- bool loading
- void onError()?,
- void onRequestSent()?,
- void onResponseReceived()?,
- String successKey = 'status',
- dynamic successValue = true,
- String messageKey = 'message',
- String dataKey = 'data',
- bool enableDeduplication = true,
- bool printPayload = true,
- bool prettyPrint = true,
- bool enableOfflineQueue = false,
Initialize AutoPilot Zero once at app startup.
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await AutoPilotApi.init(
baseUrl : 'https://api.example.com/v1',
enableLogs : true,
printPayload : true,
enableCache : true,
);
runApp(const MyApp());
}
Implementation
static Future<AutoPilotApi> init({
required String baseUrl,
String tokenType = 'Bearer',
int timeoutSeconds = 30,
bool? enableLogs,
bool enableCache = false,
Duration cacheDuration = const Duration(minutes: 5),
Map<String, String> globalHeaders = const {},
int maxRetries = 3,
Duration retryDelay = const Duration(seconds: 1),
bool enableTokenRefresh = false,
Future<String?> Function()? onRefreshToken,
bool enableGlobalLoader = false,
void Function(bool loading)? onLoadingChanged,
void Function(String message, int statusCode)? onError,
void Function(String url, String method)? onRequestSent,
void Function(String url, int statusCode, Duration time)?
onResponseReceived,
String successKey = 'status',
dynamic successValue = true,
String messageKey = 'message',
String dataKey = 'data',
bool enableDeduplication = true,
bool printPayload = true,
bool prettyPrint = true,
bool enableOfflineQueue = false,
}) async {
final url = baseUrl.endsWith('/')
? baseUrl.substring(0, baseUrl.length - 1)
: baseUrl;
// init storage first
await ApStorage.init();
final cfg = AutoPilotConfig(
baseUrl: url,
tokenType: tokenType,
timeoutSeconds: timeoutSeconds,
enableLogs: enableLogs ?? kDebugMode,
enableCache: enableCache,
cacheDuration: cacheDuration,
globalHeaders: globalHeaders,
maxRetries: maxRetries,
retryDelay: retryDelay,
enableTokenRefresh: enableTokenRefresh,
onRefreshToken: onRefreshToken,
enableGlobalLoader: enableGlobalLoader,
onLoadingChanged: onLoadingChanged,
onError: onError,
onRequestSent: onRequestSent,
onResponseReceived: onResponseReceived,
successKey: successKey,
successValue: successValue,
messageKey: messageKey,
dataKey: dataKey,
enableDeduplication: enableDeduplication,
printPayload: printPayload,
prettyPrint: prettyPrint,
enableOfflineQueue: enableOfflineQueue,
);
AutoPilotLogger.configure(
enabled: cfg.enableLogs,
printPayload: printPayload,
prettyPrint: prettyPrint,
);
final api = AutoPilotApi._();
api._cfg = cfg;
api._httpClient = _buildClient(timeoutSeconds);
_instance = api;
AutoPilotLogger.info('✅ AutoPilot Zero initialized → $url');
AutoPilotLogger.info(' Dependencies: ZERO (pure Dart + Flutter SDK)');
return api;
}