簡體   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