我正在尝试创建一个Dismissible小部件,但我想拥有路由器历史记录,这是指当我使用onDismissed事件转到另一条路线时,当用户在该新 View 上按下后退按钮时,将返回到第一个 View 。
这是我的小部件。
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));
}
}
我将不胜感激。
尝试以这种方式执行操作时遇到问题。
最佳答案
该代码块使您可以根据长度创建随机字符串。将此添加到您的代码。
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));
}
}
关于dart - 将pushNamed与Dismissible Widget一起使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54138473/