Flutter悬浮窗插件gx_floating_widget的使用

Flutter悬浮窗插件gx_floating_widget的使用

说明

此部件用于在 Stack 下创建一个可拖动的小部件,并带有靠边动画效果。


使用方法

首先,确保您已经在项目中添加了 gx_floating_widget 插件。在 pubspec.yaml 文件中添加以下依赖:

dependencies:
  gx_floating_widget: ^版本号

然后运行 flutter pub get 安装插件。

接下来,使用 FloatingWidget 小部件来实现悬浮窗功能。基本用法如下:

import 'package:flutter/material.dart';
import 'package:gx_floating_widget/gx_floating_widget.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  // 创建一个浮动小部件
  final floatingWidgetKey = GlobalKey();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('悬浮窗示例'),
      ),
      body: Stack(
        children: [
          // 背景内容
          Center(
            child: Text(
              '这是一个悬浮窗示例页面',
              style: TextStyle(fontSize: 20),
            ),
          ),
          // 悬浮窗组件
          FloatingWidget(
            key: floatingWidgetKey, // 为浮动窗设置全局键
            children: [ // 可选:可以添加其他子部件
              Text(
                '我是悬浮窗的一部分',
                style: TextStyle(color: Colors.white),
              ),
            ],
            floatingChild: Container( // 您想要拖动的部件
              width: 100,
              height: 100,
              color: Colors.blue,
              alignment: Alignment.center,
              child: Text(
                '拖动我',
                style: TextStyle(color: Colors.white),
              ),
            ),
          ),
        ],
      ),
    );
  }
}

更多关于Flutter悬浮窗插件gx_floating_widget的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter悬浮窗插件gx_floating_widget的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


gx_floating_widget 是一个用于在 Flutter 应用中创建悬浮窗的插件。它允许你在应用界面上显示一个悬浮的窗口,用户可以通过拖动来移动它。这个插件非常适合用于显示一些常驻的快捷操作、通知、或者其他需要悬浮显示的内容。

安装

首先,你需要在 pubspec.yaml 文件中添加 gx_floating_widget 依赖:

dependencies:
  flutter:
    sdk: flutter
  gx_floating_widget: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来安装依赖。

基本使用

  1. 导入包

    在你的 Dart 文件中导入 gx_floating_widget

    import 'package:gx_floating_widget/gx_floating_widget.dart';
    
  2. 创建悬浮窗

    使用 GxFloatingWidget 来创建一个悬浮窗。你可以通过 child 参数来定义悬浮窗的内容。

    GxFloatingWidget(
      child: Container(
        width: 100,
        height: 100,
        color: Colors.blue,
        child: Center(
          child: Text(
            '悬浮窗',
            style: TextStyle(color: Colors.white),
          ),
        ),
      ),
    );
    
  3. 控制悬浮窗的显示与隐藏

    你可以通过 GxFloatingWidgetController 来控制悬浮窗的显示与隐藏。

    final _controller = GxFloatingWidgetController();
    
    // 显示悬浮窗
    _controller.show();
    
    // 隐藏悬浮窗
    _controller.hide();
    
  4. 设置悬浮窗的位置

    你可以通过 initialPosition 参数来设置悬浮窗的初始位置。

    GxFloatingWidget(
      initialPosition: Offset(100, 100),
      child: Container(
        width: 100,
        height: 100,
        color: Colors.blue,
        child: Center(
          child: Text(
            '悬浮窗',
            style: TextStyle(color: Colors.white),
          ),
        ),
      ),
    );
    
  5. 监听悬浮窗的拖动事件

    你可以通过 onDrag 回调来监听悬浮窗的拖动事件。

    GxFloatingWidget(
      onDrag: (Offset offset) {
        print('悬浮窗被拖动到: $offset');
      },
      child: Container(
        width: 100,
        height: 100,
        color: Colors.blue,
        child: Center(
          child: Text(
            '悬浮窗',
            style: TextStyle(color: Colors.white),
          ),
        ),
      ),
    );
    

完整示例

以下是一个完整的示例,展示了如何使用 gx_floating_widget 创建一个简单的悬浮窗:

import 'package:flutter/material.dart';
import 'package:gx_floating_widget/gx_floating_widget.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('悬浮窗示例'),
        ),
        body: Center(
          child: FloatingWidgetExample(),
        ),
      ),
    );
  }
}

class FloatingWidgetExample extends StatefulWidget {
  [@override](/user/override)
  _FloatingWidgetExampleState createState() => _FloatingWidgetExampleState();
}

class _FloatingWidgetExampleState extends State<FloatingWidgetExample> {
  final _controller = GxFloatingWidgetController();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: [
        ElevatedButton(
          onPressed: () {
            _controller.show();
          },
          child: Text('显示悬浮窗'),
        ),
        ElevatedButton(
          onPressed: () {
            _controller.hide();
          },
          child: Text('隐藏悬浮窗'),
        ),
        GxFloatingWidget(
          controller: _controller,
          initialPosition: Offset(100, 100),
          onDrag: (Offset offset) {
            print('悬浮窗被拖动到: $offset');
          },
          child: Container(
            width: 100,
            height: 100,
            color: Colors.blue,
            child: Center(
              child: Text(
                '悬浮窗',
                style: TextStyle(color: Colors.white),
              ),
            ),
          ),
        ),
      ],
    );
  }
}
回到顶部