Android 当用户向下滚动,然后再次向上滚动时,如何阻止已翻转的翻页卡反向翻转?

Android 当用户向下滚动,然后再次向上滚动时,如何阻止已翻转的翻页卡反向翻转?,android,android-studio,flutter,dart,gridview,Android,Android Studio,Flutter,Dart,Gridview,我的问题是标题所说的——我有一个翻转卡片的网格视图。当我翻过几张牌时,从它们旁边滚动过去,然后向上滚动,这些牌已经翻过了。我真的不希望发生这种情况,因为每次用户翻牌时,总积分中会增加一分,然后当他们翻牌时,总积分中会减少一分。我尝试过“AutomaticKepaLiveClientMixin”,它可以在我有另一个选项卡时保持状态,但它似乎不能帮助我在滚动时保持卡片翻转 如果这里有一个明显的解决方案,而我错过了,请提前道歉。我确实试着在网上找到解决办法。 下面是我正在使用的dart文件中的代码:

我的问题是标题所说的——我有一个翻转卡片的网格视图。当我翻过几张牌时,从它们旁边滚动过去,然后向上滚动,这些牌已经翻过了。我真的不希望发生这种情况,因为每次用户翻牌时,总积分中会增加一分,然后当他们翻牌时,总积分中会减少一分。我尝试过“AutomaticKepaLiveClientMixin”,它可以在我有另一个选项卡时保持状态,但它似乎不能帮助我在滚动时保持卡片翻转

如果这里有一个明显的解决方案,而我错过了,请提前道歉。我确实试着在网上找到解决办法。 下面是我正在使用的dart文件中的代码:

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


StateNames stateObject = new StateNames();

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) {
    
    return new Scaffold(
     body: GridView.count(
         crossAxisCount: 4,

         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,

               onFlipDone: (status) {


                 setState(() {
                   (status)

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


                 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), )
                        
                 ),
                     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])),
                     
                   ],

                 ),
               ),
             ),
           );
         })
     ),
    );
  }
}
 
导入“包装:颤振/材料.省道”;
导入“包装:flip_卡/flip_卡.dart”;
导入“statenames.dart”;
导入“globalVariables.dart”;
StateNames stateObject=新StateNames();
类GridOne扩展了StatefulWidget{
最终函数updateCounter;
最终函数递减计数;
GridOne(this.updateCounter,this.decreaseCount);
@凌驾
_GridOneState createState()=>\u GridOneState();
}
类GridOneState扩展了状态
使用AutomaticEpaLiveClientMixin{
@凌驾
bool get wantKeepAlive=>true;
积分=0;
@凌驾
小部件构建(构建上下文){
归还新脚手架(
正文:GridView.count(
交叉轴计数:4,
子项:List.generate(52,(索引){
回程卡(
标高:0.0,
边距:仅限边集(左侧:3.0,右侧:3.0,顶部:9.0,底部:0.0),
颜色:颜色(0x00000000),
孩子:FlipCard(
方向:翻转方向。水平,
速度:1000,
onFlipDone:(状态){
设置状态(){
(现状)
?widget.decreaseCount()
:widget.updateCounter();
});
打印(计数器);
},
正面:集装箱(
装饰:盒子装饰(
颜色:颜色(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.body1),
],
),
),
背面:集装箱(
装饰:盒子装饰(
颜色:颜色(0xFF006666),
borderRadius:borderRadius.all(半径.圆形(8.0)),
),
子:列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
图像(图像:AssetImage(stateObject.licenseplatepath[index]),
],
),
),
),
);
})
),
);
}
}

非常感谢您的阅读。

我点击了试用版以实现您的需求,我认为只有在您使用本专栏的情况下才有可能。我甚至尝试过使用简单的ListView,但卡片仍然会返回正面

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Test(),
    );
  }
}

class Test extends StatefulWidget{
  @override
  _Test createState() => _Test();
}

class _Test extends State<Test>{
  List<Widget> list = [];
  _Test(){
    list = new List.filled(30, flipCards());
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: SingleChildScrollView(
          child: Column(
            children: list,
          ),
        )
    );
  }

  Widget flipCards(){
    return Container(
      height: 70,
        child: FlipCard(
          flipOnTouch: true,
          front: Card(
            child: Container(
              alignment: Alignment.center,
              child: Text('Toggle'),
            ),
          ),
          back: Card(
            child: Container(
              alignment: Alignment.center,
              child: Text('Back'),
            ),
          ),
        )
    );
  }
}
void main(){
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
主页:Test(),
);
}
}
类测试扩展了StatefulWidget{
@凌驾
_Test createState()=>u Test();
}
类测试扩展了状态{
列表=[];
_测试(){
列表=新列表。已填充(30,flipCards());
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:SingleChildScrollView(
子:列(
儿童:名单,
),
)
);
}
小部件动画卡(){
返回容器(
身高:70,
孩子:FlipCard(
真的,
正面:卡片(
子:容器(
对齐:对齐.center,
子项:文本(“切换”),
),
),
背面:卡片(
子:容器(
对齐:对齐.center,
子项:文本('Back'),
),
),
)
);
}
}

您需要在
GridView的子级上使用
AutomaticEpaLiveClientMixin

因此,为您的卡制作一个新的有状态小部件,并在那里使用keepalive。
同样对于
automatickepaliveclientmixin
您需要调用
super.build(上下文)在您的构建方法中

谢谢,我一直在仔细研究它以找出如何做到这一点(新手,抱歉!)我想我需要在另一个有状态的小部件中构建卡片小部件,并从_gridonestatex多次调用这些小部件来创建它们?我花了太多时间试图找出如何实现第二个人的答案,几分钟前才尝试了这一个,它工作得非常完美(我现在只需要让它们像一行列一样)。非常感谢lol。如果ans解决了您的问题,您可以向上投票并将其标记为正确的ans。谢谢。我太新了,显然不能投票,但我把它作为答案。非常感谢你!