moringaman
4/28/2019 - 9:05 AM

Dart Cards Class Example

void main() {
  var deck = new Deck();
//   deck.shuffle();
//   print(deck);
//   print('============');
//   print(deck.deal(5));
//   print('============');
//   print(deck);
  deck.removeCard('Diamonds', 'Ace');
//   print('===========');
  print(deck);
}

class Deck {
  List<Card> cards = [];

  Deck() {
    var ranks = ['Ace', 'Two', 'Three', 'Four', 'Five'];
    var suits = ['Diamonds', 'Clubs', 'Spades', 'Hearts'];

    for (var mySuit in suits) {
      for (var rank in ranks) {
        var card = new Card(
         suit: mySuit,
         rank: rank
        );
        cards.add(card);
      }
    }
  }

  toString() {
    return cards.toString();
  }

  shuffle() {
    cards.shuffle();
  }
  
  cardsWithSuit(String suit) {
  return cards.where((card) => card.suit == suit
   );
  }
  
  removeCard(String suit, String rank) {
     cards.removeWhere((card) => 
       card.suit == suit && card.rank == rank
    );
  }
  
  deal(int handSize){
    var hand = cards.sublist(0, handSize);
    cards = cards.sublist(handSize);
    
    return hand;
  }
}

class Card {
  String suit;
  String rank;
  
  Card({this.suit, this.rank});

  toString() {
    return '$rank of $suit';
  }
}