Pakete, Repositories und App-Kategorien suchen

Cover von floating_view
Paketdetailsv1.0.4

floating_view

Ein Plugin, um das Verhalten einer YouTube-Kollaps-Fenster zu erreichen.

AndroidiOSWebmacOSWindowsLinux
30-Tage-Downloads
63
Likes
18
Pub-Punkte
160

Paket installieren

flutter pub add floating_view

Paketübersicht

Aus öffentlichen Paketdaten erstellte Orientierung.

Floating View ist ein Flutter-Plugin, das eine Picture-in-Picture-ähnliche Funktionalität ermöglicht, sodass Widgets über anderen Inhalten schweben können – ähnlich dem Verhalten der zusammengeklappten Fenster von YouTube. Es unterstützt mehrere Plattformen wie Android, iOS, Web, macOS, Windows und Linux. Entwickler können ziehbare, vergrößerbare und interaktive Flottierfenster erstellen, um die Benutzererfahrung in Apps mit dauerhaften UI-Elementen zu verbessern. Das Plugin lässt sich problemlos über eine einfache Befehlszeileninstallation in bestehende Flutter-Projekte integrieren.

Anwendungsfälle

  • Dauerhafte Chat-Widgets implementieren
  • Erstellen von schwebenden Steuerelementen für die Medienwiedergabe
  • Multitasking mit kleinen Überlagerungsflächen aktivieren
  • Immer sichtbare Navigationswerkzeuge
  • Entwicklung interaktiver Fließmenüs

Hauptmerkmale

  • Verschiebbare und vergrößerbare Float-Fenster
  • Plattformübergreifende Unterstützung (Android, iOS, Web, macOS, Windows, Linux)
  • Einfache Integration in das Widget-System von Flutter
  • Anpassbare Erscheinung und Verhalten
  • Unterstützt Touch- und Zeigerinteraktionen

Geeignet für

  • Entwickler, die Medien-Apps erstellen
  • Apps, die dauerhafte UI-Überlagerungen benötigen
  • Multitasking- oder produktivitätsorientierte Anwendungen
  • UI-Designer, die innovative Interaktionsmuster suchen
  • Projekte, die Bild-in-Bild-Funktionalität erfordern

Hinweise

  • Kann auf einigen Betriebssystemen plattformspezifische Berechtigungen erfordern
  • Leistungseinbußen bei komplexen verschachtelten Widgets
  • Eingeschränkter native Animationsunterstützung auf einigen Plattformen
  • Mögliche UI-Konflikte mit Vollbildlayouts
  • Erfordert sorgfältige Behandlung von Lebenszyklusereignissen

Original-README

Originaler README-Schnappschuss aus dem verknüpften Quell-Repository. Aktuelle Inhalte finden Sie im Repository.

FloatingView Package

The FloatingView package enables you to create a floating window similar to YouTube's floating video feature. This allows the window to float on the screen and be draggable while scrolling.

The example app running in iOS

Table of Contents

Integration Steps

To integrate the package into your Flutter application, follow these steps:

  1. Wrap the Screen:

    Wrap the screen where you want to display the FloatingView:

    late final FloatingController _controller = FloatingController(
        context,
        initialPosition: FloatingPosition.bottomLeft,
    );
    
    @override
    void dispose() {
        super.dispose();
        _controller.dispose();
    }
    
    @override
    Widget build(BuildContext context) {
        return FloatingView(
            controller: _controller,
            childBuilder: () => Scaffold(
                body: ItemBuilder(list: dummyList, controller: _controller),
            ),
        );
    }
    

    Note: FloatingView will disappear when changing routes. To display it across routes, wrap your desired route screen with the FloatingView and use the same controller. The controller can be passed down in the widget tree or stored in state management solutions such as BLoC, Provider, etc. The FloatingView will be passed down across the screen using the Hero widget, which is currently the only option available.

    Navigator.push(
        context,
        MaterialPageRoute(
            builder: (context) => FloatingView(
                controller: _controller,
                childBuilder: () => NavigationTestScreen(),
            ),
        ),
    );
    
  2. Initialize the FloatingView:

    Initialize the controller and store the widget you want to display, such as a video, screen, or text. Here is an example of using FloatingView with a Video Player or a simple screen:

    void onTap(dynamic data) {
        switch (data) {
            case Video _:
                VideoPlayerController? videoController;
                videoController = VideoPlayerController.asset(data.url)
                    ..initialize().then((_) {
                        videoController?.play();
                    });
    
                widget.controller.initialize(
                    maxChild: MaximizedVideo(
                        videoController: videoController,
                        floatingController: widget.controller,
                        video: data,
                    ),
                    minChild: MinimizedVideo(
                        videoController: videoController,
                        floatingController: widget.controller,
                        video: data,
                    ),
                    onDispose: () {
                        videoController?.dispose();
                    },
                );
                break;
    
            case News _:
                widget.controller.initialize(
                    maxChild: MaximizedNewsScreen(
                        news: data,
                        controller: widget.controller,
                    ),
                    minChild: MinimizedNewsScreen(
                        news: data,
                        controller: widget.controller,
                    ),
                    onDispose: () {},
                );
                break;
    
            default:
                break;
        }
    }
    

    Note: controller.initialize() will run the previous onDispose() method to clear the previous controller data if you initialize another FloatingView while having an active one.

  3. Using the APIs:

    You can use the passed-down controller to control the FloatingView state like this:

    Padding(
        padding: const EdgeInsets.fromLTRB(15, 15, 15, 0),
        child: Row(
            children: [
                GestureDetector(
                    onTap: () {
                        widget.controller.close();
                    },
                    child: Icon(Icons.close, size: 24),
                ),
                const SizedBox(width: 20),
                GestureDetector(
                    onTap: () {
                        widget.controller.toggleSize();
                    },
                    child: Icon(Icons.aspect_ratio, size: 24),
                ),
            ],
        ),
    );
    
Available API Methods in FloatingController
  1. Initialize the Floating View:

    controller.initialize({
        required Widget maxChild,
        required Widget minChild,
        required VoidCallback onDispose,
    })
    
  2. Close an Active Floating View:

    controller.close()
    
  3. Toggle the Floating View Size:

    controller.toggleSize()
    
  4. #Dispose the controller:

    controller.dispose()
    

Contributing

Contributions are welcome! Please open an issue or submit a pull request if you have any improvements or bug fixes.

License

This project is licensed under the MIT License. See the LICENSE file for details.

Support Me

If you find this package helpful and want to support its development, consider making a donation. Thank you for your support!

Support via PayPal

Kategorien

Quell-Repository

Projekte, die dieses Paket verwenden

Noch keine Daten verfügbar.