Skip to content
Snippets Groups Projects
Select Git revision
  • 3cb728ceaa46083b28d38eb94dd942ce51681d5d
  • master default protected
  • 29-add-difficulty-level-parameter
  • 23-improve-app-metadata
  • 3-fix-layout-on-orientation-change
  • Release_1.9.1_42 protected
  • 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
25 results

main.dart

Blame
  • main.dart 7.07 KiB
    import 'dart:async';
    
    import 'package:flutter/material.dart';
    
    import 'package:memory/data/data.dart';
    import 'package:memory/models/tile_model.dart';
    
    void main() => runApp(const MyApp());
    
    class MyApp extends StatelessWidget {
      const MyApp({super.key});
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Flutter Demo',
          debugShowCheckedModeBanner: false,
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          home: const Home(),
        );
      }
    }
    
    class Home extends StatefulWidget {
      const Home({super.key});
    
      @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: const EdgeInsets.symmetric(horizontal: 20, vertical: 50),
              child: Column(
                children: <Widget>[
                  const SizedBox(
                    height: 40,
                  ),
                  points != 800
                      ? Column(
                          crossAxisAlignment: CrossAxisAlignment.center,
                          children: <Widget>[
                            Text(
                              "$points/800",
                              style: const TextStyle(
                                fontSize: 20,
                                fontWeight: FontWeight.w500,
                              ),
                            ),
                            const Text(
                              "Points",
                              textAlign: TextAlign.start,
                              style: TextStyle(
                                fontSize: 14,
                                fontWeight: FontWeight.w300,
                              ),
                            ),
                          ],
                        )
                      : Container(),
                  const SizedBox(
                    height: 20,
                  ),
                  points != 800
                      ? GridView(
                          shrinkWrap: true,
                          //physics: ClampingScrollPhysics(),
                          scrollDirection: Axis.vertical,
                          gridDelegate: const SliverGridDelegateWithMaxCrossAxisExtent(
                            mainAxisSpacing: 0.0,
                            maxCrossAxisExtent: 100.0,
                          ),
                          children: List.generate(gridViewTiles.length, (index) {
                            return Tile(
                              imagePathUrl: gridViewTiles[index].getImageAssetPath(),
                              tileIndex: index,
                              parent: this,
                            );
                          }),
                        )
                      : 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: const 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;
    
      const Tile({super.key, 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 = TileModel();
                  print(widget.tileIndex);
                  selected = true;
                  Future.delayed(const Duration(seconds: 2), () {
                    tileModel.setImageAssetPath("");
                    myPairs[widget.tileIndex] = tileModel;
                    print(selectedIndex);
                    myPairs[selectedIndex] = tileModel;
                    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), () {
                    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: const 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"),
                  ),
          ),
        );
      }
    }