簡體   English   中英

在 flutter 中實現 hero animation 時出錯

[英]Error while implementing hero animation in flutter

所以,我正在嘗試在 flutter 中制作自行車詳細信息 UI,但我似乎無法讓我的英雄 animation 工作。 首先,我列出了帶有圖像的自行車列表,按下時會顯示詳細信息。我試圖在導航到另一個頁面時將英雄 animation 添加到圖像中,但animation無法正常工作

按下圖像時,屏幕導航到另一個頁面

     Padding(
                  padding: const EdgeInsets.symmetric(
                      horizontal: 10.0, vertical: 6.0),
                  child: GestureDetector(
                        onTap: () {

                          Navigator.push(
                              context,
                              PageRouteBuilder(
                                  pageBuilder: (context, a, b) =>
                                      DetailsOfNewBikes(value: item)));
                        },
                        child: Hero(
                          tag:'item.bikeimage',
                                                      child: Container(
                                decoration: BoxDecoration(
                                  image: DecorationImage(
                                    image: NetworkImage(
                                      item.bikeimage,
                                    ),
                                    fit: BoxFit.cover,
                                    colorFilter: ColorFilter.mode(
                                      Colors.black26,
                                      BlendMode.darken,
                                    ),
                                  ),
                                  borderRadius: BorderRadius.circular(10.0),
                                  color: Colors.grey,
                                ),
                                    ),
                        )))

以及圖片中的下一頁我使用了帶有相同標簽的英雄

                  child: new Column(
                children: <Widget>[
                  Hero(
                    tag:'widget.value.bikeimage',
                                          child: Container(
                                            child: Padding(

                      child: Image.network('${widget.value.bikeimage}'),
                      padding: EdgeInsets.symmetric(horizontal: 0.0),
                    ),
                                          ),
                  ),
                  SizedBox(
                    height: 5,
                  ),
                ],
              ),

每個英雄小部件都需要唯一的英雄標簽,以便它可以識別您想要動畫的小部件。

 tag:'back',

在這里,您正在向每個小部件提供回饋,因為您正面臨這個問題。

注意:確保在兩個屏幕中一個 hero 標記必須相同,以便當您從第一個屏幕導航到第二個屏幕小部件時可以找到。

您的英雄 animation 需要相同的tag

嘗試對兩個英雄小部件使用相同的標簽。 在下面的示例中,我使用了back標簽。

試試下面的代碼,它工作得很好:

第一個屏幕

    Padding(
                  padding: const EdgeInsets.symmetric(
                      horizontal: 10.0, vertical: 6.0),
                  child: GestureDetector(
                        onTap: () {

                          Navigator.push(
                              context,
                              PageRouteBuilder(
                                  pageBuilder: (context, a, b) =>
                                      DetailsOfNewBikes(value: item)));
                        },
                        child: Hero(
                          tag:'back',
                                                      child: Container(
                                decoration: BoxDecoration(
                                  image: DecorationImage(
                                    image: NetworkImage(
                                      item.bikeimage,
                                    ),
                                    fit: BoxFit.cover,
                                    colorFilter: ColorFilter.mode(
                                      Colors.black26,
                                      BlendMode.darken,
                                    ),
                                  ),
                                  borderRadius: BorderRadius.circular(10.0),
                                  color: Colors.grey,
                                ),
                                    ),
                        )))

第二個屏幕

   child: new Column(
                children: <Widget>[
                  Hero(
                    tag:'back',
                                          child: Container(
                                            child: Padding(

                      child: Image.network('${widget.value.bikeimage}'),
                      padding: EdgeInsets.symmetric(horizontal: 0.0),
                    ),
                                          ),
                  ),
                  SizedBox(
                    height: 5,
                  ),
                ],
              ),

要了解有關英雄 animation 的更多信息,請查看以下鏈接:

英雄 Animation in Flutter

我希望這有幫助。

Hero tag應該是一個唯一的字符串,但在兩個屏幕上共享。

我相信在您的情況下,您希望將圖像 id 作為標簽,並且在傳遞到下一個屏幕時傳遞相同的 id。 item.bikeimage或你知道的東西是 uniq。

child: Hero(
                      tag: item.id,
                      child: Container(
                            decoration: BoxDecoration(
                              image: DecorationImage(
                                image: NetworkImage(
                                  item.bikeimage,
                                ),
                                fit: BoxFit.cover,
                                colorFilter: ColorFilter.mode(
                                  Colors.black26,
                                  BlendMode.darken,
                                ),
                              ),
                              borderRadius: BorderRadius.circular(10.0),
                              color: Colors.grey,
                            ),
                                ),
                    )))


    child: new Column(
            children: <Widget>[
              Hero(
                tag: widget.value.id,
                child: Container(
                        child: Padding(
                  child: Image.network('${widget.value.bikeimage}'),
                  padding: EdgeInsets.symmetric(horizontal: 0.0),
                ),
                                      ),
              ),
              SizedBox(
                height: 5,
              ),
            ],
          ),

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM