Skip to content
Snippets Groups Projects
Select Git revision
  • c0db5082f1e86659c59aed7d24eee9cc76fe592f
  • master default protected
  • 46-upgrade-framework-and-dependencies
  • 29-add-difficulty-level-parameter
  • 23-improve-app-metadata
  • 3-fix-layout-on-orientation-change
  • Release_1.9.0_41 protected
  • Release_1.8.2_40 protected
  • Release_1.8.1_39 protected
  • Release_1.8.0_38 protected
  • Release_1.7.0_37 protected
  • Release_1.6.0_36 protected
  • Release_1.5.0_35 protected
  • Release_1.4.2_34 protected
  • Release_1.4.1_33 protected
  • Release_1.4.0_32 protected
  • Release_1.3.0_31 protected
  • Release_1.2.1_30 protected
  • Release_1.2.0_29 protected
  • Release_1.1.1_28 protected
  • Release_1.1.0_27 protected
  • Release_1.0.25_26 protected
  • Release_1.0.24_25 protected
  • Release_1.0.23_24 protected
  • Release_1.0.22_23 protected
  • Release_1.0.21_22 protected
26 results

main.dart

Blame
  • main.dart 7.08 KiB
    import 'dart:async';
    
    import 'package:flutter/material.dart';
    import 'package:memory/data/data.dart';
    import 'package:memory/models/TileModel.dart';
    
    void main() => runApp(MyApp());
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Flutter Demo',
          debugShowCheckedModeBanner: false,
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          home: Home(),
        );
      }
    }
    
    class Home extends StatefulWidget {
      @override
      _HomeState createState() => _HomeState();
    }
    
    class _HomeState extends State<Home> {
      List<TileModel> gridViewTiles = [];
      List<TileModel> questionPairs = [];
    
      @override
      void initState() {
        super.initState();
        reStart();
      }
    
      void reStart() {
        myPairs = getPairs();
        myPairs.shuffle();
    
        gridViewTiles = myPairs;
        Future.delayed(const Duration(seconds: 3), () {
          setState(() {
            questionPairs = getQuestionPairs();
            gridViewTiles = questionPairs;
            selected = false;
          });
        });
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          backgroundColor: Colors.white,
          body: SingleChildScrollView(
            child: Container(
              padding: EdgeInsets.symmetric(horizontal: 20, vertical: 50),
              child: Column(
                children: <Widget>[
                  SizedBox(
                    height: 40,
                  ),
                  points != 800
                      ? Column(
                          crossAxisAlignment: CrossAxisAlignment.center,
                          children: <Widget>[
                            Text(
                              "$points/800",
                              style: TextStyle(
                                fontSize: 20,
                                fontWeight: FontWeight.w500,
                              ),
                            ),
                            Text(
                              "Points",
                              textAlign: TextAlign.start,
                              style: TextStyle(
                                fontSize: 14,
                                fontWeight: FontWeight.w300,
                              ),
                            ),
                          ],
                        )
                      : Container(),
                  SizedBox(
                    height: 20,
                  ),
                  points != 800
                      ? GridView(
                          shrinkWrap: true,
                          //physics: ClampingScrollPhysics(),
                          scrollDirection: Axis.vertical,
                          gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent(
                            mainAxisSpacing: 0.0,
                            maxCrossAxisExtent: 100.0,
                          ),
                          children: List.generate(gridViewTiles.length, (index) {
                            return Tile(
                              imagePathUrl: gridViewTiles[index].getImageAssetPath(),
                              tileIndex: index,
                              parent: this,
                            );
                          }),
                        )
                      : Container(
                          child: Column(
                            children: <Widget>[
                              GestureDetector(
                                onTap: () {
                                  setState(() {
                                    points = 0;
                                    reStart();
                                  });
                                },
                                child: Container(
                                  height: 50,
                                  width: 200,
                                  alignment: Alignment.center,
                                  decoration: BoxDecoration(
                                    color: Colors.blue,
                                    borderRadius: BorderRadius.circular(24),
                                  ),
                                  child: Text(
                                    "Replay",
                                    style: TextStyle(
                                      color: Colors.white,
                                      fontSize: 17,
                                      fontWeight: FontWeight.w500,
                                    ),
                                  ),
                                ),
                              ),
                            ],
                          ),
                        ),
                ],
              ),
            ),
          ),
        );
      }
    }
    
    class Tile extends StatefulWidget {
      final String imagePathUrl;
      final int tileIndex;
      final _HomeState? parent;
    
      Tile({this.imagePathUrl = '', this.tileIndex = 0, this.parent});
    
      @override
      _TileState createState() => _TileState();
    }
    
    class _TileState extends State<Tile> {
      @override
      Widget build(BuildContext context) {
        return GestureDetector(
          onTap: () {
            if (!selected) {
              setState(() {
                myPairs[widget.tileIndex].setIsSelected(true);
              });
              if (selectedTile != "") {
                /// testing if the selected tiles are same
                if (selectedTile == myPairs[widget.tileIndex].getImageAssetPath()) {
                  print("add point");
                  points = points + 100;
                  print(selectedTile + " -> " + widget.imagePathUrl);
    
                  TileModel tileModel = new TileModel();
                  print(widget.tileIndex);
                  selected = true;
                  Future.delayed(const Duration(seconds: 2), () {
                    tileModel.setImageAssetPath("");
                    myPairs[widget.tileIndex] = tileModel;
                    print(selectedIndex);
                    myPairs[selectedIndex] = tileModel;
                    this.widget.parent?.setState(() {});
                    setState(() {
                      selected = false;
                    });
                    selectedTile = "";
                  });
                } else {
                  print(selectedTile + " -> " + myPairs[widget.tileIndex].getImageAssetPath());
                  print("wrong choice");
                  print(widget.tileIndex);
                  print(selectedIndex);
                  selected = true;
                  Future.delayed(const Duration(seconds: 2), () {
                    this.widget.parent?.setState(() {
                      myPairs[widget.tileIndex].setIsSelected(false);
                      myPairs[selectedIndex].setIsSelected(false);
                    });
                    setState(() {
                      selected = false;
                    });
                  });
    
                  selectedTile = "";
                }
              } else {
                setState(() {
                  selectedTile = myPairs[widget.tileIndex].getImageAssetPath();
                  selectedIndex = widget.tileIndex;
                });
    
                print(selectedTile);
                print(selectedIndex);
              }
            }
          },
          child: Container(
            margin: EdgeInsets.all(5),
            child: myPairs[widget.tileIndex].getImageAssetPath() != ""
                ? Image.asset(myPairs[widget.tileIndex].getIsSelected()
                    ? myPairs[widget.tileIndex].getImageAssetPath()
                    : widget.imagePathUrl)
                : Container(
                    color: Colors.white,
                    child: Image.asset("assets/correct.png"),
                  ),
          ),
        );
      }
    }