swf_player 0.1.2 copy "swf_player: ^0.1.2" to clipboard
swf_player: ^0.1.2 copied to clipboard

Flutter widgets for playing SWF4 / Flash Lite 1.x content: stage renderer, player controller, and a feature-phone style virtual keypad.

example/lib/main.dart

import 'dart:async';
import 'dart:math' as math;

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

import 'demo_swf.dart';

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

/// swf_player公開API(SwfPlayerController/SwfPlayerView/KeypadWidget)の
/// 最小サンプルアプリ。デモコンテンツは著作物を使わず[buildDemoSwf]で
/// 実行時に自己完結生成する。
class SwfPlayerExampleApp extends StatelessWidget {
  const SwfPlayerExampleApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'swf_player example',
      theme: ThemeData(colorSchemeSeed: Colors.indigo),
      home: const PlayerPage(),
    );
  }
}

class PlayerPage extends StatefulWidget {
  const PlayerPage({super.key});

  @override
  State<PlayerPage> createState() => _PlayerPageState();
}

class _PlayerPageState extends State<PlayerPage> {
  final _controller = SwfPlayerController();
  final _scaffoldMessengerKey = GlobalKey<ScaffoldMessengerState>();

  @override
  void initState() {
    super.initState();
    _controller.onRootLabel = _handleRootLabel;
    unawaited(_controller.load(buildDemoSwf()));
  }

  void _handleRootLabel(String label) {
    if (label != 'over') return;
    _scaffoldMessengerKey.currentState?.showSnackBar(
      const SnackBar(content: Text('Reached the "over" label')),
    );
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return ScaffoldMessenger(
      key: _scaffoldMessengerKey,
      child: Scaffold(
        appBar: AppBar(title: const Text('swf_player example')),
        body: SafeArea(
          // 画面高をステージ(正方形)とキーパッドで分け合い、キーパッドは
          // 残り領域へ等比縮小で収める(小型・横向きでもoverflowしない)
          child: LayoutBuilder(
            builder: (context, constraints) {
              final stageSide = math.min(
                constraints.maxWidth - 32,
                constraints.maxHeight / 2,
              );
              return Column(
                children: [
                  Padding(
                    padding: const EdgeInsets.all(16),
                    child: SizedBox(
                      width: stageSide,
                      height: stageSide,
                      child: SwfPlayerView(controller: _controller),
                    ),
                  ),
                  Expanded(
                    child: Padding(
                      padding: const EdgeInsets.fromLTRB(16, 0, 16, 16),
                      child: FittedBox(
                        fit: BoxFit.contain,
                        child: SizedBox(
                          width: 320,
                          child: KeypadWidget(onKey: _controller.dispatchKey),
                        ),
                      ),
                    ),
                  ),
                ],
              );
            },
          ),
        ),
      ),
    );
  }
}
1
likes
160
points
202
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

Flutter widgets for playing SWF4 / Flash Lite 1.x content: stage renderer, player controller, and a feature-phone style virtual keypad.

Repository (GitHub)
View/report issues

Topics

#swf #flash #flash-lite #player #retro-gaming

License

MIT (license)

Dependencies

archive, flutter, swf_core

More

Packages that depend on swf_player