Android 一个列表视图不是';t在动画交叉淡入时可滚动

Android 一个列表视图不是';t在动画交叉淡入时可滚动,android,listview,dart,scrollable,flutter,Android,Listview,Dart,Scrollable,Flutter,我是颤振开发新手,我有一个问题: 我创建了新的AnimatedCrossFade,并将两个不同的ListView添加到第一个子和第二个子,但始终只有一个子ListView可滚动。如何在第一个和第二个子级中执行可滚动列表视图 (与simple GridView的情况相同。)这看起来像是中的一个bug。我提交了一份申请 您可以通过不使用AnimatedCrossFade和使用FadeTransition构建自己的动画来解决此问题。源代码如下。点击播放按钮,它会像这样开始 最后是这样的: 再次单击

我是颤振开发新手,我有一个问题: 我创建了新的AnimatedCrossFade,并将两个不同的ListView添加到第一个子和第二个子,但始终只有一个子ListView可滚动。如何在第一个和第二个子级中执行可滚动列表视图

(与simple GridView的情况相同。)

这看起来像是中的一个bug。我提交了一份申请

您可以通过不使用
AnimatedCrossFade
和使用
FadeTransition
构建自己的动画来解决此问题。源代码如下。点击播放按钮,它会像这样开始

最后是这样的:

再次单击该按钮可以前后淡入淡出。这两个列表都是可滚动的,它会记住您的滚动位置

import 'package:flutter/widgets.dart';
import 'package:flutter/material.dart';

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

class MyApp extends StatefulWidget {
  createState() => new MyAppState();
}

class MyAppState extends State<MyApp> with TickerProviderStateMixin {
  AnimationController _controller;
  Key _key1 = new GlobalKey();
  Key _key2 = new GlobalKey();

  @override
  void initState() {
    _controller = new AnimationController(
      duration: const Duration(milliseconds: 700),
      vsync: this,
    );
  }

  Widget _buildList(Key key, Color color, double opacity) {
    return new Opacity(
      opacity: opacity,
      child: new Container(
        // Keep the hidden ListView around to maintain its scroll position
        // but set its height to 0.0 so it can't interfere with touches
        height: opacity == 0.0 ? 0.0 : null,
        decoration: new BoxDecoration(color: color),
        child: new ListView(
          key: new GlobalObjectKey(color),
          children: new List.generate(
            100,
            (index) => new Text('Item $index'),
          ),
        ),
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Flutter Demo',
      home: new Scaffold(
        floatingActionButton: new FloatingActionButton(
          child: new Icon(Icons.play_arrow),
          onPressed: () {
            if (_controller.status == AnimationStatus.dismissed ||
              _controller.status == AnimationStatus.reverse) {
              _controller.forward();
            } else {
              _controller.reverse();
            }
          },
        ),
        body: new Center(
          child: new Container(
            width: 100.0,
            height: 100.0,
            child: new AnimatedBuilder(
            animation: _controller,
            builder: (BuildContext context, Widget child) {
              return new Stack(
                children: [
                  _buildList(_key1, Colors.red[200], _controller.value),
                  _buildList(_key2, Colors.blue[200], 1.0 - _controller.value),
                ],
              );
            }
          ),
        ),
        ),
      ),
    );
  }
}
}
import'package:flatter/widgets.dart';
进口“包装:颤振/材料.省道”;
void main(){
runApp(新的MyApp());
}
类MyApp扩展了StatefulWidget{
createState()=>新建MyAppState();
}
类MyAppState使用TickerProviderStateMixin扩展状态{
动画控制器_控制器;
Key _key1=新的GlobalKey();
Key _key2=新的GlobalKey();
@凌驾
void initState(){
_控制器=新的AnimationController(
持续时间:常量持续时间(毫秒:700),
vsync:这个,,
);
}
小部件构建列表(键、颜色、双不透明度){
返回新的不透明度(
不透明度:不透明度,
子容器:新容器(
//保留隐藏的ListView以保持其滚动位置
//但将其高度设置为0.0,这样它就不会干扰触摸
高度:不透明度==0.0?0.0:null,
装饰:新盒子装饰(颜色:彩色),
子:新列表视图(
键:新的全局对象键(颜色),
子项:新建列表。生成(
100,
(索引)=>新文本('Item$index'),
),
),
),
);
}
@凌驾
小部件构建(构建上下文){
返回新材料PP(
标题:“颤振演示”,
家:新脚手架(
floatingActionButton:新的floatingActionButton(
子:新图标(图标。播放箭头),
已按下:(){
如果(_controller.status==AnimationStatus.discomered||
_controller.status==AnimationStatus.reverse){
_controller.forward();
}否则{
_controller.reverse();
}
},
),
正文:新中心(
子容器:新容器(
宽度:100.0,
高度:100.0,
子对象:新的动画生成器(
动画:_控制器,
生成器:(BuildContext上下文,小部件子项){
返回新堆栈(
儿童:[
_构建列表(_key1,Colors.red[200],_controller.value),
_构建列表(_-key2,Colors.blue[200],1.0-_-controller.value),
],
);
}
),
),
),
),
);
}
}
}
这看起来像是一个错误。我提交了一份申请

您可以通过不使用
AnimatedCrossFade
和使用
FadeTransition
构建自己的动画来解决此问题。源代码如下。点击播放按钮,它会像这样开始

最后是这样的:

再次单击该按钮可以前后淡入淡出。这两个列表都是可滚动的,它会记住您的滚动位置

import 'package:flutter/widgets.dart';
import 'package:flutter/material.dart';

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

class MyApp extends StatefulWidget {
  createState() => new MyAppState();
}

class MyAppState extends State<MyApp> with TickerProviderStateMixin {
  AnimationController _controller;
  Key _key1 = new GlobalKey();
  Key _key2 = new GlobalKey();

  @override
  void initState() {
    _controller = new AnimationController(
      duration: const Duration(milliseconds: 700),
      vsync: this,
    );
  }

  Widget _buildList(Key key, Color color, double opacity) {
    return new Opacity(
      opacity: opacity,
      child: new Container(
        // Keep the hidden ListView around to maintain its scroll position
        // but set its height to 0.0 so it can't interfere with touches
        height: opacity == 0.0 ? 0.0 : null,
        decoration: new BoxDecoration(color: color),
        child: new ListView(
          key: new GlobalObjectKey(color),
          children: new List.generate(
            100,
            (index) => new Text('Item $index'),
          ),
        ),
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Flutter Demo',
      home: new Scaffold(
        floatingActionButton: new FloatingActionButton(
          child: new Icon(Icons.play_arrow),
          onPressed: () {
            if (_controller.status == AnimationStatus.dismissed ||
              _controller.status == AnimationStatus.reverse) {
              _controller.forward();
            } else {
              _controller.reverse();
            }
          },
        ),
        body: new Center(
          child: new Container(
            width: 100.0,
            height: 100.0,
            child: new AnimatedBuilder(
            animation: _controller,
            builder: (BuildContext context, Widget child) {
              return new Stack(
                children: [
                  _buildList(_key1, Colors.red[200], _controller.value),
                  _buildList(_key2, Colors.blue[200], 1.0 - _controller.value),
                ],
              );
            }
          ),
        ),
        ),
      ),
    );
  }
}
}
import'package:flatter/widgets.dart';
进口“包装:颤振/材料.省道”;
void main(){
runApp(新的MyApp());
}
类MyApp扩展了StatefulWidget{
createState()=>新建MyAppState();
}
类MyAppState使用TickerProviderStateMixin扩展状态{
动画控制器_控制器;
Key _key1=新的GlobalKey();
Key _key2=新的GlobalKey();
@凌驾
void initState(){
_控制器=新的AnimationController(
持续时间:常量持续时间(毫秒:700),
vsync:这个,,
);
}
小部件构建列表(键、颜色、双不透明度){
返回新的不透明度(
不透明度:不透明度,
子容器:新容器(
//保留隐藏的ListView以保持其滚动位置
//但将其高度设置为0.0,这样它就不会干扰触摸
高度:不透明度==0.0?0.0:null,
装饰:新盒子装饰(颜色:彩色),
子:新列表视图(
键:新的全局对象键(颜色),
子项:新建列表。生成(
100,
(索引)=>新文本('Item$index'),
),
),
),
);
}
@凌驾
小部件构建(构建上下文){
返回新材料PP(
标题:“颤振演示”,
家:新脚手架(
floatingActionButton:新的floatingActionButton(
子:新图标(图标。播放箭头),
已按下:(){
如果(_controller.status==AnimationStatus.discomered||
_controller.status==AnimationStatus.reverse){
_controller.forward();
}否则{
_controller.reverse();
}
},
),
正文:新中心(
子容器:新容器(
宽度:100.0,
高度:100.0,
子对象:新的动画生成器(
动画:_控制器,
生成器:(BuildContext上下文,小部件子项){
返回新堆栈(
儿童:[
_构建列表(_key1,Colors.red[200],_controller.value),
_构建列表(_-key2,Colors.blue[200],1.0-_-controller.value),
],
);
}
),
),
),
),
);
}
}
}

只有一个listview正在滚动,这是您的问题na?您可以添加一些代码吗?没有它很难帮助你。只有一个列表视图是滚动的,这是你的问题吗?你能添加一些代码吗?没有你很难帮助你。