flutter - 如何在 Flutter 中使用参数更改英雄动画的持续时间
问题描述
这是我作为要点的代码(我在 dartpad.dev 中的代码的交互式版本)
关于我试图用这个应用程序做的事情的简要说明:
我有两个页面
/
,我想在 TextField 中键入一个字符串,它将同时开始出现在 中appBar
,还有另一个按钮,当你按下它时,它将带你到另一个页面(Home
小部件),但是text
你写的那个/
页面。我希望这个过渡就像一个英雄动画,其中从appBar
页面/
到flies
的body
文本Info
我以前使用
Navigator.pushNamed(context, "Info", arguments: {"text": myController.text});
路由 到 新 页面 并 传递 我 想 在那里 显示 的 文本 . 我 能够 做到 , 但 即使 在 配置 模式 , 动画 也 太快
但是我从这个问题得到的答案是使用
Navigator.push(
context,
PageRouteBuilder(
transitionDuration: Duration(seconds: 2),
pageBuilder: (_, __, ___) => Page2())
),
但问题是,Navigator.push(context, PageRouteBuilder( ... ) )
不允许你传递参数,我绝对希望能够做到这一点。
解决方案
如果您可以使用PageRouteBuilder 类控制过渡动画,那么您唯一关心的就是传递数据。现在,我敢肯定,你错过了这个,这是:
将数据作为参数传递给 Flutter 中的类。你不必总是喜欢这样的东西
arguments: {}
。
现在,我的意思是,Flutter 中的每个类都可以接受数据作为参数,你是怎么做到的。
- 创建一个接受参数的内容[你已经完成了]
- 在使用时传递类中的数据,在我们的例子中
Info(pass_it_here)
[现在必须完成]
我们如何在代码中实现这一点?
因此,您只需在转换时传递如下所述的数据。您的 Info 类正在接受数据。所以你需要做的就是实现你想要的,这是:
Navigator.push(
context,
PageRouteBuilder(
transitionDuration: Duration(seconds: 2),
pageBuilder: (_, __, ___) => Info(text: myController.text) // <-- here is the magic
)
)
建议:
如果你为一个类定义参数,让我们以Info
唯一的例子为例,请声明它为final。我知道您将更改数据,但您可以将内容复制到局部变量并做任何您想做的事情。
例子
class Info extends StatefulWidget {
final String text; // <-- Declare this as final
Info({this.text});
@override
_InfoState createState() => _InfoState();
}
在主类中使用 @immutable 数据:
class _InfoState extends State<Info> {
// here how you are just copying the data to the local variable
// var _myText = widget.text;
String _myText = "";
// or you can do this via @initState
@override
void initState(){
super.initState();
_myText = widget.text;
}
// Now use your variable _myText however you want
}
推荐阅读
- javascript - php navtab(引导程序)链接到包含页面的特定选项卡
- html - 如何将 npm CSS 包导入 Codepen 项目?
- visual-studio - 如何将 x86 和 x64 asm 文件包含到单个 Visual Studio 项目中?
- css - 显示 flex 和垂直对齐中间,而不并排移动内容?
- python - Semi-Interactive Pandas Dataframe in a GUI
- java - JavaMelody 抛出 WebBeansDeploymentException
- javascript - 赛普拉斯错误:错误:无法从“/Users/stein/node_modules/parse5/lib/tokenizer”中找到模块“./preprocessor”
- apache - apache - 如何重定向到另一台服务器
- python - 更新现有 SQLite 记录中的 BLOB 字段的语法?
- python - 正则表达式,选择多个括号之间的字符