{"id":6607,"date":"2025-09-14T16:15:19","date_gmt":"2025-09-14T16:15:19","guid":{"rendered":"https:\/\/obsidiansofteducation.com\/?page_id=6607"},"modified":"2025-09-14T16:15:21","modified_gmt":"2025-09-14T16:15:21","slug":"mit-app-inventor-diary-tutorial","status":"publish","type":"page","link":"http:\/\/obsidiansofteducation.com\/index.php\/mit-app-inventor-diary-tutorial\/","title":{"rendered":"MIT App Inventor Diary App Tutorial | Display Pictures in ListView | Personal Diary App with Images"},"content":{"rendered":"\n<p class=\"has-medium-font-size wp-block-paragraph\">Hello\u00a0friends, and welcome to Obsidian Soft,<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Today, I will teach you how to make an easy but impressive app using MIT App Inventor: a diary app with pictures. In the process of making this app, you will learn some useful things: <\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">1. How to use a date picker,<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">2. How to use an image picker,&nbsp;<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">and best of all,&nbsp;<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">3. How to show images in list view. <\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\"> So, let\u2019s begin:<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Open up MIT App Inventor and start a new project. Let\u2019s call it DiaryWithPicsApp. Keep the toolkit default. This is very important.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">In the screen1\u2019s properties, make align horizontal center. Also, make the screen orientation portrait and turn on the scrollable checkbox.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Add a <strong>Horizontal Arrangement <\/strong>from the <strong>Layout <\/strong>palette. Make align horizontal and align vertical both center. Make height 15% and width fill parent. Select the arrangement and duplicate it by pressing <strong>Ctrl + C &amp; Ctrl + V <\/strong>on the keyboard for Windows OR <strong>Command + C &amp; Command + V <\/strong>for MacOS. Duplicate again as we need 3 arrangements.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">In the topmost arrangement, drag and drop a <strong>TextBox <\/strong>from the <strong>User Interface<\/strong> palette. Rename it to dateTxt and make it read-only.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">On its right, drag and drop a <strong>DatePicker<\/strong> from the <strong>User Interface<\/strong> palette. Change text to \u201cChoose Date\u201d.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Now, drag and drop a <strong>TextBox <\/strong>between the 1st and 2nd horizontal arrangement. Rename to entryTxt. Make height 15% and width 90%.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Change hint to \u201cEnter diary entry\u201d.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Below this, drag and drop an <strong>Image <\/strong>component from the <strong>User Interface<\/strong> palette.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">In the second horizontal arrangement, drag and drop a <strong>Button <\/strong>from the <strong>User Interface <\/strong>palette. Rename to cameraBtn and change text to \u201cCamera\u201d. Duplicate the button and rename to saveBtn. Change text to Save. Now, drag and drop an ImagePicker from the Media palette between these two buttons. Change text to \u201cChoose Pic\u201d.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Drag and drop a listview below this horizontal arrangement. Make width fill parent. Change ListViewLayout to Image and MainText. And turn on the checkbox for ShowFilterBar.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Drag and drop a button inside the last horizontal arrangement. Rename to viewBtn and change text to \u201cView\u201d. Duplicate this button. Rename to deleteBtn and change text to \u201cDelete\u201d. From the <strong>Storage <\/strong>palette, drag and drop a <strong>TinyDB <\/strong>component onto the viewer. From <strong>Sensors<\/strong>, drag and drop a <strong>Clock <\/strong>component. Add a <strong>Notifier <\/strong>from the <strong>User Interface <\/strong>palette and a <strong>Camera <\/strong>component from the <strong>Media<\/strong> palette.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Now, click on the \u201cAdd Screen\u201d button and add another screen. Make the screen orientation portrait and align horizontal center. Add an image component, two labels, and one button. Rename the top label to dateLbl and the bottom label to entryLbl. Rename button to backBtn.&nbsp;<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Our UX design is done, so let\u2019s go to the blocks section. We will work on screen 1 first.&nbsp;<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">We need a global variable for our list of diary entries.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"778\" height=\"54\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image.png\" alt=\"\" class=\"wp-image-6608\" srcset=\"http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image.png 778w, http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-300x21.png 300w, http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-768x53.png 768w\" sizes=\"auto, (max-width: 778px) 100vw, 778px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Get the screen1\u2019s initialize event and set the data picker to the current date, and then update the date textbox with this date. This is done so that the user doesn\u2019t have to choose today\u2019s date. It is prefilled for him.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"400\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-1-1024x400.png\" alt=\"\" class=\"wp-image-6609\" srcset=\"http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-1-1024x400.png 1024w, http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-1-300x117.png 300w, http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-1-768x300.png 768w, http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-1.png 1138w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">The initialize event is still not complete as we still need to load data here, but let\u2019s work on saving first.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">If the user clicks on a DatePicker to choose a date, then after picking the date, DatePicker\u2019s AfterDateSet event is triggered. Get this event and just duplicate the dateTxt setting from the initialize event into this event too.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"325\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-2-1024x325.png\" alt=\"\" class=\"wp-image-6610\" srcset=\"http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-2-1024x325.png 1024w, http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-2-300x95.png 300w, http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-2-768x244.png 768w, http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-2.png 1072w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">If the user clicks on the image picker and chooses a pic, AfterPicking event is triggered for the ImagePicker component.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Get it, and the code is simple here. Just set the image component\u2019s picture to the image picker. Selection. This selection is a path to the chosen picture.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1010\" height=\"130\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-3.png\" alt=\"\" class=\"wp-image-6611\" srcset=\"http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-3.png 1010w, http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-3-300x39.png 300w, http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-3-768x99.png 768w\" sizes=\"auto, (max-width: 1010px) 100vw, 1010px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">When the camera button is clicked, call TakePicture procedure for the camera component.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"524\" height=\"130\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-4.png\" alt=\"\" class=\"wp-image-6612\" srcset=\"http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-4.png 524w, http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-4-300x74.png 300w\" sizes=\"auto, (max-width: 524px) 100vw, 524px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">The <strong>after picture<\/strong> event is triggered for the camera once a picture has been taken. Just set the image component\u2019s picture to the image. The image here is a path, too.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"770\" height=\"182\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-6.png\" alt=\"\" class=\"wp-image-6614\" srcset=\"http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-6.png 770w, http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-6-300x71.png 300w, http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-6-768x182.png 768w\" sizes=\"auto, (max-width: 770px) 100vw, 770px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Now, get the save button click event.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">First, check using the Control\u2019s if\/else block that image. picture isn\u2019t empty, and the user has entered some text in our entry textbox. Inside the else block, use the notifier to show an alert and a relevant message.&nbsp;<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Then, make a local variable entry for constructing our list of three items in this order:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li class=\"has-medium-font-size\">Text inside our readonly dateTxt.<\/li>\n\n\n\n<li class=\"has-medium-font-size\">Text inside the entry textbox<\/li>\n\n\n\n<li class=\"has-medium-font-size\">Image component\u2019s picture<\/li>\n<\/ol>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Add this local entry list to our global list of diaryEntries. Store this global list of diaryEntries in TinyDB against a tag such as \u201centries\u201d.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">And most importantly, add an item to your listview where mainTxt<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">=date, detailTxt= user entered diary entry, and imageName is the picture in our image component(remember it is a path)<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"601\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-5-1024x601.png\" alt=\"\" class=\"wp-image-6613\" srcset=\"http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-5-1024x601.png 1024w, http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-5-300x176.png 300w, http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-5-768x451.png 768w, http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-5-1536x901.png 1536w, http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-5.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Now, go back to your screen1.initialize event and we need to load diary entries from TinyDB here.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">So, set the diary entries list to the data returned by TinyDB against the tag \u201centries\u201d. The spellings of the tag are super important.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Then go through the diary entries list one by by using the Control\u2019s for each item block and add items to the listview.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"533\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-7-1024x533.png\" alt=\"\" class=\"wp-image-6615\" srcset=\"http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-7-1024x533.png 1024w, http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-7-300x156.png 300w, http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-7-768x400.png 768w, http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-7.png 1168w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Now, get viewBtn click event. Check if listview.selection index isn\u2019t 0 using Control\u2019s if\/else block (this is to confirm that the user has tapped on an item in the listview). Show a relevant message using the notifier\u2019s show alert in the else.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">In if condition, use open another screen block from Control to open screen2, but with startValue: the item in our diaryEntries list against the selection index from the listview.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"282\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-8-1024x282.png\" alt=\"\" class=\"wp-image-6616\" srcset=\"http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-8-1024x282.png 1024w, http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-8-300x83.png 300w, http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-8-768x211.png 768w, http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-8-1536x422.png 1536w, http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-8.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Get the delete button click event. Again, do a similar error check to confirm that the user has tapped on an item in the listview. Then, remove the item from the global list diaryEntries and from the listview. After all this, store the updated list in tinyDB.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"560\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-9-1024x560.png\" alt=\"\" class=\"wp-image-6617\" srcset=\"http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-9-1024x560.png 1024w, http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-9-300x164.png 300w, http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-9-768x420.png 768w, http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-9.png 1228w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Now, open up screen 2 blocks section. Simple code here:<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Make a global list variable for diaryEntry.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"754\" height=\"54\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-10.png\" alt=\"\" class=\"wp-image-6618\" srcset=\"http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-10.png 754w, http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-10-300x21.png 300w\" sizes=\"auto, (max-width: 754px) 100vw, 754px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">When the screen is initialized, set this diary entry to get start value block from Control. This is the data being sent by screen1.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Now, just set all the components on the screen: dateLbl, entryLbl, and image.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"377\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-11-1024x377.png\" alt=\"\" class=\"wp-image-6619\" srcset=\"http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-11-1024x377.png 1024w, http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-11-300x110.png 300w, http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-11-768x282.png 768w, http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-11-1200x442.png 1200w, http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-11.png 1202w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Get the back button click event and just plug in the close screen block from Control.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"370\" height=\"122\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-12.png\" alt=\"\" class=\"wp-image-6620\" srcset=\"http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-12.png 370w, http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-12-300x99.png 300w\" sizes=\"auto, (max-width: 370px) 100vw, 370px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">And we are done. This cool diary app with pictures is done, and you have learned many new things that you can use in other apps too.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">You can also have a look at the video tutorial here:<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<p class=\"responsive-video-wrap clr\"><iframe loading=\"lazy\" title=\"MIT App Inventor Diary App Tutorial | Display Pictures in ListView | Personal Diary App with Images\" width=\"1200\" height=\"675\" src=\"https:\/\/www.youtube.com\/embed\/9TffNq5iCSw?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/p>\n<\/div><\/figure>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Please like my videos and share it with your friends and family. Also, subscribe to my channel and press the bell icon so you don\u2019t miss any of the great projects I have planned for you.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\"><a href=\"https:\/\/www.youtube.com\/c\/obsidiansofteducation\" target=\"_blank\" rel=\"noopener\">https:\/\/www.youtube.com\/c\/obsidiansofteducation<\/a><\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Please like my Facebook page and Instagram page for more educational resources and tips.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\"><strong>Facebook:<\/strong><a href=\"https:\/\/www.blogger.com\/blog\/page\/edit\/4947000819484484884\/7140650632339107612#\" target=\"_blank\" rel=\"noopener\">&nbsp;https:\/\/www.facebook.com\/ObsidianSoft\/<\/a><\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\"><strong>Instagram:<\/strong><a href=\"https:\/\/www.blogger.com\/blog\/page\/edit\/4947000819484484884\/7140650632339107612#\" target=\"_blank\" rel=\"noopener\">&nbsp;https:\/\/www.instagram.com\/obsidiansoftapps\/<\/a><\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\"><strong>Pinterest:<\/strong>&nbsp;<a href=\"https:\/\/www.pinterest.com\/obsidiansoft\/\" target=\"_blank\" rel=\"noopener\">https:\/\/www.pinterest.com\/obsidiansoft\/<\/a><\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">For links to free educational&nbsp;<a href=\"https:\/\/obsidiansofteducation.com\/index.php\/flappy-bird-game-mit-app-inventor\/#\">&nbsp;apps<\/a>, have a look at the&nbsp;<a href=\"https:\/\/obsidiansofteducation.com\/index.php\/mobile-apps\/\">educational apps page<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hello\u00a0friends, and welcome to Obsidian Soft, Today, I will teach you how to make an easy but impressive app using MIT App Inventor: a diary app with pictures. In the process of making this app, you will learn some useful things: 1. How to use a date picker, 2. How to use an image picker,&nbsp; [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-6607","page","type-page","status-publish","hentry","entry"],"_links":{"self":[{"href":"http:\/\/obsidiansofteducation.com\/index.php\/wp-json\/wp\/v2\/pages\/6607","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/obsidiansofteducation.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"http:\/\/obsidiansofteducation.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"http:\/\/obsidiansofteducation.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/obsidiansofteducation.com\/index.php\/wp-json\/wp\/v2\/comments?post=6607"}],"version-history":[{"count":1,"href":"http:\/\/obsidiansofteducation.com\/index.php\/wp-json\/wp\/v2\/pages\/6607\/revisions"}],"predecessor-version":[{"id":6621,"href":"http:\/\/obsidiansofteducation.com\/index.php\/wp-json\/wp\/v2\/pages\/6607\/revisions\/6621"}],"wp:attachment":[{"href":"http:\/\/obsidiansofteducation.com\/index.php\/wp-json\/wp\/v2\/media?parent=6607"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}