flutter_floatwing icon indicating copy to clipboard operation
flutter_floatwing copied to clipboard

Cannot `start` Window with `entry-point`

Open mulaRahul opened this issue 2 years ago • 2 comments

Thanks for the great package!

Specs:

Flutter: 3.3.10 (stable) Android SDK: 31.0.0-rc4 flutter_floatwing: ^0.2.1

Issue:

I'm trying to run a simple test, where I show an overlay with the entry-point. But the window doesn't start/create, instead null is returned. The followings are the logs -

Logs
Launching lib\main.dart on Android SDK built for x86 in debug mode...
lib\main.dart:1
√  Built build\app\outputs\flutter-apk\app-debug.apk.
Connecting to VM Service at ws://127.0.0.1:61440/5XyFBiJrhLk=/ws
D/FloatwingPlugin( 9392): [plugin] pixel radio already exits
D/FloatwingPlugin( 9392): [plugin] system config already exits: {"pixelRadio":2,"screen":{"width":1080,"height":2208}}
[log] [plugin] initialize result: {permission_grated: true, pixel_radio_updated: false, system_config_updated: false, service_running: false, windows: null}
[log] [plugin] there are 0 windows already started
D/FloatwingService( 9392): [service] wait for service created
I/FloatwingService( 9392): [service] create a window: default {entry=myOverlayMain}
D/FloatwingService( 9392): [service] wait for service created
I/flutter ( 9392): [ DEBUG ]: window null

I also noticed that awaiting the openPermissionSetting() doesn't actually wait for permission from the user/settings.

await FloatwingPlugin().openPermissionSetting();

Steps to reproduce:

Run the following code -

main.dart
import 'package:flutter/material.dart';
import 'package:flutter_floatwing/flutter_floatwing.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  FloatwingPlugin().initialize();
  runApp(const RootApp());
}

@pragma("vm:entry-point")
void myOverlayMain() {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(
    MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Material(
        color: Colors.transparent,
        elevation: 0.0,
        child: Container(
          width: 100,
          height: 100,
          color: Colors.black,
        ),
      ),
    ),
  );
}

class RootApp extends StatelessWidget {
  const RootApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        appBar: AppBar(
          title: const Text("Floatwing Test"),
        ),
        body: Center(
          child: TextButton(
            onPressed: _startWindow,
            child: const Text("Start"),
          ),
        ),
      ),
    );
  }

  void _startWindow() async {
    // check permission and service status
    final bool hasPermission = await FloatwingPlugin().checkPermission();
    final bool serviceStarted = await FloatwingPlugin().isServiceRunning();

    if (!hasPermission) {
      await FloatwingPlugin().openPermissionSetting();
      // ☝️ it doesn't wait for the value returned by permissions
    }
    if (!serviceStarted) {
      await FloatwingPlugin().startService();
    }

    // start overlay window
    final Window? window = await WindowConfig(
      entry: "myOverlayMain",
    ).to().create(start: true);

    debugPrint("[ DEBUG ]: window $window");
  }
}

mulaRahul avatar Dec 30 '22 11:12 mulaRahul

This is my issue as well when using routes

peyman-se avatar Apr 09 '23 04:04 peyman-se

Hi thank you for your guys attention to this package, I will look into it in few days later

jiusanzhou avatar Apr 09 '23 11:04 jiusanzhou