繁体   English   中英

将 pushNamed 与 Dismissible 小部件一起使用

[英]Use pushNamed with Dismissible Widget

我正在尝试创建一个 Dismissible 小部件,但我想拥有路由器历史记录,我的意思是当我使用 onDismissed 事件转到另一条路线时,当用户按下该新视图上的后退按钮时,将返回到第一个。

这是我的小部件。

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)
}

然后转到您的 Dismissable 小部件并用您的字符串替换vk 神奇的部分来了,哈哈。 您必须在onDismissed更改vk值。 这会将一个新值传递给 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));
    }
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM