微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 setState 无法重述小部件类

如何解决为什么 setState 无法重述小部件类

我已经编写了纸牌游戏的代码,试图使用扑克牌库显示卡片,并且在小部件类中创建了显示玩家手牌,它可以在静态阶段以良好的顺序显示卡片。但是,当我尝试发牌并将其他牌添加到列表(即手牌)和 setState 时,并没有相应地更新筛选。有人可以帮忙吗?

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key,this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  Games _game = Games();
  int _counter = 0;
  List<Kar> desk = [];
  List<Kar> remainingDesk = [];
  Kar _drawnCard;
  double _avgCounter = 0;
  ShapeBorder shape = RoundedRectangleBorder(
      borderRadius: BorderRadius.circular(8),side: BorderSide(color: Colors.black,width: 1));
  List<Kar> _playerA = [
    Kar(suit: 1,rank: 14),Kar(suit: 1,rank: 11),];
  List<Kar> _dealer = [
    Kar(suit: 2,rank: 12),Kar(suit: 3,rank: 13),];
  List<Kar> _blackJack = [
    Kar(suit: 1,];
  double _cardSize = 0;
  bool _selected = false;
  bool _second = false;
  bool _playerTurn = false;
  bool _dealerTurn = false;
  bool _playerTurnEnd = false;
  bool _dealerTurnEnd = false;
  int _handscore = 0;

  @override
  void initState() {
    Games _games = Games();
    setState(() {
      desk = createDesk();
      remainingDesk = List.from(desk);
    });
    _incrementCounter();
    super.initState();
  }

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),),body: Padding(
        padding: const EdgeInsets.all(8.0),child: Container(
          width: 300,height: 580,child: Stack(
            children: [
              PlayerHand(player: false,hand: _playerA),Text('score: ' + _handscore.toString()),],floatingActionButton: FloatingActionButton(
          onpressed: () {
            Kar _drawnCard = drawCardfromDesk(remainingDesk);
              setState(() {
                _handscore += _drawnCard.rank;
                _playerA.add(_drawnCard);

              });
            });
          },tooltip: 'Increment',child: Icon(Icons
              .add)),// This trailing comma makes auto-formatting nicer for build methods.
    );
  }

  List<Kar> createDesk() {
    List<Kar> desk = [];
    for (int _rank = 2; _rank < 15; _rank++) {
      for (int _suit = 1; _suit < 5; _suit++) {
        desk.add(Kar(suit: _suit,rank: _rank));
      }
      ;
    }
    ;
    return desk;
  }

  Kar drawCardfromDesk(List<Kar> desk) {
    Kar _dealCard;
    var rng = new Random();
    _dealCard = desk[rng.nextInt(desk.length)];
    desk.remove(_dealCard);
    return _dealCard;
  }
}


import 'dart:convert';

import 'dart:io';

import 'package:blackjack/main.dart';
import 'package:Flutter/material.dart';
import 'package:playing_cards/playing_cards.dart';


class PlayerHand extends StatefulWidget {
  List<Kar> hand;
  bool player= false;
  BuildContext context;


  PlayerHand({
    @required this.hand,@required this.player
  });

  @override
  _PlayerHandState createState() => _PlayerHandState();
}

class _PlayerHandState extends State<PlayerHand> {
  int _handLength=0;
  bool _player= false;
  ShapeBorder shape = RoundedRectangleBorder(
      borderRadius: BorderRadius.circular(8),width: 1));




@override
  void initState() {
    //var authBloc = Provider.of<AuthBloc>(context);
    // Todo: implement initState
    setState(() {
      _handLength = widget.hand.length;
      _player = widget.player;
    });
    

    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    //final authBloc = Provider.of<AuthBloc>(context);
    

    return _handLength==0
    ?Container()
    : _handLength ==1
    ? Container(
        child: PlayingCardView(
          card: PlayingCard(
              suitsName[widget.hand[0].suit],cardValue[widget.hand[0].rank]),showBack: false,shape: shape,)
    : _handLength ==2
    ? Container(
      child:Container(
                  height: 180,width: 380,// duration: Duration(seconds: 1),child: FlatCardFan(children: [
                    PlayingCardView(
                        card: PlayingCard(suitsName[widget.hand[0].suit],showBack: _player?true:false,elevation: 3.0,shape: shape),PlayingCardView(
                        card: PlayingCard(suitsName[widget.hand[1].suit],cardValue[widget.hand[1].rank]),//showBack: true,]))
    )
    : _handLength ==3
    ? Container(
      child:Container(
                  height: 180,//duration: Duration(seconds: 1),PlayingCardView(
                        card: PlayingCard(suitsName[widget.hand[2].suit],cardValue[widget.hand[2].rank]),]))
    ): _handLength ==4
    ? Container(
      child:Container(
                  height: 180,width: 300,PlayingCardView(
                        card: PlayingCard(suitsName[widget.hand[3].suit],cardValue[widget.hand[3].rank]),]))
    ): _handLength ==5
    ? Container(
      child:AnimatedContainer(
                  height: 180,duration: Duration(seconds: 1),PlayingCardView(
                        card: PlayingCard(suitsName[widget.hand[4].suit],cardValue[widget.hand[4].rank]),]))
    ) : _handLength ==6
    ?Container(
      child:AnimatedContainer(
                  height: 180,PlayingCardView(
                        card: PlayingCard(suitsName[widget.hand[5].suit],cardValue[widget.hand[5].rank]),]))
    )
    : Container(
      child:AnimatedContainer(
                  height: 180,PlayingCardView(
                        card: PlayingCard(suitsName[widget.hand[6].suit],cardValue[widget.hand[6].rank]),])));

  }


}

解决方法

动态构建您的小部件:

FlatCardFan( 
           children: List.generate(widget.hand.length,(index) =>  
                PlayingCardView(
                    card: PlayingCard(suitsName[widget.hand[index].suit],cardValue[widget.hand[0].rank]),showBack: _player?true:false,elevation: 3.0,shape: shape
                   ),),

告诉我这是否适合您。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?