Flutter游戏互动插件gameball的使用

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

Flutter游戏互动插件gameball的使用

Gameball的Flutter SDK允许你在应用中展示玩家个人资料、跟踪玩家事件、集成推荐系统并显示Gameball的内置推送通知。

功能

Gameball的Flutter SDK允许你在应用中展示玩家个人资料、跟踪玩家事件、集成推荐系统并显示Gameball的内置推送通知。

开始使用

以下是开始在你的应用中安装Gameball Flutter SDK的步骤:

使用方法

以下是一些简短且有用的示例代码供用户参考。更长的示例代码可以在/example文件夹中找到。

const like = 'sample';

额外信息

更多详细信息请访问:Gameball开发者文档


示例代码

示例代码:example/lib/main.dart

import 'dart:convert';

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

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Gameball SDK',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter Gameball SDK Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});
  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

  // 仅用于测试
  TextEditingController textFieldController1 = TextEditingController();
  TextEditingController textFieldController2 = TextEditingController();
  TextEditingController textFieldController3 = TextEditingController();
  TextEditingController textFieldController4 = TextEditingController();
  TextEditingController textFieldController5 = TextEditingController();
  TextEditingController textFieldController6 = TextEditingController();

  String dropdownValue = 'en';
  bool isButtonEnabled = true;
  String? apiKey;
  String? playerUniqueId;
  String? lang;

  [@override](/user/override)
  void initState() {
    super.initState();
    textFieldController1.text = 'df07d27a8f6f440e8a7f44195fc6c5e6'; // 示例API密钥
    textFieldController2.text = 'MartinSorsok'; // 示例玩家唯一ID
    textFieldController3.text = '''
{
  "place_order": {
    "total_amount": "100",
    "category": [
      "electronics",
      "cosmetics"
    ]
  },
  "review": {}
}'''; // 示例事件数据

    textFieldController4.text = '''
{
  "playerUniqueId": "${textFieldController2.text}",
  "mobile": "+1234567",
  "email": "jon.snow@example.com",
  "playerAttributes": {
    "displayName": "Jon Snow"
  },
  "referrerCode": null,
  "levelOrder": null
}'''; // 示例玩家数据

    textFieldController5.text = ''; // 平台字段
    textFieldController6.text = ''; // 商店字段
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: SingleChildScrollView(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Padding(
                padding: const EdgeInsets.only(left: 20.0, right: 20),
                child: TextField(
                  controller: textFieldController1,
                  onChanged: (value) => checkInputs(),
                  decoration: InputDecoration(
                    labelText: 'API Key',
                  ),
                ),
              ),
              Padding(
                padding: const EdgeInsets.only(left: 20.0, right: 20),
                child: TextField(
                  controller: textFieldController2,
                  onChanged: (value) => checkInputs(),
                  decoration: InputDecoration(
                    labelText: 'Player Unique ID',
                  ),
                ),
              ),
              Padding(
                padding: const EdgeInsets.only(left: 20.0, right: 20),
                child: TextField(
                  controller: textFieldController5,
                  onChanged: (value) => checkInputs(),
                  decoration: InputDecoration(
                    labelText: 'Platform',
                  ),
                ),
              ),
              Padding(
                padding: const EdgeInsets.only(left: 20.0, right: 20),
                child: TextField(
                  controller: textFieldController6,
                  onChanged: (value) => checkInputs(),
                  decoration: InputDecoration(
                    labelText: 'Shop',
                  ),
                ),
              ),
              Row(
                mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                children: [
                  Text('Language'),
                  DropdownButton<String>(
                    value: dropdownValue,
                    onChanged: (String? newValue) {
                      setState(() {
                        dropdownValue = newValue!;
                      });
                    },
                    items: ['en', 'ar']
                        .map<DropdownMenuItem<String>>((String value) {
                      return DropdownMenuItem<String>(
                        value: value,
                        child: Text(value),
                      );
                    }).toList(),
                  ),
                ],
              ),
              ElevatedButton(
                onPressed: isButtonEnabled
                    ? () {
                  apiKey = textFieldController1.text;
                  playerUniqueId = textFieldController2.text;
                  lang = dropdownValue;
                  final String playerDataString = textFieldController4.text;

                  final Map<String, dynamic> playerData =
                      jsonDecode(playerDataString);
                  Gameball gameball = Gameball(
                    apiKey: apiKey != null ? apiKey! : '',
                    playerUniqueId: playerUniqueId!,
                    lang: lang,
                    playerAttributes: playerData,
                    platform: textFieldController5.text,
                    shop: textFieldController6.text,
                  );
                  gameball.openGameballView(context);
                }
                    : null,
                child: Text('打开GameBall'),
              ),
              Padding(
                padding: const EdgeInsets.only(left: 20.0, right: 20),
                child: Container(
                  height: 300, // 调整高度
                  child: TextField(
                    controller: textFieldController3,
                    decoration: InputDecoration(
                      labelText: '事件数据',
                    ),
                    maxLines: null, // 允许多行输入
                  ),
                ),
              ),
              ElevatedButton(
                onPressed: () {
                  sendEvent("metaData");
                },
                child: Text('发送GameBall事件'),
              ),
              Padding(
                padding: const EdgeInsets.only(left: 20.0, right: 20),
                child: Container(
                  height: 300, // 调整高度
                  child: TextField(
                    controller: textFieldController4,
                    decoration: InputDecoration(
                      labelText: '玩家数据',
                    ),
                    maxLines: null, // 允许多行输入
                  ),
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }

  void checkInputs() {
    setState(() {
      isButtonEnabled = true;
      // isButtonEnabled = textFieldController1.text.isNotEmpty &&
      //     textFieldController2.text.isNotEmpty;
    });
  }

  void sendEvent(metaData) {
    Gameball gameball = Gameball(
      apiKey: textFieldController1.text,
      playerUniqueId: textFieldController2.text,
      lang: lang,
    );
    final String eventDataString = textFieldController3.text;

    final Map<String, dynamic> eventData = jsonDecode(eventDataString);
    gameball.sendEvent(eventData).then((response) {
      print(response); // 成功
    }).catchError((error) {
      print(error); // 错误
    });
  }
}

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

1 回复

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


Gameball 是一个用于 Flutter 的插件,它可以帮助开发者轻松地在应用中集成游戏化元素,如积分、任务、挑战等,以增强用户参与度和互动性。以下是使用 Gameball 插件的基本步骤和示例代码。

1. 安装 Gameball 插件

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

dependencies:
  flutter:
    sdk: flutter
  gameball: ^1.0.0  # 请检查最新版本

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

2. 初始化 Gameball

在你的 Flutter 应用中初始化 Gameball。通常你可以在 main.dart 文件中进行初始化:

import 'package:gameball/gameball.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化 Gameball
  await Gameball.initialize(
    apiKey: 'YOUR_API_KEY',
    playerUniqueId: 'PLAYER_UNIQUE_ID',
    lang: 'en', // 语言设置,可选
  );

  runApp(MyApp());
}
  • YOUR_API_KEY: 从 Gameball 后台获取的 API 密钥。
  • PLAYER_UNIQUE_ID: 用户的唯一标识符,通常是你应用中的用户 ID。

3. 显示游戏化组件

Gameball 提供了多种组件,如积分显示、任务、挑战等。你可以将这些组件嵌入到你的应用中。

显示用户积分

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

class PointsWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return FutureBuilder<int>(
      future: Gameball.getPlayerPoints(),
      builder: (context, snapshot) {
        if (snapshot.connectionState == ConnectionState.waiting) {
          return CircularProgressIndicator();
        } else if (snapshot.hasError) {
          return Text('Error: ${snapshot.error}');
        } else {
          return Text('Points: ${snapshot.data}');
        }
      },
    );
  }
}

显示任务列表

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

class MissionsWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return FutureBuilder<List<Mission>>(
      future: Gameball.getMissions(),
      builder: (context, snapshot) {
        if (snapshot.connectionState == ConnectionState.waiting) {
          return CircularProgressIndicator();
        } else if (snapshot.hasError) {
          return Text('Error: ${snapshot.error}');
        } else {
          return ListView.builder(
            itemCount: snapshot.data.length,
            itemBuilder: (context, index) {
              Mission mission = snapshot.data[index];
              return ListTile(
                title: Text(mission.title),
                subtitle: Text(mission.description),
                trailing: Text('${mission.points} points'),
              );
            },
          );
        }
      },
    );
  }
}

4. 处理用户行为

你可以通过 Gameball 插件来记录用户的行为,例如完成任务、获得积分等。

import 'package:gameball/gameball.dart';

void completeMission(String missionId) async {
  await Gameball.completeMission(missionId);
}

void earnPoints(int points) async {
  await Gameball.earnPoints(points);
}

5. 处理回调

Gameball 还提供了回调功能,以便在用户完成某些操作时执行特定的逻辑。

Gameball.onMissionCompleted.listen((mission) {
  print('Mission completed: ${mission.title}');
});

Gameball.onPointsEarned.listen((points) {
  print('Points earned: $points');
});

6. 其他功能

Gameball 还提供了其他功能,如显示排行榜、挑战等。你可以根据需要在应用中集成这些功能。

7. 调试和测试

在开发过程中,你可以使用 Gameball 提供的调试工具来测试和验证你的集成。

Gameball.setDebugMode(true);
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!