یکی از معایب یادگیری فلاتر یا هر فریم ورک دیگه با ویدیوهای یوتیوبی اینه که دقیقا شما نمیدونید چرا دارید از یه ویجت یا المنت استفاده میکنید!!
مثلا اگه من ازتون بپرسم چرا دارید از کلید ها در فلاتر استفاده میکنیم، خیلی از برنامه نویس های تازه کار نمیتونن جواب دقیق بدن.
زمانی که کاربر از یک شاخه به شاخه دیگه از درخت ویجت میره، فلاتر از کلید ها برای ذخیره وضعیت ویجت ها در درخت ویجت استفاده میکنه، اغلب هم در ویجت های stateful استفاده میشه.
بذار برگردیم به بحث خودمون، BuildContext !!
توی کد بالا از BuildContext استفاده شده و در متد بیلد هم استارت میخوره . از context هم ما توی Navigator, MediaQuery, ListView builder و همه ی ویجت هایی که متد builder دارند استفاده میکنیم. اما دلیلش چیه؟!
خب دلیلش اینه که، ویجت ها که کارشون ساخت رابط کاربری هستش، هیچ ایده ای ندارن که چه رابطه ای با ویجت های کناریشون دارن!! این رو هم باید بدونید که ویجت ها به خودی خود نمیدونن که در کجا از اوناها نمونه گیری شده و اطلاعاتی رو در این مورد ذخیره نمیکنند ،یعنی در واقع به خودی خود نمیتونن بفهمن که کجای صفحه قرار گرفتند.
خب حالا چطوری کار میکنند؟ً؟!!
اول از همه باید بدونیم که دقیقا ما از Context کجای کدمون استفاده میکنیم!، اون ها رو در ویجت های Stateless یا stateful استفاده میکنیم!
بذارید کمی وارد جزئیات بشیم!
همونجوری که میبینید ویجت Stateful هم از Widget اکستند(extend) شده که ویجت بودن stateful رو نشون میده و اگه بیشتر واردش بشیم(تصویر زیر) میبینیم که تمام گزینه ها و مواردی که هر ویجت دیگه داره رو داره اما یکی از اون ویژگی های بخصوص خیلی مهم هستش و اون هم createElement method هست. وظیفه این متد هم ساختن المنت ها (element) هست و این المنت ها همون اشیاء یا object هایی هستند که مسئولیت ثبت و نگهداری مکان ویجت ها و همچنین مکان children ها و parent ها رو برعهده دارند.
وقتی شما یک ویجت جدید ایجاد میکنید،فریم ورک فلاتر، متد createElement رو صدا میزنه و اون المنتی که برمیگردونه، حاوی اطلاعات مورد نیازی هست که در زمان ساخت و اجرای برنامه کمک میکنه به پیدا کردن جایگاه اون ویجت در صفحه.
اوکی ولی خب چرا باید از BuildContext استفاده کنیم؟
قبل از اون باید بفهمیم که المنت چی هست.
همونجوری که توی تصویر بالا مشاهده میکنید Element در واقع همون BuildContext هستش.
دفعه بعد که خواستید از BuildContext استفاده کنید، یادتون باشه که وظیفش ودر واقع یادآوری مکان ویجت روی صفحه هستش.
پ ن: این پست ترجمه شده از مقاله ای در وبسایت مدیوم هست.
لینک پست: https://medium.com/@varunlohade/what-exactly-is-buildcontext-dd98403e2da2