inavi_global_map_flutter 1.0.0
inavi_global_map_flutter: ^1.0.0 copied to clipboard
Flutter plugin for iNavi Global Map SDK — map display, camera control, and markers on Android and iOS.
example/lib/main.dart
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:inavi_global_map_flutter/inavi_global_map_flutter.dart';
import 'feature_list_screen.dart';
void main() {
runApp(const InaviGlobalMapExampleApp());
}
class InaviGlobalMapExampleApp extends StatefulWidget {
const InaviGlobalMapExampleApp({super.key});
@override
State<InaviGlobalMapExampleApp> createState() =>
_InaviGlobalMapExampleAppState();
}
class _InaviGlobalMapExampleAppState extends State<InaviGlobalMapExampleApp> {
final _navigatorKey = GlobalKey<NavigatorState>();
StreamSubscription<SdkAuthEvent>? _authSub;
@override
void initState() {
super.initState();
_authSub = InaviGlobalMapSdk.instance.onAuth.listen((event) {
if (event is SdkAuthFailure) {
_showInitFailDialog(
errorCode: int.tryParse(event.errorCode),
errorMessage: event.errorMessage,
);
}
});
}
@override
void dispose() {
_authSub?.cancel();
super.dispose();
}
void _showInitFailDialog({int? errorCode, String? errorMessage}) {
final context = _navigatorKey.currentContext;
if (context == null) return;
// Android: errorCode + errorMessage 분리 전달 → 조합
// iOS: errorMessage 자체에 코드가 포함된 형식 → 그대로 사용
final parts = <String?>[
errorCode != null ? '$errorCode' : null,
errorMessage,
].whereType<String>().toList();
final content =
parts.isNotEmpty ? parts.join(': ') : '알 수 없는 오류가 발생했습니다.';
showDialog<void>(
context: context,
barrierDismissible: false,
builder: (context) => AlertDialog(
title: const Text('SDK 초기화 실패'),
content: Text(content),
actions: [
TextButton(
onPressed: () => Navigator.of(context).pop(),
child: const Text('확인'),
),
],
),
);
}
@override
Widget build(BuildContext context) {
return MaterialApp(
navigatorKey: _navigatorKey,
title: 'iNavi Global Maps',
theme: ThemeData(useMaterial3: true),
home: const FeatureListScreen(),
);
}
}