jni_flutter 1.0.1
jni_flutter: ^1.0.1 copied to clipboard
A library to access Flutter Android specific APIs from Dart.
// 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<JniExamplePage> createState() => _JniExamplePageState();
}
class _JniExamplePageState extends State<JniExamplePage> {
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),
],
),
),
);
}
}