Open Tr0y2ooo opened 1 month ago
Same here not able to send the data to the overlay window
same issue :( Have you found the solution yet?
i might have a solution for the FlutterOverlayWindow package since im using the same one too
First add the dependency 'flutter_overlay_window: ^0.4.4' to your pubspec.yaml
Second import the package 'import 'package:flutter_overlay_window/flutter_overlay_window.dart';'
Third this is my function of the overlay window \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ home_page.dart OverlayPosition? storedPosition;
Future
if (_permissionGranted!) {
FlutterOverlayWindow.closeOverlay();
storedPosition = await FlutterOverlayWindow.getOverlayPosition();
sendData(isDarkModeString, selectedAddress, selectedFlavors);
await FlutterOverlayWindow.showOverlay(
visibility: NotificationVisibility.visibilityPublic,
flag: OverlayFlag.defaultFlag,
width: _screenWidthInt!,
height: _screenHeightInt!,
enableDrag: true,
positionGravity: PositionGravity.none,
startPosition: storedPosition ?? OverlayPosition(0, 0),
);
}
} \\\\\\\\\\\\\\\\\\\\\\\\\\\\true_caller.dart void sendData(String? isDarkModeString, String? address, String? flavors) { final data = '{"isDarkModeString": "$isDarkModeString", "address": "$address", "flavors": "$flavors"}'; FlutterOverlayWindow.shareData(data); }
@override void initState() { super.initState(); FlutterOverlayWindow.overlayListener.listen((event) { final parsedData = parseEvent(event); setState(() { isDarkModeString = parsedData['isDarkModeString'] ?? ''; address = parsedData['address'] ?? ''; flavors = parsedData['flavors'] ?? ''; isDarkModeBool = isDarkModeString.toLowerCase() == 'true'; }); }); }
Map<String, dynamic> parseEvent(String event) { try { final Map<String, dynamic> data = jsonDecode(event); return { 'isDarkModeString': data['isDarkModeString'] as String, 'address': data['address'] as String, 'flavors': data['flavors'] as String, }; } catch (e) { log("Error parsing event data: $e"); return {}; } } hope you might find this helpful
I have wrote homepage.dart,there's a button,I add a function in onPress event. trailing: IconButton( icon: const Icon(Icons.map), onPressed: () async { _launchMapsLauncher( _selectedNavOp, address, latitude, longitude); _openFloatingWindow(context); /////////////////////////////////////////////////////////////////////////////////// void _openFloatingWindow (BuildContext context) async{ if (await FlutterOverlayWindow.isActive()) return; await FlutterOverlayWindow.showOverlay( enableDrag: true, overlayTitle: _selectedAddress!, overlayContent: 'Overlay Enabled', flag: OverlayFlag.defaultFlag, visibility: NotificationVisibility.visibilityPublic, positionGravity: PositionGravity.auto, height: (MediaQuery.of(context).size.height * 0.6).toInt(), width: WindowSize.matchParent, startPosition: const OverlayPosition(0, -259), ); } the Overlaywindow shows context of true_caller_overlay not the context i except to true_caller_overlay.dart import 'dart:developer';
import 'package:flutter/material.dart'; import 'package:flutter_overlay_window/flutter_overlay_window.dart'; import '../home_page.dart';
class TrueCallerOverlay extends StatefulWidget { final String title;
const TrueCallerOverlay({Key? key, required this.title}) : super(key: key);
@override State createState() => _TrueCallerOverlayState();
}
class _TrueCallerOverlayState extends State {
@override void initState() { super.initState(); }
@override Widget build(BuildContext context) { return Material( color: Colors.transparent, child: Center( child: Container( padding: const EdgeInsets.symmetric(vertical: 5.0), width: double.infinity, decoration: BoxDecoration( color: Colors.black, // 將背景顏色設置為黑色 borderRadius: BorderRadius.circular(12.0), ), child: GestureDetector( onTap: () { FlutterOverlayWindow.getOverlayPosition().then((value) { log("Overlay Position: $value"); }); }, child: Stack( children: [ Column( children: [ ListTile( leading: Container( height: 80.0, width: 80.0, ), title: const Text( "aaaaaa", style: TextStyle( fontSize: 20.0, fontWeight: FontWeight.bold , color: Colors.white), ), ), ], ), Positioned( top: 0, right: 0, child: IconButton( onPressed: () async { await FlutterOverlayWindow.closeOverlay(); }, icon: const Icon( Icons.close, color: Colors.white, ), ), ), ], ), ), ), ), ); } } and my main.dart import 'dart:async'; import 'package:v2_0/auth/login_screen.dart'; import 'package:flutter/material.dart'; import 'package:firebase_core/firebase_core.dart'; import 'firebase_options.dart'; import '../overlays/true_caller_overlay.dart';
Future main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp( options: DefaultFirebaseOptions.currentPlatform, );
runApp(const MyApp()); } @pragma("vm:entry-point") void overlayMain() { WidgetsFlutterBinding.ensureInitialized(); runApp( const MaterialApp( debugShowCheckedModeBanner: false, home: TrueCallerOverlay(title: '123',), ), ); }
class MyApp extends StatelessWidget { const MyApp({super.key});
@override Widget build(BuildContext context) { return const MaterialApp( debugShowCheckedModeBanner: false, home: LoginScreen()); } }