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