我正在尝试创建一个Dismissible小部件,但我想拥有路由器历史记录,这意味着当我使用onDismissed事件转到另一条路线时,当用户在该新视图上按下后退按钮时,将返回到第一个视图。 / p>
这是我的小部件。
Dismissible(
key: new ValueKey("dismiss_key"),
direction: DismissDirection.horizontal,
child: Container(child: this.getTopPlacesSubscription()),
onDismissed: (direction) {
if (direction == DismissDirection.endToStart) {
Navigator.of(context).pushNamed(Router.getRoute(Routes.map));
}
if (direction == DismissDirection.startToEnd) {
Navigator.of(context)
.pushNamed(Router.getRoute(Routes.camera));
}
}
我将不胜感激。 尝试以这种方式执行操作时遇到问题。
答案 0 :(得分:1)
此代码块使您可以根据长度创建随机字符串。将此添加到您的代码。
import 'dart:math';
String _randomString(int length) {
var rand = new Random();
var codeUnits = new List.generate(
length,
(index){
return rand.nextInt(33)+89;
}
);
return new String.fromCharCodes(codeUnits);
}
在您的状态下,定义一个新变量并为其赋予一个随机值。
String vk;
@override
void initState() {
this.vk = _randomString(10)
}
然后转到“可禁用”窗口小部件,并将vk
替换为您的字符串。这里是神奇的部分,哈哈。您必须在vk
中更改您的onDismissed
值。这会将新值传递给Dismissable键,因此Flutter会将其识别为新的Widget,这可以防止发生错误。
Dismissible(
key: new ValueKey(vk),
direction: DismissDirection.horizontal,
child: Container(child: this.getTopPlacesSubscription()),
onDismissed: (direction) {
setState(() {
this.vk = _randomString(10);
});
if (direction == DismissDirection.endToStart) {
Navigator.of(context).pushNamed(Router.getRoute(Routes.map));
}
if (direction == DismissDirection.startToEnd) {
Navigator.of(context)
.pushNamed(Router.getRoute(Routes.camera));
}
}