flutter_device_kit 1.0.1
flutter_device_kit: ^1.0.1 copied to clipboard
A Flutter utility package to easily detect device platforms, form factors (mobile, tablet, TV, desktop, web), and inspect platform-specific device info.
import 'package:flutter/material.dart';
import 'package:flutter_device_kit/flutter_device_kit.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// Initialize device info caching
// Comment / uncomment debugTvMode to simulate TV environment during testing:
await Device.ensureInitialized(
// debugTvMode: true,
);
runApp(const DeviceKitExampleApp());
}
class DeviceKitExampleApp extends StatelessWidget {
const DeviceKitExampleApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Device Kit Demo',
theme: ThemeData(
useMaterial3: true,
colorSchemeSeed: Colors.indigo,
),
home: Scaffold(
appBar: AppBar(
title: const Text('Flutter Device Kit Demo'),
centerTitle: true,
),
body: ListView(
padding: const EdgeInsets.all(16.0),
children: [
_buildSectionHeader('Platform Type Enum'),
_buildInfoCard([
_buildRow('Device.value', '${Device.value}'),
_buildRow('PlatformType.values', '${PlatformType.values}'),
]),
const SizedBox(height: 16),
_buildSectionHeader('Form Factors'),
_buildInfoCard([
_buildRow('Device.isMobile', '${Device.isMobile}'),
_buildRow('Device.isTablet', '${Device.isTablet}'),
_buildRow('Device.isTv', '${Device.isTv}'),
_buildRow('Device.isDesktop', '${Device.isDesktop}'),
_buildRow('Device.isDesktopOrWeb', '${Device.isDesktopOrWeb}'),
]),
const SizedBox(height: 16),
_buildSectionHeader('Operating System Flags'),
_buildInfoCard([
_buildRow('Device.isAndroid', '${Device.isAndroid}'),
_buildRow('Device.isIOS', '${Device.isIOS}'),
_buildRow('Device.isWeb', '${Device.isWeb}'),
_buildRow('Device.isMacOS', '${Device.isMacOS}'),
_buildRow('Device.isWindows', '${Device.isWindows}'),
_buildRow('Device.isLinux', '${Device.isLinux}'),
_buildRow('Device.isFuchsia', '${Device.isFuchsia}'),
]),
const SizedBox(height: 16),
_buildSectionHeader('Dimension Breakpoints'),
_buildInfoCard([
_buildRow('mobileWidth', '$mobileWidth px'),
_buildRow('tabletWidth', '$tabletWidth px'),
]),
const SizedBox(height: 16),
_buildSectionHeader('Platform Metadata (device_info_plus)'),
_buildInfoCard([
_buildRow('Device.deviceInfo', '${Device.deviceInfo?.data}'),
_buildRow('Device.androidInfo', _formatAndroidInfo()),
_buildRow('Device.iosInfo', _formatIosInfo()),
_buildRow('Device.webInfo', _formatWebInfo()),
_buildRow('Device.macOsInfo', _formatMacOsInfo()),
_buildRow('Device.windowsInfo', _formatWindowsInfo()),
_buildRow('Device.linuxInfo', _formatLinuxInfo()),
]),
],
),
),
);
}
static Widget _buildSectionHeader(String title) {
return Padding(
padding: const EdgeInsets.only(bottom: 8.0, left: 4.0),
child: Text(
title,
style: const TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
),
);
}
static Widget _buildInfoCard(List<Widget> children) {
return Card(
elevation: 2,
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 8.0, horizontal: 16.0),
child: Column(children: children),
),
);
}
static Widget _buildRow(String label, String value) {
return Padding(
padding: const EdgeInsets.symmetric(vertical: 6.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(label, style: const TextStyle(fontWeight: FontWeight.w600)),
const SizedBox(width: 8),
Flexible(
child: Text(
value,
textAlign: TextAlign.end,
style: const TextStyle(color: Colors.grey),
),
),
],
),
);
}
static String _formatAndroidInfo() {
final info = Device.androidInfo;
if (info == null) return 'null (Not Android)';
return '${info.manufacturer} ${info.model} (Android ${info.version.release})';
}
static String _formatIosInfo() {
final info = Device.iosInfo;
if (info == null) return 'null (Not iOS)';
return '${info.name} (${info.systemName} ${info.systemVersion})';
}
static String _formatWebInfo() {
final info = Device.webInfo;
if (info == null) return 'null (Not Web)';
return '${info.browserName.name} (${info.platform})';
}
static String _formatMacOsInfo() {
final info = Device.macOsInfo;
if (info == null) return 'null (Not macOS)';
return '${info.computerName} (${info.osRelease})';
}
static String _formatWindowsInfo() {
final info = Device.windowsInfo;
if (info == null) return 'null (Not Windows)';
return '${info.computerName} (Build ${info.buildNumber})';
}
static String _formatLinuxInfo() {
final info = Device.linuxInfo;
if (info == null) return 'null (Not Linux)';
return '${info.name} ${info.versionId}';
}
}