Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android studio 如何从另一个dart文件中的小部件将翻转卡返回到其原始位置?_Android Studio_Flutter_Dart_Gridview_Key - Fatal编程技术网

Android studio 如何从另一个dart文件中的小部件将翻转卡返回到其原始位置?

Android studio 如何从另一个dart文件中的小部件将翻转卡返回到其原始位置?,android-studio,flutter,dart,gridview,key,Android Studio,Flutter,Dart,Gridview,Key,我对Flitter还比较陌生,曾试图找到类似的帖子来帮助我,但不幸的是,我没有运气让它们为我工作。我有一个Android Studio程序,它基本上是一个游戏,包含一个翻转卡片网格。我在一个dart文件中有翻转卡,在另一个dart文件中有应用程序栏。我在应用程序栏上有一个图标按钮,当前将点数减少到零,但我也希望它在按下时将所有翻盖卡翻转回其原始位置。我一直在尝试使用一个名为resetBool的全局变量,比如如果resetBool==true,那么可能是toggleCard()。我想我可能需要使用

我对Flitter还比较陌生,曾试图找到类似的帖子来帮助我,但不幸的是,我没有运气让它们为我工作。我有一个Android Studio程序,它基本上是一个游戏,包含一个翻转卡片网格。我在一个dart文件中有翻转卡,在另一个dart文件中有应用程序栏。我在应用程序栏上有一个图标按钮,当前将点数减少到零,但我也希望它在按下时将所有翻盖卡翻转回其原始位置。我一直在尝试使用一个名为resetBool的全局变量,比如如果resetBool==true,那么可能是toggleCard()。我想我可能需要使用一个密钥,但在正确实现一个密钥时遇到了困难

以下是包含我的appbar的文件中的代码:

import 'package:flip_card/flip_card.dart';
import 'package:flutter/material.dart';
import 'gridone.dart' as gridone;
import 'globalVariables.dart';
import 'statenames.dart';

int count;
StateNames stateObject = new StateNames();

class Home extends StatefulWidget {
  @override
  _HomeState createState() => _HomeState();
}

class _HomeState extends State<Home>with SingleTickerProviderStateMixin {
  TabController controller;
  @override
  void initState() {
    controller = new TabController(length: 1, vsync: this);
    super.initState();
  }

  @override
  void dispose() {

    controller.dispose();
    super.dispose();
  }

  void changeCount() {
    setState(() {
      counter += 1;
    });
  }

  void decreaseCount() {
    setState(() {
      counter -= 1;
    });
  }



  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(

        title:new Text("License plate game"),
        backgroundColor: Colors.greenAccent,
        actions: <Widget>[
          IconButton(
            icon: Icon(
              Icons.autorenew,
              color: Colors.white,
            ),
            onPressed: () {
              setState(() {
                counter = 0;
                resetBool = true;



              });
            },
          ),

         Center(

          child: Container(
              padding: EdgeInsets.fromLTRB(20, 20, 20, 20),

              child: Text('points: $counter', textAlign: TextAlign.center, style: TextStyle(fontSize: 15),
              )

          ),


         ),

     
        ],






        bottom: new TabBar(
          controller: controller,
          indicatorWeight: 5.0,

          indicatorColor: Colors.green,
          tabs: <Widget> [
            new Tab(icon: new Icon(Icons.image),),
          ],
        ),
      ),
      body: new TabBarView(
        controller: controller,
        children: <Widget>[
          new gridone.GridOne(changeCount, decreaseCount),
        ],
       

      )

    );
  }
}
import'包:flip_卡/flip_卡.dart';
进口“包装:颤振/材料.省道”;
导入'gridone.dart'作为gridone;
导入“globalVariables.dart”;
导入“statenames.dart”;
整数计数;
StateNames stateObject=新StateNames();
类Home扩展了StatefulWidget{
@凌驾
_HomeState createState()=>\u HomeState();
}
类_HomeState使用SingleTickerProviderStateMixin扩展stateMixin{
tab控制器;
@凌驾
void initState(){
控制器=新的TabController(长度:1,vsync:this);
super.initState();
}
@凌驾
无效处置(){
controller.dispose();
super.dispose();
}
void changecont(){
设置状态(){
计数器+=1;
});
}
无效递减计数(){
设置状态(){
计数器-=1;
});
}
@凌驾
小部件构建(构建上下文){
归还新脚手架(
appBar:新的appBar(
标题:新文本(“车牌游戏”),
背景颜色:Colors.greenAccent,
行动:[
图标按钮(
图标:图标(
Icons.autorenew,
颜色:颜色,白色,
),
已按下:(){
设置状态(){
计数器=0;
resetBool=true;
});
},
),
居中(
子:容器(
填充:来自LTRB(20,20,20,20)的边缘设置,
子项:Text('points:$counter',textAlign:textAlign.center,style:TextStyle(fontSize:15),
)
),
),
],
底部:新选项卡栏(
控制器:控制器,
指示器重量:5.0,
指示颜色:颜色。绿色,
选项卡:[
新建选项卡(图标:新建图标(Icons.image)),
],
),
),
正文:新选项卡视图(
控制器:控制器,
儿童:[
新的gridone.gridone(更改计数、减少计数),
],
)
);
}
}
下面是包含我的翻转卡的文件中的代码:

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flip_card/flip_card.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'statenames.dart';
import 'globalVariables.dart';
import 'Home.dart';
import 'gridtwo.dart' as gridTwo;

StateNames stateObject = new StateNames();
Home homeObject = new Home();

class GridOne extends StatefulWidget {



  final Function updateCounter;
  final Function decreaseCount;
  GridOne(this.updateCounter, this.decreaseCount);




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

class _GridOneState extends State<GridOne>


    with AutomaticKeepAliveClientMixin {

  @override
  bool get wantKeepAlive => true;

  int points = 0;

  @override



  Widget build(BuildContext context) {

  super.build(context);

    return new Scaffold(
     body: new Column(


        children: <Widget> [
          new Expanded(
          child: GridView.count(
         crossAxisCount: 5,
         children: List.generate(52, (index){



           return Card(



             elevation: 0.0,
             margin: EdgeInsets.only(left: 3.0, right: 3.0, top: 9.0, bottom: 0.0),
             color: Color(0x00000000),
             child: FlipCard(

               direction: FlipDirection.HORIZONTAL,
               speed: 1000,
               //(resetBool == true) ? cardKey.currentState.toggleCard() : null,

               onFlipDone: (status) {



                 setState(() {
                   (status)

                   ? widget.decreaseCount()
                   : widget.updateCounter();

                 });



                 if (counter == 25) {
                   Fluttertoast.showToast(
                       msg: "You've got 25 states! Wow!",
                       toastLength: Toast.LENGTH_SHORT,
                       gravity: ToastGravity.BOTTOM_LEFT,
                       timeInSecForIosWeb: 1,
                       backgroundColor: Colors.red,
                       textColor: Colors.white,
                       fontSize: 16.0);
                 };

                 print(counter);




               },
               front: Container(
                 decoration: BoxDecoration(
                   color: Color(0xFF006666),
                   borderRadius: BorderRadius.all(Radius.circular(8.0)),
                 ),
                 child: Column(
                   mainAxisAlignment: MainAxisAlignment.center,

                    crossAxisAlignment: CrossAxisAlignment.stretch,
                   children: <Widget>[
                     FittedBox(fit:BoxFit.fitWidth,
                     child: Text(stateObject.stateNames[index], style: TextStyle(fontFamily: 'Architects Daughter', color: Colors.white), )
                         //Theme.of(context).textTheme.headline
                 ),
                     Text('',
                         style: Theme.of(context).textTheme.body1),
                   ],
                 ),
               ),
               back: Container(
                 decoration: BoxDecoration(
                   color: Color(0xFF006666),
                   borderRadius: BorderRadius.all(Radius.circular(8.0)),

                 ),
                 child: Column(
                   mainAxisAlignment: MainAxisAlignment.center,
                   children: <Widget>[

                     Image(image: AssetImage(stateObject.licensePlatePaths[index])),
                     //Text('',
                         //style: Theme.of(context).textTheme.body1),
                   ],

                 ),
               ),
             ),
           );

         })
     )
          )
        ]
     ),
    );

  }
}


import'包装:flift/cupertino.dart';
进口“包装:颤振/材料.省道”;
导入“包装:flip_卡/flip_卡.dart”;
进口“包装:fluttoast/fluttoast.dart”;
导入“statenames.dart”;
导入“globalVariables.dart”;
输入“Home.dart”;
导入'gridtwo.dart'作为gridtwo;
StateNames stateObject=新StateNames();
Home homeObject=新家();
类GridOne扩展了StatefulWidget{
最终函数updateCounter;
最终函数递减计数;
GridOne(this.updateCounter,this.decreaseCount);
@凌驾
_GridOneState createState()=>\u GridOneState();
}
类GridOneState扩展了状态
使用AutomaticEpaLiveClientMixin{
@凌驾
bool get wantKeepAlive=>true;
积分=0;
@凌驾
小部件构建(构建上下文){
super.build(上下文);
归还新脚手架(
正文:新栏目(
儿童:[
新扩展(
子项:GridView.count(
交叉轴计数:5,
子项:List.generate(52,(索引){
回程卡(
标高:0.0,
边距:仅限边集(左侧:3.0,右侧:3.0,顶部:9.0,底部:0.0),
颜色:颜色(0x00000000),
孩子:FlipCard(
方向:翻转方向。水平,
速度:1000,
//(resetBool==true)?cardKey.currentState.toggleCard():null,
onFlipDone:(状态){
设置状态(){
(现状)
?widget.decreaseCount()
:widget.updateCounter();
});
如果(计数器==25){
烤面包片(
味精:“你有25个州!哇!”,
烤面包片长度:烤面包片长度,
重力:ToastGravity.BOTTOM_LEFT,
TimeInSecureForiosWeb:1,
背景颜色:Colors.red,
textColor:Colors.white,
体积:16.0),;
};
打印(计数器);
},
正面:集装箱(
装饰:盒子装饰(
颜色:颜色(0xFF006666),
borderRadius:borderRadius.all(半径.圆形(8.0)),
),
子:列(
mainAxisAlignment:mainAxisAlignment.center,
crossAxisAlignment:crossAxisAlignment.stretch,
儿童:[
FittedBox(配合:BoxFit.fittewidth,
子项:文本(stateObject.stateNames[index],样式:TextStyle(fontFamily:'Architects-Children',颜色:Colors.white),)
//Theme.of(context).textTheme.headline
),
文本(“”,
风格:Theme.of(context.textTheme.body1),
],
),
),
背面:集装箱(
装饰:盒子装饰(
颜色:颜色(0xFF006666),
边界半径:博尔
List<GlobalKey<FlipCardState>> cardKeys = [];

 @override
  void initState() {
    List.generate(52, (index) {
      cardKeys.add(GlobalKey<FlipCardState>());
    });
    super.initState();
  }
FlipCard(key: cardKeys[index], ... )
void resetCards() {
    cardKeys.forEach((element) {
      if (!element.currentState.isFront) {
        element.currentState.toggleCard();
      }
    });
    setState(() {});
  }    
import 'package:flutter/material.dart';
import 'package:flip_card/flip_card.dart';
import 'package:fluttertoast/fluttertoast.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        // This is the theme of your application.
        //
        // Try running your application with "flutter run". You'll see the
        // application has a blue toolbar. Then, without quitting the app, try
        // changing the primarySwatch below to Colors.green and then invoke
        // "hot reload" (press "r" in the console where you ran "flutter run",
        // or simply save your changes to "hot reload" in a Flutter IDE).
        // Notice that the counter didn't reset back to zero; the application
        // is not restarted.
        primarySwatch: Colors.blue,
        // This makes the visual density adapt to the platform that you run
        // the app on. For desktop platforms, the controls will be smaller and
        // closer together (more dense) than on mobile platforms.
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: Home(),
    );
  }
}

class Home extends StatefulWidget {
  @override
  _HomeState createState() => _HomeState();
}

class _HomeState extends State<Home> with SingleTickerProviderStateMixin {
  TabController controller;
  int counter = 0;
  final GridOneController myController = GridOneController();

  @override
  void initState() {
    controller = new TabController(length: 1, vsync: this);
    super.initState();
  }

  @override
  void dispose() {
    controller.dispose();
    super.dispose();
  }

  void changeCount() {
    setState(() {
      counter += 1;
    });
  }

  void decreaseCount() {
    setState(() {
      counter -= 1;
    });
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
        appBar: new AppBar(
          title: new Text("License plate game"),
          backgroundColor: Colors.greenAccent,
          actions: <Widget>[
            IconButton(
              icon: Icon(
                Icons.autorenew,
                color: Colors.white,
              ),
              onPressed: () {
                setState(() {
                  counter = 0;
                  myController.resetCards();
                });
              },
            ),
            Center(
              child: Container(
                  padding: EdgeInsets.fromLTRB(20, 20, 20, 20),
                  child: Text(
                    'points: $counter',
                    textAlign: TextAlign.center,
                    style: TextStyle(fontSize: 15),
                  )),
            ),
          ],
          bottom: new TabBar(
            controller: controller,
            indicatorWeight: 5.0,
            indicatorColor: Colors.green,
            tabs: <Widget>[
              new Tab(
                icon: new Icon(Icons.image),
              ),
            ],
          ),
        ),
        body: new TabBarView(
          controller: controller,
          children: <Widget>[
            new GridOne(counter, myController),
          ],
        ));
  }
}

class GridOneController {
  void Function() resetCards;
}

class GridOne extends StatefulWidget {
  int counter;
  final GridOneController controller;

  GridOne(this.counter, this.controller);

  @override
  _GridOneState createState() => _GridOneState(controller);
}

class _GridOneState extends State<GridOne> {
  _GridOneState(GridOneController _controller) {
    _controller.resetCards = resetCards;
  }

  int points = 0;

  void increaseCounter() {
    widget.counter += 1;
  }

  void decreaseCounter() {
    widget.counter -= 1;
  }

  void resetCards() {
    cardKeys.forEach((element) {
      if (!element.currentState.isFront) {
        element.currentState.toggleCard();
      }
    });
    setState(() {});
  }

  List<GlobalKey<FlipCardState>> cardKeys = [];

  @override
  void initState() {
    List.generate(52, (index) {
      cardKeys.add(GlobalKey<FlipCardState>());
    });
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    print(cardKeys.length);
    return new Scaffold(
      body: new Column(children: <Widget>[
        new Expanded(
            child: GridView.count(
                crossAxisCount: 5,
                children: List.generate(52, (index) {
                  return Card(
                    elevation: 0.0,
                    margin: EdgeInsets.only(
                        left: 3.0, right: 3.0, top: 9.0, bottom: 0.0),
                    color: Color(0x00000000),
                    child: new FlipCard(
                      key: cardKeys[index],
                      direction: FlipDirection.HORIZONTAL,
                      speed: 1000,
                      onFlipDone: (status) {
                        setState(() {
                          (status) ? decreaseCounter() : increaseCounter();
                        });

                        if (widget.counter == 25) {
                          Fluttertoast.showToast(
                              msg: "You've got 25 states! Wow!",
                              toastLength: Toast.LENGTH_SHORT,
                              gravity: ToastGravity.BOTTOM_LEFT,
                              timeInSecForIosWeb: 1,
                              backgroundColor: Colors.red,
                              textColor: Colors.white,
                              fontSize: 16.0);
                        }
                        ;

                        print(widget.counter);
                      },
                      front: Container(
                        decoration: BoxDecoration(
                          color: Color(0xFF006666),
                          borderRadius: BorderRadius.all(Radius.circular(8.0)),
                        ),
                        child: Column(
                          mainAxisAlignment: MainAxisAlignment.center,
                          crossAxisAlignment: CrossAxisAlignment.stretch,
                          children: <Widget>[
                            FittedBox(
                                fit: BoxFit.fitWidth,
                                child: Text(
                                  'FRONT',
                                  style: TextStyle(color: Colors.white),
                                )
                                //Theme.of(context).textTheme.headline
                                ),
                            Text(
                              '',
                            ),
                          ],
                        ),
                      ),
                      back: Container(
                        decoration: BoxDecoration(
                          color: Color(0xFF006666),
                          borderRadius: BorderRadius.all(Radius.circular(8.0)),
                        ),
                        child: Column(
                          mainAxisAlignment: MainAxisAlignment.center,
                          children: <Widget>[Text('BACK')],
                        ),
                      ),
                    ),
                  );
                })))
      ]),
    );
  }
}