PracticU

הסבר על Provider ב-Flutter

בלי כתוביותעם כתוביות
PracticU › קורס פלאטר - Flutter - שפת DART של גוגל למובייל - פיתוח אפליקציות לאנדרואיד ואייפון › הסבר על Provider ב-Flutter
מילון מושגים:
Flutter - מסגרת של גוגל לבניית אפליקציות לנייד, לרשת ולמחשב מקוד אחד משותף.
אובייקט - יחידה בתכנות מונחה עצמים שמאגדת נתונים (תכונות) ופעולות (מתודות). נוצר בדרך כלל ממחלקה המשמשת כתבנית.
ספרייה - אוסף קוד מוכן, כמו פונקציות ומחלקות, שמפתחים משתמשים בו בתוכניותיהם במקום לכתוב הכול מחדש.
מחלקה - תבנית בתכנות מונחה עצמים שמגדירה אילו נתונים ופעולות יהיו לאובייקטים שנוצרים ממנה.
עדכון - שינוי שמביא תוכנה או מערכת לגרסה חדשה יותר, כדי לתקן תקלות, לסגור חולשות אבטחה או להוסיף יכולות.
פונקציה - קטע קוד בעל שם שמבצע משימה מוגדרת, מקבל ערכי קלט (פרמטרים) ויכול להחזיר תוצאה. מאפשרת לארגן קוד ולהשתמש בו שוב.
פרמטר - ערך שמועבר לפונקציה או לפקודה כקלט, ומשפיע על אופן פעולתן ועל התוצאה שהן מחזירות.

הסבר על Provider ב-Flutter
Provider מאפשר לשתף אובייקט אחד בין כל חלקי האפליקציה. כשהאובייקט משתנה, כל מי שמאזין לו מתעדכן, בלי להעביר אותו ממסך למסך.
הקמה
1. הספרייה: מוסיפים את provider לקובץ pubspec.yaml ומריצים packages get.
2. מחלקת ספק: UserProvider מכיל את המשתמש בשדה פרטי, עם גטר ציבורי בשם user. מחלקה זו משתמשת ב-with ChangeNotifier, שהוא מיקסין שמוסיף לה יכולת להודיע לצרכנים על שינויים.
3. שינוי ועדכון: הפונקציות addHobby ו-deleteHobby מוסיפות או מוחקות תחביב, וקוראות ל-notifyListeners כדי לעדכן את כל המאזינים.
עטיפת האפליקציה
1. ChangeNotifierProvider: עוטף את MaterialApp, ומקבל פונקציה בשם create שמחזירה מופע חדש של UserProvider.
2. מופע יחיד: מובטח שיש רק מופע אחד של הספק, והוא זמין מכל מקום באפליקציה.
צריכת המידע
1. provider.of: בתוך הבילד מביאים את המופע ומגיעים לגטר user. בפונקציות לחיצה מוסיפים listen: false, אחרת נזרקת שגיאה.
2. Consumer: ווידג'ט שמרענן רק את עצמו כשהספק משתנה, בלי לבנות מחדש את כל העץ.
3. ווידג'ט נפרד: HobbiesCounter מציג את מספר התחביבים דרך Consumer, בלי לקבל את המשתמש כפרמטר.
הבנה טובה של Provider חשובה מאוד לפיתוח אפליקציה ב-Flutter.
השיעור הבא בקורס: הסבר על Google Map - API

פרקי ההרצאה: הסבר על Provider ב-Flutter

  1. 00:00

    למה צריך Provider לשיתוף מידע

  2. 00:39

    איך Provider עובד: מופע אחד לכל האפליקציה

  3. 01:14

    שימוש ב-Consumer לעדכון הווידג'ט

  4. 02:24

    התקנת חבילת Provider לפרויקט

  5. 03:00

    מחלקת UserProvider עם ChangeNotifier

  6. 04:12

    פונקציות addHobby ו-notifyListeners

  7. 06:06

    עטיפת MaterialApp ב-ChangeNotifierProvider

  8. 08:09

    שימוש בפרוביידר במסך הלוגין

תמלול ההרצאה: הסבר על Provider ב-Flutter

הטקסט המלא של הדקות הראשונות בהרצאה «הסבר על Provider ב-Flutter» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:03

    אז בשיעור הקודם הבנו איך להעביר פרמטרים ממסך למסך. אבל נחשפנו גם לבעיה המאוד קריטית בפלאטר שאם אנחנו רוצים לשתף אובייקט מסוים עם כל האפליקציה אנחנו ממש נהיה חייבים להעביר את אותו אובייקט ממסך למסך למסך וגם אם אנחנו מייצרים וידג'טים משלנו אנחנו נצטרך להעביר את אותו אובייקט

  2. 00:22

    גם לאותם הווידג'טים מובן שלהתעסק עם כל הדבר הזה זה סרבול אחד גדול ואף אחד בטח לא רוצה את זה כאן בדיוק נכנס לתמונה הפרוביידר.

  3. 00:31

    פרוביידר הוא כלי שמאפשר לנו לשתף אובייקט אחד או כמה אובייקטים עם כל האפליקציה. מובטח לנו שיהיה רק מופע אחד של אותו אובייקט, ונוכל לגשת אליו מכל וידג'ט ווידג'ט בכל עץ הווידג'טים של האפליקציה שלנו.

  4. 00:45

    איך זה עובד? אנחנו כמובן ניגע בזה בצורה מעשית בשיעור הזה, אבל בגדול אנחנו מייצרים מופע של פרוביידר, בדוגמה שלנו נקרא לו User Provider כי הוא מספק לנו את היוזר, ואנחנו עוטפים את ה-Material App שלנו, כותבים אותו בווידג'ט אחד, רמה אחת נוספת מלמעלה, וזה אמור להיראות משהו כזה.

  5. 01:05

    אז יש לנו מופע של User Provider, והבן שלו הוא ה-Material App. עכשיו, מובטח לנו שיש רק מופע אחד כזה של User Provider, ובכל מקום באפליקציה שאנחנו רוצים להשתמש, לצרוך את אותו אובייקט, את אותו מופע, אנחנו פשוט מוסיפים ווידג'ט שנקרא Consumer.

  6. 01:25

    ה-Consumer הזה, במקרה הזה, הוא יהיה גם מסוג של User Provider, וברגע שיש עדכון כלשהו של אותו יוזר, בדוגמה שלנו, שמישהו הוסיף תחביב או מחק תחביב, אנחנו פשוט נעדכן ספציפית את הווידג'ט הזה בלבד, ולא נרדר את כל העץ מההתחלה.

  7. 01:42

    עכשיו, את אותו קונסומר אפשר לשים בכמה מקומות בעץ וברמות שונות בעץ. לדוגמה, אם כאן למטה הוספתי איזשהו קאסטום ווידג'ט משלי, והקאסטום ווידג'ט הזה צריך להשתמש במופע של יוזר, אז אני יכול לעטוף גם אותו בקונסומר מסוג של יוזר פרוביידר ולהשתמש באותו מופע, ספציפית כאן.

  8. 01:59

    ושוב אני חוזר, הדבר הכי יפה בפרוביידר זה שברגע שיש עדכון מסוים במופע, כל הצמתים שמאזינים לאותו מופע יתרעננו באותו רגע, גם אם הם נמצאים במסכים שונים לגמרי.

  9. 02:12

    אז עכשיו, כשיש לנו הבנה תיאורטית על הפרוביידר, אנחנו נצלול לו קוד ונראה איך מיישמים בדיוק כל חלק. אוקיי, אז בשלב הראשון אנחנו נוסיף את הספרייה Provider לפרויקט שלנו.

  10. 02:23

    אז אם נרשום בגוגל Provider Dart או Provider Flutter, מיד נגיע לעמוד הזה, ונלחץ על Installing, וכמו שאנחנו כבר יודעים נעתיק את השורה הזאת לפרויקט שלנו, לתוך pubspec.yaml.

  11. 02:36

    נשמור ונלחץ על Packages Get. אגב, אם אתם חווים איזושהי בעיה עם התקנה של הספרייה הזאת או כל ספרייה אחרת, תוכלו לנסות לעדכן את גרסת ה-flutter שלכם, או על ידי לחיצה על פלאטר אפגרייד, או על ידי רישום של הפקודה פלאטר אפגרייד כאן בטרמינל.

  12. 02:51

    פלאטר רווח אפגרייד, אוקיי? מעולה, אז הוספנו את הספרייה, ועכשיו נוכל להגדיר את הפרוביידר שלנו. אז ניגש למודל, ונוסיף כאן קובץ Dart חדש, נקרא לו UserProvider, כאן תהיה לנו מחלקה Class UserProvider with, אני תכף אסביר מה זה with, Change Notifier.

  13. 03:18

    אוקיי, אז מה זה ה-with הזה? בפלאטר יש לנו שלוש אפשרויות להשתמש במחלקות אחרות. אחת זה על ידי שימוש במילה Extends, כך אנחנו יורשים ממחלקה אחרת.

  14. 03:27

    השנייה זה על ידי שימוש במילה Implement, כך אנחנו מממשים אינטרפייס כלשהו, ממשק כלשהו. והשלישית היא באמצעות שימוש במילה With, כך אנחנו מייבאים מיקסינג.

  15. 03:39

    יש לנו קלאס, מחלקה, יש לנו ממשק אינטרפייס ויש לנו מיקסינג. במיקסינג נשתמש כשאנחנו רוצים להגדיר אסופה של פונקציות נוכל לערבב אותם to mix עם מחלקה אחרת.

  16. 03:50

    אז יש לנו את ה-user provider שמשתמש ב-change notifier. וב-user provider הזה נרצה להגדיר קודם כל את המופע של ה-user, user-user, הוא כמובן יהיה private אז נוסיף underscore לפני ו-import ו-constructor ועכשיו נרצה להוסיף גם פונקציה להוספת תחביב ולמחיקת

  17. 04:12

    תחביב. אז נגדיר כאן פונקציה addHobby שמקבלת הובי כלשהו ומה שהיא עושה היא אומרת user.hobbies.add אותו הובי ועכשיו החלק המעניין כאן נפנה לפונקציה notify listeners זאת אומרת שכל מי שפונה ל-add הובי אנחנו נוסיף את התחביב לרשימת התחביבים של היוזר ומיד נפנה ל-notify listeners שבעצם יעדכן את כל מי שמאזין לפרוביידר שלנו כל מי

  18. 04:41

    שמאזין ליוזר פרוביידר מיד יקבל עדכון לא חשוב באיזה מסך ובאיזה ווידג'ט באותו אופן נבנה גם פונקציה delete הובי, שמקבלת גם כאן הובי, סליחה, יש לי כאן שלוש ביז, ו-user, הוביז, רימוב, סליחה, רימוב של אותו הובי שקיבלנו,

  19. 05:07

    ומיד נפנה גם ל-Notify listeners. נבנה גם איזשהו גטר ליוזר שלנו, אז user.get זאת תהיה פונקציה שמחזירה פשוט את היוזר שלנו. מעולה, אז בואו נסכם את מה שקרה פה.

  20. 05:21

    הגדרנו מחלקה בשם UserProvider, זה בעצם הפרוביידר שלנו, הוא מחזיק מופע של יוזר פרטי, עם גטר, בקונסטרקטור אנחנו נקבל איזשהו יוזר כדי להתחיל את היוזר שלנו, ויש לנו בנוסף בפרוביידר שתי אפשרויות, אחת זה להוסיף תחביב

  21. 05:36

    ליוזר, והשנייה זה למחוק תחביב מהיוזר. כל אחת מהפעולות האלו תעדכן את כל ה-Consumers, את כל הצרכנים שמאזינים ל-User Provider שלנו.

  22. 05:47

    אז עד כאן זה מאוד מאוד פשוט, אבל לא עשינו שום דבר מעשי, זאת אומרת רק הגדרנו את ה-Provider שלנו ולא השתמשנו בו. לכן, כמו שתיארנו בגרף הזה, נעטוף את ה-Material App שלנו עם User Provider.

  23. 05:58

    בואו נראה איך עושים את זה. אז ניגש לקובץ המיינד שלנו, ובמקום להחזיר Material App אנחנו נעטוף אותו Wrap with Widget, והווידג'ט שאנחנו נוטפים אותו יהיה פשוט Change Notifier Provider.

  24. 06:15

    Change Notifier Provider מסוג של User Provider. זאת אומרת שה-Change Notifier Provider הוא מחלקת טמפלט או מחלקה שיכולה להתמודד עם כמה סוגים של פרוביידרים, ואנחנו בוחרים להשתמש ב-User Provider שהגדרנו עכשיו.

  25. 06:31

    ה-Change Notifier Provider מקבל שתי שרדות עיקריים. אחד זה ה-Child, שכמובן נהיה ה-Material App, והשני זה Create.

  26. 06:39

    ב-Create אנחנו בעצם מייצרים מופע של אותו User Provider. אז המופע הזה הוא על ידי שימוש בפונקציה שמקבלת קונטקסט, והיא מחזירה את המופע.

  27. 06:49

    אז כאן נחזיר פשוט מופע חדש של ה-User Provider שלנו. User Provider, ואנחנו רואים שהוא מקבל כפרמטר מופע של User.

  28. 06:57

    אז לפני שניצור פה מופע חדש של User, אני רוצה להסביר שוב את מה שקרה פה, כי זה מאוד מאוד חשוב. אז בהתחלה הראש של העץ שלנו היה המטריאל אפ, ועכשיו עטפנו אותו עם וידג'ט שנקרא Change Notifier Provider מסוג User Provider שהגדרנו, זאת אומרת שאנחנו יכולים להגדיר כמה פרוביידרים שאנחנו רוצים.

  29. 07:13

    במקרה הזה אנחנו עוטפים אותו עם Change Notifier Provider מסוג User Provider. ה-Change Notifier Provider מקבל שתי פרמטרים, אחד זה Child כמעט כמו כל וידג'ט בפלאטר והשני זה Create.

  30. 07:26

    Create היא פונקציה שמקבלת קונטקסט ומחזירה לנו מופע של אותו User Provider. זה הכל בעיקרון. אז בואו ניתן פה מופע חדש של יוזר, אז נגדיר כאן יוזר חדש, איי-די שלו יהיה סתם אחד, השם שלו יהיה קובי, היוזרניים יהיה פשוט יוזר, אימייל יהיה קובי, שטרודל ג'ימייל נקודה קום,

  31. 07:52

    ונגדיר כאן גם הוביז, שיהיה פשוט מערך עם בסקטבול. הוא צועק עלינו כי צריך להוסיף אימפורט, אז נוסיף אימפורט, ונראה שהכל בסדר.

  32. 08:06

    אז עכשיו כמו ב-U מובטח לנו שיש לנו מופע אחד של יוזר פרוביידר, ונוכל להשתמש בו באופן תאורטי בכל מקום שנרצה כאן באפליקציה.

  33. 08:14

    אז עכשיו כשהגדרנו את הפרוביידר בואו נראה איך משתמשים בו כ-Consumer. אז ניגש למסך לוגין, וכאן ב-OnPressed שלחצנו על הכפתור לוגין אנחנו מביאים את היוזר מאיפשהו, אני כרגע אוותר על זה מתוך הנחה שיש לנו כבר יוזר שמותחל בתוך הפרוביידר, אתם זוכרים בפונקציה Create?

  34. 08:30

    ועכשיו אנחנו עוברים למסך יוזר פייג' ומעבירים אליו את היוזר. אז כל המטרה של פרוביידר זה שלא נצטרך להעביר פרמטרים ממסך למסך, לכן אני אמחק את הפרמטר הזה.

  35. 08:40

    ובואו נעבור למסך יוזר פייג' על ידי לחיצה על קומנד בי או קונטרול בי, וכאן נוכל למחוק את הפרמטר, ולמעשה נוכל בכלל למחוק את השדה. אבל עכשיו הקומפיינר יצעק עליי כי הוא לא יודע מה זה widget.user, כי מחקנו לפני רגע את השדה.

  36. 08:56

    אז איך אנחנו בכל זאת מביאים את היוזר מהפרוביידר? אז כמו שהזכרתי, יש לנו שתי אופציות, אני כרגע אשתמש באחת.

  37. 09:02

    אז כאן בתוך ה-build אנחנו נגדיר user user שווה ועכשיו נביא את היוזר עצמו מהפרוביידר, פשוט נרשום provider.off ניסוג user provider וניתן כאן איזשהו קונטקסט, ניתן אימפורט לפרוביידר ועכשיו ברגע הזה קיבלנו מופע של user provider אבל אותנו מעניין היוזר עצמו אז אם נלחץ על נקודה

  38. 09:28

    נראה שיש לנו גישה לדיליט הובי ולאד הובי. אני משום מה לא רואה את הגטר של היוזר, כנראה שהוא מוגדר לא נכון. ניגש ליוזר פרוביידר, וכן, זה צריך להיות user get, השם של הפונקציה יהיה user, ועכשיו הגטר של היוזר מוגדר נכון. זאת אומרת, אם פונים לשדה user, שהוא בעצם גטר, מקבלים

  39. 09:46

    את המשתנה הפרטי underscore user. אז אם נלחץ עכשיו נקודה, נראה את היוזר שלנו. מעולה, אני אאשר את הקוד.

  40. 09:55

    ומה שיש לנו עכשיו זה מופע של יוזר שהגיע ישירות מהפרוביידר, ועכשיו נוכל להשתמש בו בפונקציית בילד שלנו. אז במקום widget.user.name זה פשוט יהיה

לקורס המלא: קורס Flutter אונליין

ההרצאה הקודמת: הסבר על Pass Params ב-Flutter

ההרצאה הבאה: הסבר על Google Map - API

הרצאות קשורות מקורסים אחרים

  • Content Provider - חלק 1
  • הגדרת AWS provider - פרויקט NodeJS

קורסים נוספים במסלול

  • קורס יסודות התכנות - שפת JAVA - קורס ג'אווה למתחילים
  • קורס פיתוח אפליקציות - לאנדרואיד - Android - ב-JAVA
  • קורס פיתוח אפליקציות - לאייפון iPhone iOS - ב-Swift-Xcode
  • קורס PhoneGap - פיתוח אפליקציות לאנדרואיד ואייפון