flutter_overlay_support 1.0.0
flutter_overlay_support: ^1.0.0 copied to clipboard
A lightweight, powerful, and adaptive overlay support package for Flutter. Features intelligent queueing, widget anchoring, future-based loaders, and zero dependencies.
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_overlay_support/flutter_overlay_support.dart';
import 'presentation/pages/home_page.dart';
import 'presentation/pages/multi_overlay_page.dart';
import 'presentation/pages/ime_page.dart';
import 'presentation/pages/new_features_page.dart';
void main() {
debugDefaultTargetPlatformOverride = TargetPlatform.android;
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return OverlaySupport.global(
theme: const OverlaySupportThemeData(
glassmorphismConfig: GlassmorphismTheme(
blur: 10,
opacity: 0.1,
color: Colors.white,
),
),
child: MaterialApp(
title: 'Flutter Overlay Support',
debugShowCheckedModeBanner: false,
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple, brightness: Brightness.light),
useMaterial3: true,
),
darkTheme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple, brightness: Brightness.dark),
useMaterial3: true,
),
home: const _ExampleDrawer(),
),
);
}
}
class _ExampleDrawer extends StatefulWidget {
const _ExampleDrawer();
@override
_ExampleDrawerState createState() => _ExampleDrawerState();
}
class _ExampleDrawerState extends State<_ExampleDrawer> {
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
@override
Widget build(BuildContext context) {
return Scaffold(
key: _scaffoldKey,
drawer: const Drawer(
child: _NavigationTiles(),
),
body: Stack(
children: [
const HomePage(),
Positioned(
top: MediaQuery.of(context).padding.top + 8,
left: 16,
child: CircleAvatar(
backgroundColor: Theme.of(context).colorScheme.surface.withValues(alpha: 0.8),
child: IconButton(
icon: const Icon(Icons.menu),
onPressed: () => _scaffoldKey.currentState?.openDrawer(),
),
),
),
],
),
);
}
}
class _NavigationTiles extends StatelessWidget {
const _NavigationTiles();
@override
Widget build(BuildContext context) {
return Column(
children: [
DrawerHeader(
decoration: BoxDecoration(
color: Theme.of(context).colorScheme.primaryContainer,
),
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Icon(Icons.layers, size: 48),
const SizedBox(height: 8),
Text(
'Flutter Overlay Support',
style: Theme.of(context).textTheme.titleLarge?.copyWith(fontWeight: FontWeight.bold),
),
],
),
),
),
Expanded(
child: ListView(
padding: EdgeInsets.zero,
children: [
_buildTile(context, Icons.home_outlined, 'Home', const HomePage(), isHome: true),
_buildTile(context, Icons.auto_awesome_outlined, 'Advanced Capabilities', const PageNewFeatures()),
_buildTile(context, Icons.grid_view_outlined, 'Multi-Screen Support', const PageMultiOverlaySupport()),
_buildTile(context, Icons.keyboard_outlined, 'IME / Keyboard Interaction', const PageWithIme()),
],
),
),
const Padding(
padding: EdgeInsets.all(16.0),
child: Text('Version 1.0.0', style: TextStyle(color: Colors.grey, fontSize: 12)),
),
],
);
}
Widget _buildTile(BuildContext context, IconData icon, String title, Widget page, {bool isHome = false}) {
return ListTile(
leading: Icon(icon),
title: Text(title),
onTap: () {
Navigator.pop(context);
if (!isHome) {
Navigator.push(context, MaterialPageRoute(builder: (context) => page));
}
},
);
}
}