- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我滚动到 ListView 的底部时,底部的项将被重建。当我滚动到顶部时,我的第一个项目被重建。第一项是带有可选筹码的卡,这种筹码在发生这种情况时会被取消选择。并且“入口”动画也会重播。我该如何阻止呢?
这是基本的代码(它使用了simple_animations包,我似乎无法重现芯片的问题,但动画仍然有问题):
import 'package:flutter/material.dart';
import 'package:simple_animations/simple_animations.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(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final List _chips = ['Hello', 'World'];
List _selected = [];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Issue demo'),
),
body: ListView(
children: <Widget>[
FadeIn(
1,
Card(
child: Wrap(
spacing: 10,
children: List<Widget>.generate(
_chips.length,
(int index) => InputChip(
label: Text(_chips[index]),
selected: _selected.contains(_chips[index]),
onSelected: (selected) {
setState(() {
if (selected) {
_selected.add(_chips[index]);
} else {
_selected.remove(_chips[index]);
}
});
}),
),
),
),
),
FadeIn(1.5, Text('A', style: Theme.of(context).textTheme.display4)),
FadeIn(2, Text('Very', style: Theme.of(context).textTheme.display4)),
FadeIn(2.5, Text('Big', style: Theme.of(context).textTheme.display4)),
FadeIn(3, Text('Scroll', style: Theme.of(context).textTheme.display4)),
FadeIn(3.5, Text('View', style: Theme.of(context).textTheme.display4)),
FadeIn(4, Text('With', style: Theme.of(context).textTheme.display4)),
FadeIn(4.5, Text('Lots', style: Theme.of(context).textTheme.display4)),
FadeIn(5, Text('Of', style: Theme.of(context).textTheme.display4)),
FadeIn(5.5,Text('Items', style: Theme.of(context).textTheme.display4)),
FadeIn(
6,
Card(
child: Text('Last item',
style: Theme.of(context).textTheme.display2),
),
),
],
),
);
}
}
class FadeIn extends StatelessWidget {
final double delay;
final Widget child;
FadeIn(this.delay, this.child);
@override
Widget build(BuildContext context) {
final tween = MultiTrackTween([
Track("opacity")
.add(Duration(milliseconds: 500), Tween(begin: 0.0, end: 1.0)),
Track("translateX").add(
Duration(milliseconds: 500), Tween(begin: 130.0, end: 0.0),
curve: Curves.easeOut)
]);
return ControlledAnimation(
delay: Duration(milliseconds: (300 * delay).round()),
duration: tween.duration,
tween: tween,
child: child,
builderWithChild: (context, child, animation) => Opacity(
opacity: animation["opacity"],
child: Transform.translate(
offset: Offset(animation["translateX"], 0), child: child),
),
);
}
}
最佳答案
要使ListView中的元素保持事件状态(向后滚动时不重新渲染),应使用用户参数addAutomaticKeepAlives: true
。并且ListView中的每个元素都必须是带有AutomaticKeepAliveClientMixin的StatefulWidget。
这是我为您编辑的代码
import 'package:flutter/material.dart';
import 'package:simple_animations/simple_animations.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(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final List _chips = ['Hello', 'World'];
List _selected = [];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Issue demo'),
),
body: ListView(
addAutomaticKeepAlives: true,
children: <Widget>[
FadeIn(
1,
Card(
child: Wrap(
spacing: 10,
children: List<Widget>.generate(
_chips.length,
(int index) => InputChip(
label: Text(_chips[index]),
selected: _selected.contains(_chips[index]),
onSelected: (selected) {
setState(() {
if (selected) {
_selected.add(_chips[index]);
} else {
_selected.remove(_chips[index]);
}
});
}),
),
),
),
),
FadeIn(1.5, Text('A', style: Theme.of(context).textTheme.display4)),
FadeIn(2, Text('Very', style: Theme.of(context).textTheme.display4)),
FadeIn(2.5, Text('Big', style: Theme.of(context).textTheme.display4)),
FadeIn(3, Text('Scroll', style: Theme.of(context).textTheme.display4)),
FadeIn(3.5, Text('View', style: Theme.of(context).textTheme.display4)),
FadeIn(4, Text('With', style: Theme.of(context).textTheme.display4)),
FadeIn(4.5, Text('Lots', style: Theme.of(context).textTheme.display4)),
FadeIn(5, Text('Of', style: Theme.of(context).textTheme.display4)),
FadeIn(5.5,Text('Items', style: Theme.of(context).textTheme.display4)),
FadeIn(
6,
Card(
child: Text('Last item',
style: Theme.of(context).textTheme.display2),
),
),
],
),
);
}
}
class FadeIn extends StatefulWidget {
final double delay;
final Widget child;
FadeIn(this.delay, this.child);
_FadeInState createState() => _FadeInState();
}
class _FadeInState extends State<FadeIn> with AutomaticKeepAliveClientMixin {
@override
Widget build(BuildContext context) {
final tween = MultiTrackTween([
Track("opacity")
.add(Duration(milliseconds: 500), Tween(begin: 0.0, end: 1.0)),
Track("translateX").add(
Duration(milliseconds: 500), Tween(begin: 130.0, end: 0.0),
curve: Curves.easeOut)
]);
return ControlledAnimation(
delay: Duration(milliseconds: (300 * widget.delay).round()),
duration: tween.duration,
tween: tween,
child: widget.child,
builderWithChild: (context, child, animation) => Opacity(
opacity: animation["opacity"],
child: Transform.translate(
offset: Offset(animation["translateX"], 0), child: child),
),
);
}
@override
// TODO: implement wantKeepAlive
bool get wantKeepAlive => true;
}
关于Flutter问题: listview rebuilding items when scrolled,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57980225/
我们在Eclipse中有几个使用CDT(CodeSourcery++)的C项目。 有两个项目可构建库,以供构建最终应用程序的“主”项目中使用。 现在我们发现重建其中一个库不会导致主项目也被重建。显然,
一些背景: 我正在为一个包含 Android 应用程序的大型项目使用 MSBuild 开发持续集成管道。该应用程序包括一些需要定期集成到项目中的自动生成的文件。这通常是通过手动复制它们并在 andro
众所周知,二进制文件取决于obj,而obj取决于.c文件(假定为C项目)。假设我有一个env.mk文件。该文件具有“export NO_DISPLAY = YES”之类的标志。在主Makefile中,
https://www.jetbrains.com/help/idea/compilation-types.html?search=rebuild 根据复杂类型的描述,重建项目会重新编译所有源文件,并
我在 xp 中运行 vs08,试图测试我已经研究了一段时间的 c++ 解决方案。 该解决方案由多个项目组成,我正在处理的两个项目分别包含服务器和客户端。我构建了服务器和客户端项目的调试实例来测试它们之
我成功安装了 MINGW32 和 CMake,并重建了 OpenCV 2.3.2( super 包)。但是 V2.4.2 不是 superpak 并且不具有 V2.3.1 具有的所有文件。我尝试重建的
这可能看起来很愚蠢,但我删除了其中一个节点上数据目录 (/var/lib/scylla/data/*) 中的所有内容。现在,为了恢复数据,我可以运行 nodetool repair 或 nodetoo
当我滚动到 ListView 的底部时,底部的项将被重建。当我滚动到顶部时,我的第一个项目被重建。第一项是带有可选筹码的卡,这种筹码在发生这种情况时会被取消选择。并且“入口”动画也会重播。我该如何阻止
我知道 docker 有一个 --no-cache=true 选项来强制干净地构建 docker 镜像。然而,对我来说,我真正想做的就是强制最后一步在我的 dockerfile 中运行,这是一个运行
这几天在做SQL调优,在测试的时候发现了一个奇怪的sql: SELECT StatMan([SC0],[SC1], [SB0000]) FROM (SELECT TOP 100 PERCENT [SC
为什么重建失败但没有错误? 从今天早上开始,这个错误不断出现。我构建了整个解决方案(25 个 C# 管理的项目)并出现“全部重建失败”,但没有任何错误! (我有 13 个关于 COM 不支持泛型的警告
我正在使用 Gitlab CI 来存储和部署 docker 镜像,但我遇到了一个大问题。 Gitlab CI 会在每次提交时重建所有图像。 第一步是构建我的常用镜像,大约需要 8 分钟。目前我只修改子
我有一个使用库(DPK/视觉控件)的程序。该库是在 Debug模式下编译的。这意味着优化是关闭的,范围检查是打开的,等等。库设置为“根据需要重建”。我不打算重新分发它(仅供内部使用)。 如果我在“发布
我正在测试 Electron 和串口模块的使用…… 当我运行 electron .命令,出现此错误: The module '…/teste3/node_modules/@serialport/bin
我需要将新生成的 apk 复制到远程机器上,所以目前我在桌面上有一个图标,它会触发 Python 脚本。 我希望这个脚本在重建项目成功后被 Android Studio 自动调用。 我怎样才能做到这一
所以我建立了我的第一个应用程序。这是一个天气应用程序。到目前为止,一切都按预期进行。但是有一个问题,每当我关闭应用程序然后重新打开它时,所有内容都为空(天气预报,位置名称,最高和最低温度)。当我按下刷
我收到命令 drush cache-rebuild 的[错误]找不到驱动程序 以下是 Drush 和 Drupal 版本详细信息,感谢任何帮助。谢谢 最佳答案 我将 wampp 与 PostgreSQ
我刚刚发现(困难的方式),如果您在从 Visual Studio 执行“重建”或“清理 -> 构建”后将应用程序部署到设备,您的应用程序将首先被卸载,然后重新安装,从而导致隔离存储文件被删除。 应用程
如何构建库(静态库或 dll/so),使其对系统的 C 运行时库的 future 更新不敏感? 7月底,微软updated一堆库,包括 C 运行时库。我们的应用程序是使用 MFC/C++/VB 和一些
在我的项目中,我有 2 个模块:app 和 library。当我在 Android Studio 3.0.1 中运行 Rebuild 时,会运行 3 个 gradle 任务: 干净 :library:
我是一名优秀的程序员,十分优秀!