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

10-09 03:22