ミッドランドブログ

長めのお知らせ、紹介記事を掲載します

【Flutter】Flutterで作成したアプリをSteamでリリースする #2 実績作成編

Steamworks パッケージを利用してFlutterアプリケーションをSteamにリリースします

※ readmeに’Steamworks SDK wrapper written in a darty way to be used in dart projects’の記述がありました。念のためご注意ください

 

midland.hatenadiary.jp

midland.hatenadiary.jp

 

 

#2 実績作成編

 

1. steamの実績を作成します 

実績の作成はこちらを参考に作成しています

ktstg.blog.shinobi.jp

 

2.  steamworksをインポートします

import "package:steamworks/steamworks.dart";

 

3.  utf8Pointer作成用の関数を準備します

import 'dart:ffi';
import 'dart:typed_data';
import 'package:ffi/ffi.dart';


Pointer convertUint8ListToPointerUtf8(Uint8List uint8List) {
  // Utf8にはnullで終端するためのバイトが必要です。
  final Pointer utf8Pointer =
      calloc.allocate(uint8List.length + 1).cast();

  // Uint8Listの内容をutf8Pointerにコピーします。
  final Uint8List nativeString =
      utf8Pointer.cast().asTypedList(uint8List.length + 1);
  nativeString.setAll(0, uint8List);
  nativeString[uint8List.length] = 0; // null-terminate the string

  return utf8Pointer;
}

 

4.  実績を解除する


Future _AchievSteam() async { String input = '[API名の文字列]'; // 文字列をUTF-8バイトリストに変換 Uint8List uint8List = Uint8List.fromList(utf8.encode(input)); Uint8List data = Uint8List.fromList(uint8List); Pointer utf8Pointer = convertUint8ListToPointerUtf8(data); try { SteamClient steamClient = SteamClient.instance; CSteamId steamId = steamClient.steamUser.getSteamId(); print("SteamId: $steamId"); SteamApiCall callId = steamClient.steamUserStats.requestUserStats(steamId); print("SteamApiCall first: $callId"); await steamClient.steamUserStats.setAchievement(utf8Pointer); await steamClient.steamUserStats.storeStats(); } catch (e) { print("Error : $e"); calloc.free(utf8Pointer); return ; } calloc.free(utf8Pointer); return ; }

 

steamUserはISteamUserStatsのラッパーのようです。他の機能を使用したい場合はこちらで仕様を確認できます

partner.steamgames.com

 

 

 

Flutterを利用したSteamのアプリです

作成した画像はゲーム等の素材としてもご利用いただけます!

store.steampowered.com