bhashini_flutter_translation_plugin_sdk 1.0.0
bhashini_flutter_translation_plugin_sdk: ^1.0.0 copied to clipboard
Bhashini Flutter SDK — auto-translates any Flutter app into 22 Indian languages. Zero widget changes required. Works by walking the element tree and injecting translations directly into RenderParagrap [...]
example/lib/main.dart
import 'package:bhashini_flutter_translation_plugin_sdk/bhashini_flutter_translation_plugin_sdk.dart';
import 'package:flutter/material.dart';
// ignore: depend_on_referenced_packages
import 'package:shared_preferences/shared_preferences.dart';
import 'test_runner.dart';
import 'screens/splash_screen.dart';
import 'screens/onboarding_screen.dart';
import 'screens/login_screen.dart';
import 'screens/home_screen.dart';
import 'screens/settings_screen.dart';
import 'screens/notifications_screen.dart';
import 'screens/search_screen.dart';
final scaffoldKey = GlobalKey<ScaffoldMessengerState>();
final navigatorKey = GlobalKey<NavigatorState>();
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
BhashiniSDK.init(
// Android emulator: 10.0.2.2 → host machine
// iOS simulator: use your Mac's LAN IP, e.g. http://192.168.1.x:8002
baseUrl: 'http://10.0.2.2:8002',
serviceId: 'ai4bharat/indictrans-v2-all-gpu--t4/btp',
packageName: 'com.bhashini.demo',
certificateFingerprint:
'3D:D9:6A:C9:A2:3C:B6:C9:C4:45:49:42:BC:CC:F6:EF:64:7B:CA:8D:0A:29:05:10:38:B2:81:18:1D:64:0F:F9',
bundleId: 'com.bhashini.demo',
teamId: 'REPLACE_WITH_YOUR_TEAM_ID',
);
BhashiniSDK.instance.onStateChanged = () {
if (BhashiniSDK.instance.status == BhashiniStatus.error) {
scaffoldKey.currentState?.showSnackBar(
SnackBar(
content: Text('Translation error: ${BhashiniSDK.instance.lastError}'),
backgroundColor: Colors.red,
),
);
}
};
runApp(const JanSevaApp());
}
class JanSevaApp extends StatelessWidget {
const JanSevaApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Jan Seva Portal',
scaffoldMessengerKey: scaffoldKey,
navigatorKey: navigatorKey,
navigatorObservers: [BhashiniSDK.navigatorObserver],
debugShowCheckedModeBanner: false,
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(
seedColor: const Color(0xFF003087),
primary: const Color(0xFF003087),
secondary: const Color(0xFF0070C0),
),
useMaterial3: true,
appBarTheme: const AppBarTheme(
backgroundColor: Color(0xFF003087),
foregroundColor: Colors.white,
elevation: 2,
),
elevatedButtonTheme: ElevatedButtonThemeData(
style: ElevatedButton.styleFrom(
backgroundColor: const Color(0xFF003087),
foregroundColor: Colors.white,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8),
),
),
),
cardTheme: const CardThemeData(elevation: 2),
inputDecorationTheme: InputDecorationTheme(
border: OutlineInputBorder(borderRadius: BorderRadius.circular(8)),
filled: true,
fillColor: Colors.grey.shade50,
),
),
initialRoute: '/',
routes: {
'/': (_) => const SplashScreen(),
'/onboarding': (_) => const OnboardingScreen(),
'/login': (_) => const LoginScreen(),
'/home': (_) => const HomeScreen(),
'/settings': (_) => const SettingsScreen(),
'/notifications': (_) => const NotificationsScreen(),
'/search': (_) => const SearchScreen(),
},
builder: (context, child) {
return ValueListenableBuilder<bool>(
valueListenable: TestOverlayController.isRunning,
builder: (_, running, __) {
if (!running) return child!;
return TestOverlayWidget(child: child!);
},
);
},
);
}
}