Wednesday, April 3, 2019

Dart Stream



import 'dart:async';

class  Cake{}
class Order{
  String type;
  Order(this.type);
}

main() async {

  final streamController = StreamController();
  final order = new Order('chocolate');

  final baker = new StreamTransformer.fromHandlers(
  handleData: (cakeType, sink){
    if (cakeType == 'chocolate'){
      sink.add(new Cake());
    }else{
     sink.addError("I can't bake that Cake!!!") ;
    }
  }
  );

  streamController.sink.add(order);

  streamController.stream.map((order) => order.type).
    transform(baker)
    .listen(
    (cake) => print('Here your cake $cake'),
    onError: (err)=> print(err)
           );
}

Monday, April 1, 2019

Json to Model with type



class ImageModel{

  String id;
  String url;
  String title;

  ImageModel(this.id, this.url, this.title);

  ImageModel.fromJson(Map<String, dynamic> parsedJson){
    id = parsedJson['id'];
    url = parsedJson['url'];
    title = parsedJson['title'];
  }
  
}

Json to Model



TYPE-1

import 'dart:convert';

void main() {

  var rawJson = '{"url": "http:blah.jpg","id":1}';

  var parsedJson = json.decode(rawJson);

  var imageModel = new ImageModel(parsedJson['id'], parsedJson['url']);

  print(imageModel.id);
  print(imageModel.url);

}


class ImageModel{

  int id;
  String url;

  ImageModel(this.id, this.url);

}
=================
DISADVANTAGE - If you have  10 element in constructor is not good as optimized cding part.
  var imageModel = new ImageModel(parsedJson['id'], parsedJson['url']);

so Now create in effective way in TYPE-2
=================



TYPE-2
=========================

import 'dart:convert';

void main() {

  var rawJson = '{"url": "http:blah.jpg","id":1}';

  var parsedJson = json.decode(rawJson);

  var imageModel = new ImageModel.fromJson(parsedJson);

  print(imageModel.id);
  print(imageModel.url);

}


class ImageModel{

  int id;
  String url;

  ImageModel(this.id, this.url);

  ImageModel.fromJson(parsedJson){
    id = parsedJson['id'];
    url = parsedJson['url'];
  }

}

=========================



You can also represent this  -

ImageModel.fromJson(parsedJson){
  id = parsedJson['id'];
  url = parsedJson['url'];
  title = parsedJson['title'];
}


with (both are similar)-

ImageModel.fromJson(parsedJson) :
  id = parsedJson['id'],
  url = parsedJson['url'],
  title = parsedJson['title'];






Generic Class



void main() {
  var slot = new Slot<Circle>();

  slot.insert(new Circle());
}

class Circle{
 
}

class Square{
 
}

class Slot<HFGVXV>{

  insert(HFGVXV circle){
    print("INSERT called");
  }
}

Thursday, March 28, 2019

Flutter: Calling from Separate file, AppBar and FloatingActionButton




main.dart
===================================

import 'package:flutter/material.dart';
import 'src/app.dart';

void main(){
 
  var app = new App();

  runApp(app);

}

===================================



app.dart
===================================

//  Import flutter Helper Library
import 'package:flutter/material.dart';

//Create a class that will be our custom widget
//This class must extend the 'StatelessWidget' base class

class App extends StatelessWidget{

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return MaterialApp(

        home: Scaffold(

          appBar: AppBar(
            title: Text("Let's see Image"),
          ),

          floatingActionButton: FloatingActionButton(

            child: Icon(Icons.add),

            onPressed: (){
              print('Hi Floating Action Button');
            },
          ),
        )
    );
  }

}

//Must define the buid method that returns
//the widget that *this* widget will show


===================================

Flutter: AppBar and FloatingActionButton in main function




import 'package:flutter/material.dart';

void main(){
  
  var app = MaterialApp(
    
    home: Scaffold(

      appBar: AppBar(
        title: Text("Let's see Image"),
      ),

      floatingActionButton: FloatingActionButton(

        child: Icon(Icons.add),

        onPressed: (){
          print('Hi Floating Action Button');
        },

      ),


    )

  );



  runApp(app);

}

First and Basic Flutter app




// I need to import a helper library// from flutter to get content on screen
import 'package:flutter/material.dart';

// Define 'main' function to run when our app starts
void main(){
  
  var app = MaterialApp(
    // Create new text widget to show some text    // on the screen    home: Text('Hi, There!'),
    
  );

//  Take that widget and get it on the screen  runApp(app);

}

Wednesday, March 27, 2019

Udemy-5: Named Parameter



1. If we change the sequence of data passing the value also going to change so use named args to pass the data


void main() {
  var deck = new Deck();

  print(deck);
//   print('');
//   print(deck.deal(5));
//   print('');
//   print(deck);
 
//   deck.removeCards('ACE', 'DIAMONDS');
  print('');
  print(deck);
}

class Deck {
  List<Card> cards = [];
  Deck() {
   
    var ranks = ['ACE', 'TWO', 'THREE', 'FOUR', 'FIVE'];
    var suits = ['DIAMONDS', 'HEARTS', 'CLUBS', 'SPADES'];

    for (var rank in ranks) {
      for (var suit in suits) {
//         print("rank: $rank & suit: $suit");
        var card = new Card(
          rank = rank,
          suit = suit
        );
        cards.add(card);
      }
     
    }
  }
 
      toString() {
      return cards.toString();
    }
 
  shuffle(){
    cards.shuffle();
  }
 
  cardsWithSuits(String suit){
    return cards.where((card) => card.suit == suit );
  }
 
  deal(int handSize){
    var hand = cards.sublist(0, handSize);
   
    cards = cards.sublist(handSize);
   
    return hand;
  }
 
  removeCards({String rank, String suit}){
    cards.removeWhere((card) => card.rank == rank && card.suit == suit );
  }
 
}

class Card{
  String rank;
  String suit;
  Card(this.suit, this.rank);
 
  toString(){
    return "$rank of $suit";
  }
}

Udemy-4: Remove Element n using WHERE clause




void main() {
  var deck = new Deck();

  print(deck);
//   print('');
//   print(deck.deal(5));
//   print('');
//   print(deck);
 
  deck.removeCards('ACE', 'DIAMONDS');
  print('');
  print(deck);
}

class Deck {
  List<Card> cards = [];
  Deck() {
   
    var ranks = ['ACE', 'TWO', 'THREE', 'FOUR', 'FIVE'];
    var suits = ['DIAMONDS', 'HEARTS', 'CLUBS', 'SPADES'];

    for (var rank in ranks) {
      for (var suit in suits) {
//         print("rank: $rank & suit: $suit");
        var card = new Card(rank, suit);
        cards.add(card);
      }
     
    }
  }
 
      toString() {
      return cards.toString();
    }
 
  shuffle(){
    cards.shuffle();
  }
 
  cardsWithSuits(String suit){
    return cards.where((card) => card.suit == suit );
  }
 
  deal(int handSize){
    var hand = cards.sublist(0, handSize);
   
    cards = cards.sublist(handSize);
   
    return hand;
  }
 
  removeCards(String rank, String suit){
    cards.removeWhere((card){
      return card.rank == rank && card.suit == suit;
    });
  }
 
}

class Card{
  String rank;
  String suit;
  Card(this.rank, this.suit);
 
  toString(){
    return "$rank of $suit";
  }
}





=====================================================

You can also write like this -

Long-Form Syntax
---------------------------------------
  removeCards(String rank, String suit){
    cards.removeWhere((card){
      return card.rank == rank && card.suit == suit;
    });
  }
---------------------------------------


Short-Form Syntax
----------------------------------------
  removeCards(String rank, String suit){
    cards.removeWhere((card) => card.rank == rank && card.suit == suit );
  }
----------------------------------------


===================================================







Udemy-3: Sublist









void main() {
  var deck = new Deck();

  print(deck);
  print('');
  print(deck.deal(5));
  print('');
  print(deck);
}

class Deck {
  List<Card> cards = [];
  Deck() {
   
    var ranks = ['ACE', 'TWO', 'THREE', 'FOUR', 'FIVE'];
    var suits = ['DIAMONDS', 'HEARTS', 'CLUBS', 'SPADES'];

    for (var rank in ranks) {
      for (var suit in suits) {
//         print("rank: $rank & suit: $suit");
        var card = new Card(rank, suit);
        cards.add(card);
      }
     
    }
  }
 
      toString() {
      return cards.toString();
    }
 
  shuffle(){
    cards.shuffle();
  }
 
  cardsWithSuits(String suit){
    return cards.where((card) => card.suit == suit );
  }
 
  deal(int handSize){
    var hand = cards.sublist(0, handSize);
   
    cards = cards.sublist(handSize);
   
    return hand;
  }
 
 
}

class Card{
  String rank;
  String suit;
  Card(this.rank, this.suit);
 
  toString(){
    return "$rank of $suit";
  }
}

Udemy-2: Udemy-1 with filter(WHERE function)





void main() {
  var deck = new Deck();
deck.shuffle();
  print(deck.cardsWithSuits('DIAMONDS'));
}

class Deck {
  List<Card> cards = [];
  Deck() {
 
    var ranks = ['ACE', 'TWO', 'THREE', 'FOUR', 'FIVE'];
    var suits = ['DIAMONDS', 'HEARTS', 'CLUBS', 'SPADES'];

    for (var rank in ranks) {
      for (var suit in suits) {
//         print("rank: $rank & suit: $suit");
        var card = new Card(rank, suit);
        cards.add(card);
      }
   
    }
  }

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

  shuffle(){
    cards.shuffle();
  }

  cardsWithSuits(String suit){
    return cards.where((card){
      return card.suit == suit;
    });
  }

}

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

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


=======================
IF WE HAVE SINGLE LINE EXPRESSION, WE CAN WRITE LIKE THIS-

cardsWithSuits(String suit){
    return cards.where((card) => card.suit == suit );
  }
 

=======================
















Udemy-1: Custom List, Constructor, Return data, Shuffle





void main() {
  var deck = new Deck();
deck.shuffle();
  print(deck);
}

class Deck {
  List<Card> cards = [];
  Deck() {
   
    var ranks = ['ACE', 'TWO', 'THREE', 'FOUR', 'FIVE'];
    var suits = ['DIAMONDS', 'HEARTS', 'CLUBS', 'SPADES'];

    for (var rank in ranks) {
      for (var suit in suits) {
//         print("rank: $rank & suit: $suit");
        var card = new Card(rank, suit);
        cards.add(card);
      }
     
    }
  }
 
      toString() {
      return cards.toString();
    }
 
  shuffle(){
    cards.shuffle();
  }
 
}

class Card{
  String rank;
  String suit;
  Card(this.rank, this.suit);
 
  toString(){
    return "$rank of $suit";
  }
}