DotNet MAUI Sqlite Tutorial - .Net MAUI Sqlite CRUD Operations

  Рет қаралды 20,538

Coding Droplets

Coding Droplets

Күн бұрын

MAUI Tutorial Series: • .NET MAUI - Learn DotN...
Welcome to a comprehensive tutorial on DotNet MAUI SQLite integration, where we will explore the intricacies of creating, reading, updating, and deleting data - commonly known as CRUD operations [.NET MAUI Sqlite CRUD]. This guide is designed to provide you with a step-by-step walkthrough on leveraging the power of SQLite in your .NET MAUI applications.
In this tutorial, we'll demonstrate how to build a robust MAUI app that seamlessly interacts with SQLite databases. Whether you're developing for Android or iOS, we've got you covered with platform-specific insights.
The journey begins with an insightful overview of the .NET MAUI SQLite tutorial, unraveling the core concepts of connecting your MAUI app to SQLite databases. Follow along as we delve into the foundations of SQLite CRUD operations in the context of .NET MAUI, ensuring you grasp each step with clarity.
Wondering how to use SQLite in .NET MAUI effectively? Look no further. We'll guide you through the process, exploring essential topics like SQLite integration on Android and iOS platforms, entity framework considerations, and the crucial maui.sqlite-net-pcl library.
As we progress, you'll witness the practical implementation of SQLite CRUD in .NET MAUI, providing a hands-on experience in manipulating data within your MAUI applications. From creating your first database to executing complex operations, every detail is meticulously covered.
From this tutorial you can understand beyond the basics, addressing advanced concepts like multiple tables in MAUI SQLite databases [MAUI Sqlite Multiple Tables] and handling foreign keys. We'll dive into the nuances of structuring your database for optimal performance and scalability.
Throughout the tutorial, we'll showcase practical examples, ensuring that you not only understand the theory but also gain the confidence to apply these concepts in your own .NET MAUI projects. Whether you're a seasoned developer or just starting with .NET MAUI, this tutorial caters to all skill levels.
Don't miss this opportunity to elevate your coding prowess. Click play now and embark on a coding adventure that combines the elegance of .NET MAUI with the robustness of SQLite databases. Your journey to mastering database interactions in .NET MAUI begins here!

Пікірлер: 115
@CodingDroplets
@CodingDroplets 9 ай бұрын
⭐ Join Us on Patreon: www.patreon.com/CodingDroplets MAUI Tutorial Series: kzfaq.info/get/bejne/hZldnammvdelg3k.html&pp=sAQB
@SimpleTTech
@SimpleTTech 4 ай бұрын
OMG, you literally made the 1 hour teacher explanation in just 9 minutes, thanks dude!
@CodingDroplets
@CodingDroplets 4 ай бұрын
I'm glad you found the tutorial helpful!
@SimpleTTech
@SimpleTTech 4 ай бұрын
@@CodingDroplets 🙌🏽
@dikkebmw595
@dikkebmw595 9 ай бұрын
Thank you for this very user-friendly series!
@CodingDroplets
@CodingDroplets 9 ай бұрын
You're very welcome! I'm glad you found the series user-friendly and helpful.
@jorgejorge8878
@jorgejorge8878 8 ай бұрын
This video made me subscribe. You´re a treasure.
@CodingDroplets
@CodingDroplets 8 ай бұрын
Thank you so much for the incredibly kind words!
@maciejkolacinski8958
@maciejkolacinski8958 8 ай бұрын
Great tutorial, very easy to follow 😊 the only thing is the dependency injection was very brief so i think a video on that would be useful or even a video on design patterns in C#
@CodingDroplets
@CodingDroplets 8 ай бұрын
Thank you for your feedback! I'm glad you found the tutorial helpful. Your suggestion about creating a more in-depth video on dependency injection is fantastic, and I appreciate your input. I'll definitely consider creating a dedicated tutorial to delve deeper into dependency injection in the context of .NET MAUI. Additionally, a video covering design patterns in C# is an excellent idea! It's a broad but crucial topic, and I'll work on creating content that provides a clear understanding of various design patterns.
@trustingod0
@trustingod0 8 ай бұрын
@@CodingDroplets Great Video and I would like to see a deep dive into MVVM design pattern with .Net Maui. Thanks !!!
@oscaralexanderayalagarcia1847
@oscaralexanderayalagarcia1847 8 ай бұрын
Muchas gracias!! me has salvado de un proyecto de la universidad, tenga su like buen hombre
@CodingDroplets
@CodingDroplets 8 ай бұрын
De nada.
@someoneofpeople
@someoneofpeople 9 ай бұрын
Thanks a lot we highly appreciate your amazing videos. If you could do another video for an already existing SQLite db with entity framework that would be very beneficial for a lot of developers.
@rntechnology8102
@rntechnology8102 9 ай бұрын
This is my need also please
@CodingDroplets
@CodingDroplets 9 ай бұрын
Thank you for your kind words! I'm delighted to hear that you find the videos helpful. Certainly, creating a tutorial for using an existing SQLite database with Entity Framework in .NET MAUI sounds like a great idea. I'll add it to the list of upcoming tutorials.
@CodingDroplets
@CodingDroplets 9 ай бұрын
@rmtechnology8102 Will do a video soon.
@dikkebmw595
@dikkebmw595 9 ай бұрын
Agree! Hoping to see a Entity Framework video soon.
@user-px4dw3bs9u
@user-px4dw3bs9u 5 ай бұрын
@@dikkebmw595 I don't think it's necessary,these operation table statements are already very convenient
@MinhQuanCt3
@MinhQuanCt3 Ай бұрын
very helpful for me, thank so much (from vietnam)
@CodingDroplets
@CodingDroplets Ай бұрын
Thank you for your comment! Glad to hear that.
@user-px4dw3bs9u
@user-px4dw3bs9u 5 ай бұрын
Great, I followed the video to achieve the above functions。
@CodingDroplets
@CodingDroplets 5 ай бұрын
Glad it helped!
@meetvishavadia9122
@meetvishavadia9122 5 ай бұрын
Excellent tutorial! This channel simplifies complex topics wonderfully. Could you please create a video explaining how to use the RefreshView feature for pull-to-refresh functionality? Specifically, I'd like to learn how to implement pull-to-refresh to refresh a ListView inside a RefreshView that fetches data from an SQLite Database.
@CodingDroplets
@CodingDroplets 5 ай бұрын
Thank you for your kind words and for watching the tutorial! I'm glad you found it helpful. I'll definitely consider creating a video tutorial on this, specifically covering how to refresh a ListView populated with data from an SQLite Database.
@neomachine8773
@neomachine8773 3 ай бұрын
Thanks from Colombia you are the boss
@CodingDroplets
@CodingDroplets 3 ай бұрын
Thank you too!
@KleenAir-l7i
@KleenAir-l7i 2 күн бұрын
I'm Wondering, How would you go about setting an OrderBy statement in one on the Data Service Methods
@CodingDroplets
@CodingDroplets 2 күн бұрын
You can easily add an OrderBy statement in your data service method when querying your SQLite database. Below is an example. *await _connection.Table().OrderBy(x => x.CustomerName).ToListAsync();*
@almanzalj2066
@almanzalj2066 6 ай бұрын
Thanks for the video. How to insert into an image field in the Sqlite database?
@CodingDroplets
@CodingDroplets 6 ай бұрын
In SQLite, you can insert an image into a field by converting the image into a byte array and then inserting that byte array into a BLOB (Binary Large Object) field in the database.
@sbjakhotya
@sbjakhotya 6 ай бұрын
LocalDbService class sounds like a Common Service for Entire Application, however it serves for 1 table only, should we add all table service code to single file or create separate classes for each table like LocalCustomerService, LocalProductService, LocalInvoiceService and so on?
@CodingDroplets
@CodingDroplets 6 ай бұрын
Great observation! While the LocalDbService class may initially sound like a common service for the entire application, it's indeed focused on managing operations for a single table. When organizing your application's services, it's generally a good practice to follow the Single Responsibility Principle (SRP) and separate concerns. Creating separate classes for each table can help keep your codebase clean, modular, and easier to maintain. Each service would then be responsible for managing operations related to its respective table, leading to better organization and maintainability. Additionally, this approach allows for easier scalability and extensibility as your application grows.
@sbjakhotya
@sbjakhotya 6 ай бұрын
At 3:10 added method CreateTableAsync for Customer in Constructor, It will execute on every run of application so won't it Create new table every time the app is opened?
@CodingDroplets
@CodingDroplets 6 ай бұрын
The CreateTableAsync method checks if the table already exists in the database before attempting to create it. So, while the method call is in the constructor, the table creation logic will only execute if the table doesn't already exist in the database. If the table does exist, it won't create a new one, ensuring that your data remains intact across multiple runs of the application.
@michaelchristensen8350
@michaelchristensen8350 8 ай бұрын
Wow this tutorial is very good. Could you please make another video where you show how to sync the Local SQLite DB to a online backend.(Maybe it could be part 2 of this video. So in that way the data is synced when the device is online)
@CodingDroplets
@CodingDroplets 8 ай бұрын
Thank you for your positive feedback! I'm delighted to hear that you found the tutorial helpful. I'll certainly consider creating a part 2 of this video that focuses on syncing data when the device is online. It's a valuable topic, and I'll make sure to cover the process in a clear and comprehensive manner.
@michaelchristensen8350
@michaelchristensen8350 8 ай бұрын
@@CodingDroplets great I will be sure to check it out when it's ready.
@etcast1559
@etcast1559 Ай бұрын
Tried; but ran into exception: [monodroid-assembly] open_from_bundles: failed to load assembly SQLitePCLRaw.core.dll.
@CodingDroplets
@CodingDroplets Ай бұрын
The error you mentioned, [monodroid-assembly] open_from_bundles: failed to load assembly SQLitePCLRaw.core.dll, typically occurs when there's an issue with the assembly references. Make sure you've added all the necessary NuGet packages for SQLite, especially sqlite-net-pcl and SqlitePclRaw.bundle_green. If the issue persists, try cleaning and rebuilding your solution.
@anandshindey
@anandshindey Ай бұрын
Excellent Video, it helped me. I do have a question. How do I do a rollback and commit? begin trans and end trans?. Also is there as guide for sqlite for .net maui ?
@CodingDroplets
@CodingDroplets 29 күн бұрын
Thank you! Glad to know the video helped. For rollback and commit operations, you can use the RunInTransactionAsync method provided by the SQLite library. You can find more details in the official guide here: github.com/praeclarum/sqlite-net/wiki/Transactions
@anandshindey
@anandshindey 29 күн бұрын
@@CodingDroplets thanks.
@CodingDroplets
@CodingDroplets 29 күн бұрын
Welcome
@trustingod0
@trustingod0 8 ай бұрын
Thank you Sir for answering my question about a similar tutorial I followed about using SQLite class library but the method to return all records in a table didn’t work.
@CodingDroplets
@CodingDroplets 8 ай бұрын
You're very welcome! I'm glad I could help address your question and provide assistance with the SQLite tutorial.
@DeshiExplorer
@DeshiExplorer 8 ай бұрын
Thank you so much for the video, I have one question, Lets say we have the app in the app store, now in the next release we need to add new one field in the Customer entity, how to update local database when user update the app?
@CodingDroplets
@CodingDroplets 8 ай бұрын
I'm glad you found the video helpful! Updating the local database when there are changes to the entity structure is a common scenario. Keep track of the database version in your app. When you make changes to the entity structure, increment the version number. In your app code, check the current database version against the expected version. If they differ, perform a database upgrade. Write migration scripts to update the existing database schema to the new structure. These scripts should handle tasks like adding a new field to the Customer entity.
@paudricsmith619
@paudricsmith619 2 ай бұрын
how do you view the database? i have tried to find the db file on the vs emulator but no file is there.
@CodingDroplets
@CodingDroplets 2 ай бұрын
To view the SQLite database in your .NET MAUI application, you can try using adb (Android Debug Bridge) to pull the database file from the emulator and then use a SQLite viewer application. Use adb to locate and pull the database file, and then open it with a SQLite viewer like DB Browser for SQLite. I haven't tried this method yet, but it should help you get started.
@user-ez2vi7td4i
@user-ez2vi7td4i 9 ай бұрын
Hello, I would like to ask why we need to set the value of the _editCustomerId variable to zero, after successfully updating the Customer object ???
@CodingDroplets
@CodingDroplets 9 ай бұрын
Great question! Setting the _editCustomerId variable to zero after a successful update in the .NET MAUI Local Database tutorial serves a specific purpose. In the tutorial, a single "Save" button is used for both inserting a new customer and updating an existing one. After successfully updating a customer, setting _editCustomerId to zero ensures that the application is ready to insert a new customer the next time the "Save" button is clicked. By resetting the _editCustomerId to zero, the logic in the code understands that the user intends to perform an insertion instead of an update. This helps manage the state of the application and ensures that after completing the editing process, the user can seamlessly add a new customer.
@muralid2867
@muralid2867 9 ай бұрын
Thank you, sir, for this video. I have been eagerly awaiting it. I am currently developing a desktop application and considering whether to use SQLite database or another option. If an alternative is preferable, could you suggest the best database to implement? Additionally, I am using .NET MAUI and .NET 7, and I want to convert the application to an executable (exe) file to provide to the client. The condition is that there should be no additional files, such as images or fonts, included-only the executable and supported files.
@CodingDroplets
@CodingDroplets 9 ай бұрын
I'm glad you found the video helpful! For a desktop application developed with .NET MAUI and .NET 7, using SQLite as the local database is a reasonable choice, especially if you need a lightweight, file-based database solution. When it comes to converting your application into a single executable (exe) file without additional files like images or fonts, you might want to consider using a technology like "Single-file Publish" provided by .NET.
@muralid2867
@muralid2867 9 ай бұрын
@@CodingDroplets Thanks For Reply Sir , I am working on a POS software for a restaurant and bar. I need to print bills for both the restaurant and the bar. How should I design the print functionality? I also have a separate settings page where users can choose the printer and paper size.
@CodingDroplets
@CodingDroplets 8 ай бұрын
Please Check: github.com/dotnet/maui/issues/9931
@Fran-nk1qq
@Fran-nk1qq 4 ай бұрын
First of all, ty so much for your videos, they are so informative . I'm having a problem with SQLite, it works for me on Windows but not on Android, the database can't be created and it doesn't show me the data, I've tried to change the path folder and I can't get it works, some idea?
@Fran-nk1qq
@Fran-nk1qq 4 ай бұрын
I just saw you were using .Net 7, i've tried to use .net 7 for my app and it works, it should be some bug of the new version, if you know the way to make it work at net 8 let me know pls
@CodingDroplets
@CodingDroplets 4 ай бұрын
Thank you for your kind words and for sharing your experience! I'm glad to hear that the tutorial was helpful for you. I appreciate you bringing this to my attention, and I'll investigate further to see if there are any updates or workarounds to resolve this issue with .NET 8. Once I have more information, I'll be sure to update the tutorial accordingly.
@CodingDroplets
@CodingDroplets 4 ай бұрын
I tested with .Net 8 and everything is working perfectly. Just implemented in the same way. There are no changes at all. Please let me know the error message what you are receiving. It seems the issue you are facing is something else.
@Fran-nk1qq
@Fran-nk1qq 4 ай бұрын
​@@CodingDroplets I fixed my error using other NuGet Packages. Im currently using Microsoft.Data.Sqlite and all going fine. The error was something related with the file of database cant be reached, but the file was never created at Android. The weird thing is that it worked for me at .Net 7 and Windows App, but it didn't at .Net 8. Tysm for your answer and your time. 🫡
@RidvanGER
@RidvanGER 7 ай бұрын
Thank you very much, would you also do one with EF with sqllite?
@CodingDroplets
@CodingDroplets 7 ай бұрын
You're welcome, and thank you for your suggestion! I'm glad you found the tutorial helpful. I'll definitely consider creating a tutorial on that.
@user-ff7ei4ob8b
@user-ff7ei4ob8b 6 ай бұрын
good short lesson, it’s a pity that, like all the others, the example uses a relational database, but not with relational or hierarchical data
@CodingDroplets
@CodingDroplets 6 ай бұрын
Thank you for your feedback! I'm glad you found the lesson helpful. I understand your point about using a relational database in the example. While this tutorial focused on SQLite, which is relational, I'll definitely consider covering topics related to hierarchical data in future tutorials.
@trustingod0
@trustingod0 8 ай бұрын
How would you recommend I check if database has already been created?
@CodingDroplets
@CodingDroplets 8 ай бұрын
Thank you for your question! In the .NET MAUI SQLite tutorial, the code snippet _connection.CreateTableAsync(); is used to create a table. It's important to note that this method will only create the table if it doesn't exist; otherwise, it will do nothing.
@liemnguyen3088
@liemnguyen3088 2 ай бұрын
How about multi tables in database?
@CodingDroplets
@CodingDroplets 2 ай бұрын
Thank you for your comment! In the tutorial, I demonstrated using only one table for simplicity. However, you can include multiple tables in the same way. Just define additional models for each table and create them using the same approach.
@trustingod0
@trustingod0 8 ай бұрын
What if I want to have Crud with different tables in a Shell Application ?
@CodingDroplets
@CodingDroplets 8 ай бұрын
Will try to include that topic in an upcoming video
@trustingod0
@trustingod0 8 ай бұрын
@@CodingDroplets Thanks Greatly Appreciate it and I look forward to donating to your channel
@sbjakhotya
@sbjakhotya 6 ай бұрын
Please add Invoice making tutorial of type Master - Details all with Database
@hananehanane4881
@hananehanane4881 8 ай бұрын
please how to have handle on cancel button on picker ?
@MichaelPradeep-oc2bs
@MichaelPradeep-oc2bs 4 ай бұрын
i install sqlite in local , how to connect with that database with dotnet maui?
@rahulguleria4169
@rahulguleria4169 9 ай бұрын
Hello sir, How we can do offline sync in maui using sqlite
@CodingDroplets
@CodingDroplets 8 ай бұрын
You need to develop synchronization logic to periodically check for a network connection and sync the local SQLite database with a remote one using APIs. Use background tasks or services for seamless synchronization without disrupting the user experience.
@mix_gamer9021
@mix_gamer9021 7 ай бұрын
If I exit the application and load back in will it display all the customers that i have entered or will it delete them?
@CodingDroplets
@CodingDroplets 7 ай бұрын
The implementation focuses on local storage using SQLite. When you exit the application and load it back in, the data should persist unless you explicitly delete it. If the app is uninstalled and then re-installed, the SQLite database, along with the data it contains, will typically be removed. This is because the uninstallation process usually includes the removal of the app's data and files, including the SQLite database file.
@mix_gamer9021
@mix_gamer9021 7 ай бұрын
@@CodingDroplets thanks, but i have one more question. Do i need to implement mvvm always or can i just use clicked events?
@CodingDroplets
@CodingDroplets 7 ай бұрын
While using MVVM architecture is a recommended practice for building maintainable and testable applications, it's not strictly mandatory. The decision to use MVVM or rely on clicked events depends on the complexity of your application, your preferences, and your development goals. Using clicked events directly in the code-behind can be simpler for small applications or quick prototypes. However, as your application grows, MVVM can offer benefits such as separation of concerns, easier testing, and improved maintainability.
@muralid2867
@muralid2867 8 ай бұрын
Sir Can Make video of how to localization in .net maui
@CodingDroplets
@CodingDroplets 8 ай бұрын
Certainly! I appreciate your suggestion. Creating a video on localization in .NET MAUI is a great idea, and I'll certainly consider it for a future tutorial.
@forsandykurniawandavid
@forsandykurniawandavid 7 ай бұрын
what folder you put sqlite db
@CodingDroplets
@CodingDroplets 7 ай бұрын
In the demo project, the SQLite database file ("demo_local_db.db3") is placed in the AppDataDirectory. This is a common practice for storing application-specific data in a cross-platform manner.
@MSNarayan-er9xz
@MSNarayan-er9xz 7 ай бұрын
sir will you make one video on Mvvm pattern.
@CodingDroplets
@CodingDroplets 7 ай бұрын
Absolutely! I've already created a tutorial on the MVVM pattern and Data Binding in a .NET MAUI application. You can check it out here: kzfaq.info/get/bejne/eJNlmJOBr9q3dKc.html
@MSNarayan-er9xz
@MSNarayan-er9xz 7 ай бұрын
@@CodingDroplets thanks a lot for your message sir.
@CodingDroplets
@CodingDroplets 7 ай бұрын
You are most welcome!
@HelloPadam
@HelloPadam 7 ай бұрын
How to use db from web server
@CodingDroplets
@CodingDroplets 7 ай бұрын
If you want to use a database from a web server in your .NET MAUI application, you would typically implement API CRUD operations to interact with the server-side database. You can check it out here: kzfaq.info/get/bejne/ppmngrOJlsDTkas.html
@sbjakhotya
@sbjakhotya 6 ай бұрын
this Sqlite Tutorial has to cover first before Web API for CRUD in the Play List (step by step implementation) Web API was so weird and dreadful
@CodingDroplets
@CodingDroplets 6 ай бұрын
Thank you for your feedback! I apologize if the previous tutorial on Web API felt challenging. I'll do my best to ensure that future tutorials are more straightforward and easier to follow.
@aweaawe
@aweaawe 4 ай бұрын
this code doesnt work and u paste it from somewhere idc but dislike
@CodingDroplets
@CodingDroplets 4 ай бұрын
I'm sorry to hear that you had trouble with the code in the tutorial. Your feedback is valuable, and I apologize for any inconvenience caused. To address your concerns, I recommend reviewing the source code available at this link (github.com/codingdroplets/MauiSqliteDemo) for a clearer understanding of the implementation.
@aweaawe
@aweaawe 4 ай бұрын
ur code doesnt work, the code is unreadable and u writing too fast like u paste from somewhere code, dislike
@CodingDroplets
@CodingDroplets 4 ай бұрын
I'm sorry to hear that you had trouble with the code in the tutorial. Your feedback is valuable, and I apologize for any inconvenience caused. To address your concerns, I recommend reviewing the source code available at this link (github.com/codingdroplets/MauiSqliteDemo) for a clearer understanding of the implementation.
@hyperdrivekpm221
@hyperdrivekpm221 6 ай бұрын
I keep getting system. NullReferenceExpection 'object reference not set to an instance of an object' when trying the insert method
@CodingDroplets
@CodingDroplets 6 ай бұрын
I'd recommend double-checking your SQLite connection to ensure it's properly initialized and that the object you're attempting to insert isn't null.
@ahmed-he6hl
@ahmed-he6hl 4 ай бұрын
i write all code but i have error in return await _connection.Table().Where(x => x.Id == id).FirstOrDefaultAsync(); the error Severity Code Description Error CS0029 Cannot implicitly convert type 'SqlTest.Customer' to 'System.Collections.Generic.List'
@CodingDroplets
@CodingDroplets 4 ай бұрын
It seems like you're encountering a type conversion error in your code. The error message indicates that the method is expecting to return a single Customer object, but you're trying to assign it to a variable of type List.
@user-ji2yk7wu4n
@user-ji2yk7wu4n Ай бұрын
How do you manage database migration?
@CodingDroplets
@CodingDroplets Ай бұрын
With sqlite-net-pcl in a .NET MAUI project, table creation will occur automatically if no table exists. However, if you need to change the structure of a table, like removing or adding columns, you can implement database versioning. When your application starts, you can check the database version and apply the necessary changes based on the version. This way, you can manage the migration process smoothly.
.Net MAUI Get Device Location [Real-Time Geo Location]
6:44
Coding Droplets
Рет қаралды 973
DotNet MAUI MVVM: Deep Dive into MVVM Architecture with .NET MAUI
27:22
what will you choose? #tiktok
00:14
Анастасия Тарасова
Рет қаралды 6 МЛН
这三姐弟太会藏了!#小丑#天使#路飞#家庭#搞笑
00:24
家庭搞笑日记
Рет қаралды 92 МЛН
Meet the one boy from the Ronaldo edit in India
00:30
Younes Zarou
Рет қаралды 19 МЛН
Understand DotNet MAUI Layouts | DotNet MAUI Tutorial
27:13
Coding Droplets
Рет қаралды 23 М.
Starting .NET MAUI Development in 2024 - What You Need To Know
35:18
James Montemagno
Рет қаралды 65 М.
KMP vs. Flutter - Who Will Win The Cross-Platform Battle?
16:19
Philipp Lackner
Рет қаралды 44 М.
Material Design & Free Controls for .NET MAUI with UraniumUI
16:30
Gerald Versluis
Рет қаралды 16 М.
.NET MAUI Controls: Mastering the Basics and Beyond
29:33
Coding Droplets
Рет қаралды 16 М.
Performing CRUD Operation In .NET MAUI (SQLite)
46:23
Programming With Pragnesh
Рет қаралды 32 М.
.NET MAUI UI Challenge # 7 -  Coffe Shop App
34:10
Devs School
Рет қаралды 17 М.
SQLite Database in .NET MAUI App (Android,IOS,WinUI)
22:47
what will you choose? #tiktok
00:14
Анастасия Тарасова
Рет қаралды 6 МЛН