ویجت Hero در گوگل فلاتر (Flutter) — از صفر تا صد

۲۸۵ بازدید
آخرین به‌روزرسانی: ۱۳ شهریور ۱۴۰۲
زمان مطالعه: ۳ دقیقه
ویجت Hero در گوگل فلاتر (Flutter) — از صفر تا صد

در این مقاله از سلسله مقالات بررسی گوگل فلاتر در بلاگ فرادرس، به بررسی ویجت Hero گوگل فلاتر می‌پردازیم.

997696

مقدمه‌ای بر انیمیشن‌های Hero

انیمیشن Hero در یک جمله صرفاً یک عنصر از صفحه است که وقتی اپلیکیشن به صفحه بعدی می‌رود به آن صفحه حرکت می‌کند.

انیمیشن‌های Hero، یک عنصر مانند یک آیکون را انتخاب می‌کنند. این آیکون از این پس Hero نامیده می‌شود و زمانی که گذار صفحه (معمولاً از طریق کلیک روی آیکون) آغاز می‌شود، این Hero به صفحه بعدی اپلیکیشن پرواز می‌کند. زمانی که کاربر دوباره به صفحه قبلی بازگردد، انیمیشن در جهت دیگر اجرا می‌شود و آیکون به محل قبلی خود بازمی‌گردد. ما در این مقاله نه تنها مبانی مقدماتی انیمیشن‌های Hero را بررسی می‌کنیم، بلکه آن را سفارشی‌سازی نیز می‌کنیم.

ایجاد یک انیمیشن ساده Hero

انیمیشن‌های Hero احتمالاً یکی از ساده‌ترین انیمیشن‌هایی هستند که می‌توان در فلاتر اجرا کرد و نیازمند تنظیمات زیادی نیستند. اگر نگاهی به تصویر متحرک نمونه فوق بیندازید می‌بینید که آیکون اپلیکیشن مربوطه در هر دو صفحه وجود دارد. تنها چیزی که برای پیاده‌سازی این انیمیشن نیاز داریم، این است که به فلاتر بگوییم این دو صفحه و جایگاه آیکون به هم لینک شده‌اند.

این کار از طریق قرار دادن یک عنصر مانند آیکون در یک ویجت Hero صورت می‌گیرد.

Hero(
  tag: "DemoTag",
  child: Icon(
    Icons.add,
    size: 70.0,
  ),
),

ما یک تگ نیز برای آن ارائه می‌کنیم تا این Hero خاص یک نام نیز داشته باشد. این وضعیت ضروری است، زیرا اگر چندین Hero در یک صفحه داشته باشیم، هر Hero می‌بایست بدانند که به کجا باید پرواز کنند.

اکنون اپلیکیشن می‌داند که یک ویجت Hero وجود دارد که می‌خواهد به صفحه بعدی پرواز کند. اینک همه آن چه نیاز داریم تعیین مکانی برای پرواز است.

Hero(
  tag: "DemoTag",
  child: Icon(
    Icons.add,
    size: 150.0,
  ),
),

افزودن کد فوق نتیجه زیر را به دست می‌دهد:

انیمیشن Hero
انیمیشن Hero ایجاد شده با کد فوق

سفارشی‌سازی انیمیشن‌های Hero

ویجت Hero امکان سفارشی‌سازی جنبه‌های مختلف انیمیشن را نیز فراهم می‌کند. برخی از قابلیت‌های آن را در ادامه بررسی می‌کنیم.

افزودن placeholder

پس از این که ویجت به مکان مورد نظر پرواز کرد و پیش از آن که به مقصد برسد، یک فضای خالی در مقصد وجود دارد. می‌توان به این مکان یک placeholder اضافه کرد. در این کد از CircularProgressIndicator به عنوان یک placeholder استفاده می‌کنیم.

Hero(
    tag: "DemoTag",
    child: Icon(
      Icons.add,
      size: 150.0,
    ),
    placeholderBuilder: (context, widget) {
      return Container(
        height: 150.0,
        width: 150.0,
        child: CircularProgressIndicator(),
      );
    },
  ),

ما از placeholderBuilder برای ساخت placeholder استفاده می‌کنیم و ویجتی که می‌خواهیم placeholder داشته باشد را بازمی‌گردانیم.

CircularProgressIndicator
CircularProgressIndicator جای ویجت hero را تا زمانی که برسد نگه می‌دارد

تغییر دادن ویجت Hero

فلاتر امکان تغییر دادن ویجتی که در عمل از یک صفحه به صفحه دیگر پرواز می‌کند را بدون تغییر دادن ویجت‌های دیگر روی دو صفحه فراهم ساخته است. برای نمونه در مثال زیر از یک آیکون راکت به جای آیکون + به عنوان Hero استفاده می‌کنیم و نیازی به تغییر دادن فرزندان ویجت‌های Hero نیز داریم:

آیکون Hero
آیکون Hero تغییر یافته است، اما آیکون‌های نهایی بدون تغییر مانده‌اند

این کار از طریق استفاده از پارامتر flightShuttleBuilder ممکن شده است.

Hero(
  tag: "DemoTag",
  child: Icon(
    Icons.add,
    size: 150.0,
  ),
  flightShuttleBuilder: (flightContext, animation, direction,
      fromContext, toContext) {
    return Icon(FontAwesomeIcons.rocket, size: 150.0,);
  },
),

متد flightShuttleBuilder 5 پارامتر دارد و انیمیشن و همچنین جهت انیمیشن را تعیین می‌کند.

در حال حاضر اندازه آیکون راکت در هر دو جهت برابر با 150.0 است. می‌توان با استفاده از پارامتر direction در متد، اندازه متفاوتی برای هر جهت تعریف کرد:

if(direction == HeroFlightDirection.push) {
  return Icon(
    FontAwesomeIcons.rocket,
    size: 150.0,
  );
} else if (direction == HeroFlightDirection.pop){
  return Icon(
    FontAwesomeIcons.rocket,
    size: 70.0,
  );
}
اندازه‌ها در جهت‌های مختلف، متفاوت هستند.

اجرای انیمیشن‌های Hero با استفاده از سوایپ به عقب در iOS

انیمیشن‌های HERO به طور پیش‌فرض هنگامی که دکمه بازگشت در iOS فشرده می‌شود اجرا می‌گردند؛ اما هنگام سوایپ کردن به عقب اجرا نمی‌شوند.

استفاده از دکمه بازگشت:

دکمه بازگشت باعث آغاز انیمیشن می‌شود

استفاده از سوایپ به عقب:

سوایپ کردن به عقب، انیمیشن Hero را آغاز نمی‌کند.

برای حل این مشکل کافی است transitionOnUserGestures را روی هر دو ویجت Hero به صورت true تنظیم کنیم. این مقدار به طور پیش‌فرض برابر با False است.

Hero(
  tag: "DemoTag",
  child: Icon(
    Icons.add,
  ),
  transitionOnUserGestures: true,
),

این کار باعث آغاز انیمیشن Hero در زمان سوایپ کردن به عقب می‌شود.

بدین ترتیب با روش اجرا و ماهیت انیمیشن‌ها و ویجت Hero آشنا شدیم. هرگونه دیدگاه یا پیشنهاد خود را می‌توانید در بخش نظرات نوشته با ما و دیگر خوانندگان مجله فرادرس در میان بگذارید.

اگر این مطلب برایتان مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

==

بر اساس رای ۱ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
flutter-community
۲ دیدگاه برای «ویجت Hero در گوگل فلاتر (Flutter) — از صفر تا صد»

سلام
شما باید یک ویجت هیرو در دو صفحه با تگ های یکسان بزارید.
اونایی که یک تگ دارن خودشون میرن سر جاشون

اگر امکان داده بصورت مشخص و ساده کدهای صفحه اول و کدهای صفحه دوم رو قرار بدین ، من اخرش نفهمیدم در صفحه دوم باید کدها به چه شکلی قرار بگیره ، اگه چند تا تصویر در صفحه اول باشه وبخایم رو هرکدوم که زدیم با هیرو به صفحه دوم بره چیکار کنیم ؟؟

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *