Flutter指南针功能插件smooth_compass_plus的使用

发布于 1周前 作者 zlyuanteng 来自 Flutter

Flutter指南针功能插件smooth_compass_plus的使用

Smooth Compass Plus

Smooth Compass Plus 是一个针对最新 Flutter SDK 版本更新的自定义包,用于通过设备运动传感器找到方向,并且具有检测 Qiblah 的能力。

功能介绍

  • 广泛且易于使用
  • 预配置 UI 与可定制样式
  • 自定义构建器
  • 支持多语言
  • 平滑旋转
  • 度数值

使用方法

请参阅 示例代码

安装

pubspec.yaml 文件中添加以下行:

dependencies:
  smooth_compass_plus: latest-version

升级 Kotlin 版本到最新版本:

ext.kotlin_version: latest-version

基础设置

完整的示例可以在 这里 查看。

SmoothCompassWidget 需要提供 compassBuilder 函数,该函数返回:

  • degrees 是方向值。
  • turns 是磁罗盘旋转值。
  • compassAsset 默认的磁罗盘组件。

SmoothCompassWidget 可选参数 Height, Width, DurationcompassAsset

  • compassAsset 是可定制的磁罗盘组件。如果没有提供,则默认显示。

默认组件

SmoothCompassWidget(
  rotationSpeed: 200,
  height: 300,
  width: 300,
  // compassAsset: CustomWidget(),   你在这里提供自定义磁罗盘组件
  compassBuilder: (context, AsyncSnapshot<CompassModel>? compassData, Widget compassAsset) {
    return compassAsset;
  },
),

自定义组件

SmoothCompassWidget(
  rotationSpeed: 200,
  height: 300,
  width: 300,
  compassAsset: Container(
    height: 200,
    width: 200,
    decoration: BoxDecoration(
      shape: BoxShape.circle,
      image: DecorationImage(
        image: AssetImage("path for compass image"),
        fit: BoxFit.cover,
      ),
    ),
  ),
  compassBuilder: (context, AsyncSnapshot<CompassModel>? compassData, Widget compassAsset) {
    return compassAsset;
  },
),

自定义组件带 Qiblah

SmoothCompassWidget(
  rotationSpeed: 200,
  height: 300,
  isQiblahCompass: true,
  width: 300,
  compassBuilder: (context, AsyncSnapshot<CompassModel>? compassData, Widget compassAsset) {
    return AnimatedRotation(
      turnss: compassData?.data?.turns ?? 0 / 360,
      duration: const Duration(milliseconds: 400),
      child: SizedBox(
        height: 200,
        width: 200,
        child: Stack(
          children: [
            Positioned(
              top: 0,
              left: 0,
              right: 0,
              bottom: 0,
              child: Image.asset("Your Compass Asset Here",
                fit: BoxFit.fill),
            ),
            Positioned(
              top: 20,
              left: 0,
              right: 0,
              bottom: 20,
              child: AnimatedRotation(
                turns: (compassData?.data?.qiblahOffset ?? 0) / 360,
                duration: const Duration(milliseconds: 400),
                child: Image.asset("Your needle asset here",
                  fit: BoxFit.fitHeight),
              ),
            )
          ],
        ),
      ),
    );
  },
),

支持

如有任何问题或查询,请联系:aayman@turndigital.net


示例代码

import 'package:example/views/home_page.dart';
import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  // 这个 widget 是应用程序的根。
  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: HomePage(),
    );
  }
}

更多关于Flutter指南针功能插件smooth_compass_plus的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter指南针功能插件smooth_compass_plus的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中使用smooth_compass_plus插件来实现指南针功能的示例代码。这个插件提供了较为简单和直观的接口来访问设备的磁力计数据,从而可以实现指南针功能。

首先,确保你已经在pubspec.yaml文件中添加了smooth_compass_plus依赖:

dependencies:
  flutter:
    sdk: flutter
  smooth_compass_plus: ^最新版本号  # 请替换为实际可用的最新版本号

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

接下来,你可以在你的Flutter应用中按照以下步骤使用smooth_compass_plus插件:

  1. 导入插件

在你的Dart文件中导入插件:

import 'package:smooth_compass_plus/smooth_compass_plus.dart';
  1. 请求权限(如果需要的话):

在某些平台上,使用磁力计可能需要请求用户权限。你可以在AndroidManifest.xml中添加必要的权限声明(通常插件文档会说明是否需要这一步,但smooth_compass_plus一般已处理好这些权限)。

  1. 使用插件

下面是一个完整的示例,展示如何使用smooth_compass_plus来获取和显示指南针数据:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Compass Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: CompassPage(),
    );
  }
}

class CompassPage extends StatefulWidget {
  @override
  _CompassPageState createState() => _CompassPageState();
}

class _CompassPageState extends State<CompassPage> {
  double _heading = 0.0;
  bool _isCompassAvailable = false;

  @override
  void initState() {
    super.initState();
    _initializeCompass();
  }

  Future<void> _initializeCompass() async {
    bool isAvailable = await SmoothCompassPlus.isSensorAvailable();
    setState(() {
      _isCompassAvailable = isAvailable;
    });

    if (isAvailable) {
      SmoothCompassPlus.listen((data) {
        setState(() {
          _heading = data?.heading ?? 0.0;
        });
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Compass Demo'),
      ),
      body: Center(
        child: _isCompassAvailable
            ? Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  Text(
                    'Heading: ${_heading.toStringAsFixed(1)}°',
                    style: TextStyle(fontSize: 24),
                  ),
                  SizedBox(height: 20),
                  Transform.rotate(
                    angle: _heading * 3.141592653589793 / 180,
                    child: Icon(
                      Icons.arrow_forward,
                      size: 100,
                      color: Colors.blue,
                    ),
                  ),
                ],
              )
            : Text(
                'Compass sensor is not available on this device.',
                style: TextStyle(fontSize: 20, color: Colors.red),
              ),
      ),
    );
  }

  @override
  void dispose() {
    SmoothCompassPlus.stopListening();
    super.dispose();
  }
}

在这个示例中,我们做了以下几件事:

  • 导入smooth_compass_plus插件。
  • initState方法中检查指南针传感器是否可用。
  • 如果传感器可用,则开始监听指南针数据更新。
  • 在UI中显示当前的方向角度,并使用一个旋转的图标来表示指南针的方向。
  • dispose方法中停止监听指南针数据,以避免内存泄漏。

这个示例提供了一个基本的指南针功能实现,你可以根据需要进一步定制和扩展。

回到顶部