// Copyright (c) 2026, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. import 'dart:ui'; import 'package:flutter/material.dart'; import 'package:jni/jni.dart'; import 'package:jni_flutter/jni_flutter.dart'; void main() { runApp(const MainApp()); } class MainApp extends StatelessWidget { const MainApp({super.key}); @override Widget build(BuildContext context) { return const MaterialApp(home: JniExamplePage()); } } class JniExamplePage extends StatefulWidget { const JniExamplePage({super.key}); @override State createState() => _JniExamplePageState(); } class _JniExamplePageState extends State { String _packageName = ''; String _activity = ''; @override void initState() { super.initState(); _getAndroidInfo(); } void _getAndroidInfo() { try { final context = androidApplicationContext; final contextClass = context.jClass; final getPackageNameId = contextClass.instanceMethodId( 'getPackageName', '()Ljava/lang/String;', ); final packageName = getPackageNameId .call(context, JString.type, []) .toDartString(releaseOriginal: true); final activity = androidActivity(PlatformDispatcher.instance.engineId!); final activityString = activity?.jClass.toString() ?? 'no activity'; activity?.release(); contextClass.release(); context.release(); setState(() { _packageName = packageName; _activity = activityString; }); } catch (e) { setState(() { _packageName = 'Error: $e'; }); } } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text('JNI Flutter Example')), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Text('Package name:'), Text(_packageName), const SizedBox(height: 20), Text('Activity:'), Text(_activity), ], ), ), ); } }