我正在尝试在 Flutter 中的 GridView 的两个元素之间制作切换动画。
我已经尝试过 PositionedTransition,以及带有 Tween 的常规动画。这些元素根本没有动画。
import 'package:flutter/material.dart';
class HomeScreen extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return _HomeScreenState();
}
}
class _HomeScreenState extends State<HomeScreen> {
@override
Widget build(BuildContext context) {
return Container(
alignment: Alignment.center,
child: GridView.count(
shrinkWrap: true,
crossAxisSpacing: 4,
mainAxisSpacing: 4,
crossAxisCount: 5,
children: List.generate(25, (index) {
return GestureDetector(
onVerticalDragUpdate: (drag) {
if (drag.delta.dy > 10) print('down');
if (drag.delta.dy < -10) print('up');
},
onHorizontalDragUpdate: (drag) {
if (drag.delta.dx > 10) print('right');
if (drag.delta.dx < -10) print('left');
},
onHorizontalDragEnd: /* ANIMATE NOW */,
onVerticalDragEnd: /* ANIMATE NOW */,
child: Container(
decoration: BoxDecoration(
color: Colors.green,
borderRadius: BorderRadius.all(Radius.circular(5.0))
),
),
);
}),
)
);
}
}
理想情况下,我希望能够在网格的某个元素上向左/向右/向上/向下滑动,然后将该元素与其旁边的相应元素切换(相对于滑动方向)。
最佳答案
我放弃了尝试使用 GridView。然而,我确实找到了一种通过 Stack 和 SlideTransition 获得相同结果的方法:
import 'package:flutter/material.dart';
class HomeScreen extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return _HomeScreenState();
}
}
class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
String move;
List<Tween> _switchTween = List();
List<Animation> _switchAnim = List();
List<AnimationController> _switchAnimCont = List();
double width;
@override
void initState() {
// Add a tween and a controller for each element
for (int i = 0; i < 5; i++) {
_switchAnimCont.add(AnimationController(
vsync: this,
duration: const Duration(milliseconds: 100),
));
_switchTween.add(Tween<Offset>(begin: Offset.zero, end: Offset(0, 1)));
_switchAnim.add(_switchTween[i].animate(_switchAnimCont[i]));
}
super.initState();
}
@override
Widget build(BuildContext context) {
width = MediaQuery.of(context).size.width/5;
return Stack(
children: <Widget>[
square(0, 0, 0),
square(1, width, 0),
square(2, 2*width, 0),
square(3, 3*width, 0),
square(4, 4*width, 0),
],
);
}
Widget square(int index, double left, double bottom) {
return Positioned(
left: left,
bottom: bottom,
width: width,
height: width,
child: SlideTransition(
position: _switchAnim[index],
child: GestureDetector(
// Figure out swipe's direction
onHorizontalDragUpdate: (drag) {
if (drag.delta.dx > 10) move = 'right';
if (drag.delta.dx < -10) move = 'left';
},
onHorizontalDragEnd: (drag) {
switch(move) {
case 'right' : {moveRight(index); break;}
case 'left' : {moveLeft(index); break;}
}
},
child: Container(
margin: EdgeInsets.all(2),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.all(Radius.circular(5.0))
),
),
),
),
);
}
void moveRight(int index) {
// Move the grid element that you swiped on
_switchTween[index].end = Offset(1, 0);
_switchAnimCont[index].forward();
// Move the element next to it the opposite way
_switchTween[index+1].end = Offset(-1, 0);
_switchAnimCont[index+1].forward();
// You could need to refresh the corresponding controller to animate again
}
void moveLeft(int index) {
_switchTween[index].end = Offset(-1, 0);
_switchAnimCont[index].forward();
_switchTween[index-1].end = Offset(1, 0);
_switchAnimCont[index-1].forward();
}
}
这将绘制 5 个白色方 block ,在其中一个方 block 上向左或向右滑动,相应的方 block 将与旁边的方 block 交换位置。它也可以扩展为垂直使用(假设添加了新行)。
关于animation - 如何在Flutter中制作两个GridView元素的切换动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54745362/
出于纯粹的兴趣,我很好奇如何按顺序创建PI,而不是在过程结果之后生成数字,而是让数字在过程本身生成时显示。如果是这种情况,那么数字可以自行产生,我可以对以前看到的数字实现垃圾收集,从而创建一个无限系列。结果只是在Pi系列之后每秒生成一个数字。这是我通过互联网筛选的结果:这是流行的计算机友好算法,类机器算法:defarccot(x,unity)xpow=unity/xn=1sign=1sum=0loopdoterm=xpow/nbreakifterm==0sum+=sign*(xpow/n)xpow/=x*xn+=2sign=-signendsumenddefcalc_pi(digits
如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby
我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%
exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby中使用两个参数异步运行exe吗?我已经尝试过ruby命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何rubygems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除
我正在从erb文件切换到HAML。我将hamlgem添加到我的系统中。我创建了app/views/layouts/application.html.haml文件。我应该只删除application.html.erb文件吗?此外,仍然有/public/index.html文件被呈现为默认页面。我想创建自己的默认index.html.haml页面。我应该把它放在哪里以及如何使系统呈现该文件而不是默认索引文件?谢谢! 最佳答案 是的,您可以删除任何已转换为HAML的View的ERB版本。至于你的另一个问题,删除public/index/h
鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende
我正在为一个项目制作一个简单的shell,我希望像在Bash中一样解析参数字符串。foobar"helloworld"fooz应该变成:["foo","bar","helloworld","fooz"]等等。到目前为止,我一直在使用CSV::parse_line,将列分隔符设置为""和.compact输出。问题是我现在必须选择是要支持单引号还是双引号。CSV不支持超过一个分隔符。Python有一个名为shlex的模块:>>>shlex.split("Test'helloworld'foo")['Test','helloworld','foo']>>>shlex.split('Test"
我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121
这可能是个愚蠢的问题。但是,我是一个新手......你怎么能在交互式rubyshell中有多行代码?好像你只能有一条长线。按回车键运行代码。无论如何我可以在不运行代码的情况下跳到下一行吗?再次抱歉,如果这是一个愚蠢的问题。谢谢。 最佳答案 这是一个例子:2.1.2:053>a=1=>12.1.2:054>b=2=>22.1.2:055>a+b=>32.1.2:056>ifa>b#Thecode‘if..."startsthedefinitionoftheconditionalstatement.2.1.2:057?>puts"f
我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R