将pushNamed与Dismissible Widget一起使用

时间:2019-01-10 23:37:50

标签: dart flutter

我正在尝试创建一个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));
    }
  }

我将不胜感激。 尝试以这种方式执行操作时遇到问题。

1 个答案:

答案 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));
    }
  }