能否在Flutter的widget旁使用Flame的游戏widget?

3
简言之,由于Flame游戏是一个小部件,我想将该小部件添加到列小部件中。当我将其添加到runApp()中时,游戏可以运行,但是当我将小部件添加到列中时,它就不能运行了。为什么?
import 'package:flame/components.dart';
import 'package:flame/game.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

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

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

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Sprite examples')),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text(
                'This a sample text!',
                style: TextStyle(fontSize: 22),
              ),
              GameWidget(game: SpriteSample())       //<========== game widget
            ],
          ),
        ),
      ),
    );
  }
}

class SpriteSample extends FlameGame {
  @override
  Future<void>? onLoad() {
    add(SpriteOne());
    return super.onLoad();
  }
}

class SpriteOne extends PositionComponent {
  final Paint _paint = Paint()..color = Colors.red;

  @override
  Future<void>? onLoad() {
    return super.onLoad();
  }

  @override
  void render(Canvas canvas) {
    canvas.drawCircle(Offset(150, 150), 25, _paint);
  }

  @override
  void update(double dt) {
    super.update(dt);
  }
}
1个回答

3

您需要将其包装在一个 Expanded widget 中(或者其他可以给它一个大小的 widget,例如 SizedBox),否则由于无限大小约束,GameWidget 将无法布局:

class _MyAppState extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Sprite examples')),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text(
                'This a sample text!',
                style: TextStyle(fontSize: 22),
              ),
              Expanded(
                child: GameWidget(game: SpriteSample()),
              )
            ],
          ),
        ),
      ),
    );
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接