Flutter空间交互插件spacejam的使用

Flutter空间交互插件spacejam的使用

简介

SpaceJam 是一个用于 Flutter 的 UI 工具包,提供了丰富的组件来帮助开发者快速构建具有现代感的应用界面。通过该插件,您可以轻松实现复杂的空间交互效果,并且它还支持无障碍功能。

特性

以下是 SpaceJam 提供的主要组件及其功能:

SpaceJamAppBar

  • 提供带有搜索按钮的导航栏。
  • 示例图SpaceJamAppBar

SpaceJamAppBarAction

  • 包含动作图标、点击事件以及工具提示。
  • 示例:如上图所示的搜索图标。

SpaceJamButton

  • 按钮可以在 SpaceJamContainer 内外使用。
  • 示例图
    • 外部:SpaceJamButtonOutside
    • 内部:SpaceJamButtonInside

SpaceJamContainer

  • 提供一个容器来包裹其他子部件。
  • 示例图SpaceJamContainer

SpaceJamImagePage

  • 用于展示大尺寸图片。
  • 示例图SpaceJamImagePage

SpaceJamTextStyles

  • 根据主题自动生成合适的文本样式。

SpaceJamTheme

  • 提供对主题(如 TextTheme)的访问。

SpaceJamPage

  • 快速创建包含 SpaceJam 组件的页面。

SpaceJamCollection

  • 提供类似列表视图的效果。
  • 示例图SpaceJamCollection

SpaceJamCollectionItem

  • 集合项,可以配置背景颜色、上下文等信息。
  • 示例图SpaceJamCollectionItem

SpaceJamImageBox

  • 图片框组件,支持内外嵌套。
  • 示例图
    • 外部:SpaceJamImageBoxOutside
    • 内部:SpaceJamImageBoxInside

使用方法

添加依赖

pubspec.yaml 文件中添加以下依赖:

dependencies:
  spacejam: ^1.1.7

然后运行以下命令以获取依赖项:

flutter pub get

完整示例代码

以下是一个完整的示例代码,展示了如何使用 SpaceJam 插件来构建一个简单的应用页面。

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

// SpaceJam
import 'package:spacejam/spacejam.dart';

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

/// 主应用程序类
class Example extends StatelessWidget {
  /// 构造函数
  const Example({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) => MaterialApp(
        title: "SpaceJam example",
        theme: ThemeData(
          primarySwatch: Colors.blue,
          textTheme: SpaceJamThemeData.textTheme(),
        ),
        debugShowCheckedModeBanner: false,
        home: const HomePage(),
      );
}

/// 主页状态类
class HomePage extends StatefulWidget {
  /// 构造函数
  const HomePage({Key? key}) : super(key: key);

  [@override](/user/override)
  HomePageState createState() => HomePageState();
}

/// 主页状态类实现
class HomePageState extends State<HomePage> {
  [@override](/user/override)
  Widget build(BuildContext context) => SpaceJamPage(
        locale: Locale("en"), // 设置语言为英语
        title: "SpaceJam",     // 页面标题
        appBarRightAction: const SpaceJamAppBarAction( // 右侧导航栏动作
          Icons.search,
          semanticLabel: "Search between elements.", // 辅助描述
        ),
        children: [
          SpaceJamContainer( // 容器组件
            title: "SpaceJam", // 容器标题
            backgroundColor: Colors.blue, // 背景颜色
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                Padding(
                  padding: EdgeInsets.symmetric(
                    horizontal: (MediaQuery.of(context).size.width +
                                MediaQuery.of(context).size.height) /
                            2 *
                            .02,
                  ),
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      Text(
                        "Title",
                        style: SpaceJamTextStyles.title(context), // 标题样式
                      ),
                      Text(
                        "Subtitle",
                        style: SpaceJamTextStyles.titleSmall(context), // 小标题样式
                      ),
                      Text(
                        "Headline",
                        style: SpaceJamTextStyles.headline(context), // 主标题样式
                      ),
                      Text(
                        "Subheading",
                        style: SpaceJamTextStyles.headlineSmall(context), // 小主标题样式
                      ),
                      Text(
                        "Body",
                        style: SpaceJamTextStyles.bodyMedium(
                          context,
                          color: Colors.black, // 正文样式
                        ),
                      ),
                      Text(
                        "Caption",
                        style: SpaceJamTextStyles.bodySmall(
                          context,
                          color: Colors.black, // 副本样式
                        ),
                      ),
                    ],
                  ),
                ),
                SizedBox(height: (MediaQuery.of(context).size.width +
                            MediaQuery.of(context).size.height) /
                        2 *
                        .02),
                SpaceJamImageBox( // 图片框组件
                  Image.network(
                    "https://assets.4cdn.hu/kraken/6pI26jBO69hwv9c6s.jpeg",
                  ),
                  semanticLabel: "Some gibbons having fun.", // 辅助描述
                ),
                SizedBox(height: (MediaQuery.of(context).size.width +
                            MediaQuery.of(context).size.height) /
                        2 *
                        .02),
                SpaceJamButton( // 按钮组件
                  valueFontSize: 32,
                  titleFontSize: 24,
                  title: "Test",
                  value: "ImagePage",
                  backgroundColor: Colors.white24,
                  action: () {
                    Navigator.push(
                      context,
                      MaterialPageRoute(
                        builder: (context) => SpaceJamImagePage(
                          Image.network(
                            "https://assets.4cdn.hu/kraken/6pI26jBO69hwv9c6s.jpeg",
                          ),
                          imageURL:
                              "https://assets.4cdn.hu/kraken/6pI26jBO69hwv9c6s.jpeg",
                          semanticLabel: "Some gibbons having fun.",
                        ),
                      ),
                    );
                  },
                  semanticLabel: "Click to open the SpaceJamImagePage.",
                ),
              ],
            ),
          ),
          SpaceJamButton(
            valueFontSize: 32,
            titleFontSize: 24,
            title: "Test",
            value: "ImagePage",
            backgroundColor: Colors.blue,
            action: () {
              Navigator.push(
                context,
                MaterialPageRoute(
                  builder: (context) => SpaceJamImagePage(
                    Image.network(
                      "https://assets.4cdn.hu/kraken/6pI26jBO69hwv9c6s.jpeg",
                    ),
                    imageURL:
                        "https://assets.4cdn.hu/kraken/6pI26jBO69hwv9c6s.jpeg",
                    semanticLabel: "Some gibbons having fun.",
                  ),
                ),
              );
            },
            semanticLabel: "Click to open the SpaceJamImagePage.",
          ),
          SpaceJamImageBox(
            Image.network(
              "https://assets.4cdn.hu/kraken/6pI26jBO69hwv9c6s.jpeg",
            ),
            isInteractive: false,
            semanticLabel: "Some gibbons having fun.",
          ),
          SpaceJamImageBox(
            Image.network(
              "https://assets.4cdn.hu/kraken/6pI26jBO69hwv9c6s.jpeg",
            ),
            isInteractive: false,
            autoHeight: true,
            semanticLabel: "Some gibbons having fun.",
          ),
          SpaceJamCollection(
            title: "Collection",
            items: [
              SpaceJamCollectionItem(
                backgroundColor: Colors.blue,
                upperCaption: "1st",
                upperValue: "Item",
                lowerCaption: "With",
                lowerValue: "Action",
                onTap: () {},
                semanticLabel: "First item. Click to perform action.",
              ),
              const SpaceJamCollectionItem(
                backgroundColor: Colors.blue,
                upperValue: "Item",
                lowerCaption: "Without",
                lowerValue: "Action",
                semanticLabel: "This text is customizable, use the "
                    "semanticLabel property if available.",
              ),
              const SpaceJamCollectionItem(
                backgroundColor: Colors.blue,
                upperCaption: "3rd",
                upperValue: "Item",
                lowerCaption: "Without",
                lowerValue: "Action",
                semanticLabel: "Make your apps available to "
                    "people with disabilities.",
              ),
              SpaceJamCollectionItem(
                backgroundColor: Colors.blue,
                onTap: () {},
                upperCaption: "4th",
                upperValue: "Item",
                lowerCaption: "With",
                lowerValue: "Action",
                semanticLabel: "Last item. Click to perform action.",
              ),
            ],
          ),
        ],
      );
}

更多关于Flutter空间交互插件spacejam的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter空间交互插件spacejam的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


spacejam 是一个用于 Flutter 的空间交互插件,它允许开发者在应用中实现与空间相关的交互效果,比如基于设备的位置、方向或运动来调整 UI 或触发事件。以下是使用 spacejam 插件的基本步骤和示例代码。

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 spacejam 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  spacejam: ^0.1.0 # 根据实际版本号调整

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

2. 导入插件

在需要使用 spacejam 的 Dart 文件中导入插件:

import 'package:spacejam/spacejam.dart';

3. 使用 SpaceJam

spacejam 插件提供了一些工具来监听设备的位置、方向或运动。以下是一个简单的示例,展示如何使用 spacejam 来监听设备的方向变化并更新 UI。

示例代码

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

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

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

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

class _SpaceJamDemoState extends State<SpaceJamDemo> {
  double _pitch = 0.0;
  double _roll = 0.0;
  double _yaw = 0.0;

  [@override](/user/override)
  void initState() {
    super.initState();
    _startListening();
  }

  void _startListening() {
    SpaceJam.onOrientationChange.listen((OrientationEvent event) {
      setState(() {
        _pitch = event.pitch;
        _roll = event.roll;
        _yaw = event.yaw;
      });
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('SpaceJam Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text('Pitch: $_pitch'),
            Text('Roll: $_roll'),
            Text('Yaw: $_yaw'),
          ],
        ),
      ),
    );
  }
}
回到顶部