Save hours of Development time through Abstraction | Flutter Abstraction

Поделиться
HTML-код
  • Опубликовано: 7 ноя 2024

Комментарии • 125

  • @Iamnabink
    @Iamnabink 3 года назад

    Best videos for mobile app dev in entire youtube . GREAT 😍😍😍😍😍

    • @FilledStacks
      @FilledStacks  3 года назад

      Yeeeaaahhhh!! that's great to hear man. I think it's a pretty important concept as well. It allows you to get more work done at a high level before moving into the actual implementation. It's a very speedy way of development.

  • @danteddy
    @danteddy 5 лет назад +5

    Man, you don't know how useful it is to me. Great vid !

    • @FilledStacks
      @FilledStacks  5 лет назад

      Awesome! That's great news. Happy i could help. Thank you for the feedback.

  • @renion9547
    @renion9547 4 года назад +1

    Very useful information. Thank you. Every developer should know these things about abstractions and how they simplify the development process. This is huge.

    • @FilledStacks
      @FilledStacks  4 года назад

      Thank you Renion. I think so too. It's a great help when coming up with certain solutions

  • @manikandansai9725
    @manikandansai9725 5 лет назад +19

    Great. Please upload video on unit testing with mock data. With dependency injection.

  • @aman.kataria
    @aman.kataria 5 лет назад +3

    Dude, I was researching about this today only. This is so awesome!
    I am so lucky.

    • @FilledStacks
      @FilledStacks  5 лет назад +1

      That's awesome 😎 i was hoping more people would be interested in this topic. Thank you for letting me know

  • @edzynda
    @edzynda 4 года назад

    This is awesome! Great strategy. The great part of this technique is that by using the fake_implementation you already have a robust set of mock data to test against. Liked and subscribed!

    • @FilledStacks
      @FilledStacks  4 года назад +1

      Exactly! It sets you up so that you can continue development when your environment is down and makes your unit testing much easier given your data setup is complete.
      Thanks for subscribing.

  • @getmmg
    @getmmg 5 лет назад +2

    Excellent stuff. This whole series on abstraction is going to be awesome and will be helpful for a lot of people.

    • @FilledStacks
      @FilledStacks  5 лет назад +3

      I hope so man. I was a bit worried that the video will be boring because of the content and lack of code, but I'm happy to see it'll be helping devs. It's a very important concept to get to the next level of an architecture.

  • @storylineteam
    @storylineteam 4 года назад +1

    Great video! As a .Net developer, i really hate the lack of interfaces in dart. i Hope google makes this improvement in the future. Until then abstract classes are the best way around.

    • @FilledStacks
      @FilledStacks  4 года назад +1

      Yep. I come from the same land as well. Xamarin, Mvvm cross, .net core, ASP and Service Fabric. Interfaces are definitely missed :(

    • @jacobladder638
      @jacobladder638 4 года назад

      What's the difference. Also .NET developer. I get the difference in .NET, but what would the use case be here?
      In Dart you can implement multiple abstract classes, You can do dependency injection with abstract classes. It doesn't seem to have much in common with abstract classes in C#. When you label a class as abstract it really behaves like an interface as it ignores all implementation. Only when you extend a class does it behave like C# abstract class.

  • @gmc254quads6
    @gmc254quads6 5 лет назад +1

    As usual, great video. Your website, the slack channel and RUclips videos have become the go to place for great concepts.

    • @FilledStacks
      @FilledStacks  5 лет назад

      Yeeeaaah! Thank you 😊 And thanks for always watching and giving feedback. I really appreciate it 😉

  • @ericdrodgers
    @ericdrodgers 4 года назад

    The most thorough explanation of Flutter. This is all your videos. Great work, the only person on RUclips that gives production level tutorials. If I could change one thing.... Using provider only since it is recommended by Google. Thanks , I can figure out how to swap get it out in your other videos.

    • @FilledStacks
      @FilledStacks  4 года назад +1

      Thank you very much for your kind words. I do use provider, in all my videos :) I also use get_it with provider because it provides better readability to me and my team. I know provider can do the same things, but it doesn't read as well as a get_it locator file or get_it's service location in a viewmodel. For the team at FilledStacks it helps a lot to have readable code because you might have to dive into a code base that's a year old if no-one else has time to implement the feature so readability is top on my list for a maintainable software agency team.

    • @ericdrodgers
      @ericdrodgers 4 года назад +1

      @@FilledStacks that is just 1% that I would change out of the 99% that I wouldn't. My difficulty understanding Get It and your Filled Stacks Provider Architecture comes from me being a newbie.
      If you are bored one day, and want to throw the newbies a bone, please do an app using provider only, crud, Google/Email sign in and Firebase Storage. I would even pay for a tutorial from you with an app like that. Please let me know I am very interested and would like to work something out. Your architecture is impressive

    • @FilledStacks
      @FilledStacks  4 года назад +1

      @@ericdrodgers Thanks. I have done a provider only architecture ( ruclips.net/video/VgrK_LlQRJ4/видео.html ) after you watch that video you'll be able to see the difference. All you'll change is you'll be injecting the services through the constructor instead of getting it from the locator in get it. That's the only difference. You don't have to pay for anything, it's all free and I've already made the video for provider only implementations. See if it's easier to understand :)

    • @ericdrodgers
      @ericdrodgers 4 года назад

      @@FilledStacks Link doesn't work. More than likely it's the Provider V3, I watched it and I use it without get it. Maybe a full a app without Get It and Provider Architecture with Firebase Firestore and Storage Crud. That is a wishlist, you are doing a wonderful job, I have zero complaints. I imagine most people would like to see how YOU would put a full app together without Provider Architecture and Get It with Firebase Firestore and Database Crud. Again this is a wishlist. We newbies don't really use Get It or the Provider Architecture so it is a wishlist. Also, thanks for replying, I appreciate the replies from the Flutter God, thank you.

    • @FilledStacks
      @FilledStacks  4 года назад +1

      @@ericdrodgers Link should work now. The last parenthesis was taken as apart of the link. If that't the wish then most people should probably watch my Firebase and Flutter series to see how I put together a full mobile application. I released episode 9 this morning :)

  • @DamiBiker
    @DamiBiker 5 лет назад

    I love your tutorials ! .. I have one question ... i always see you using both GetIt and Provider ... Do you use both packages in your production apps ? Or ... which one is better when it comes to dependency injection packages ???

    • @FilledStacks
      @FilledStacks  5 лет назад +1

      Thank yoooouuuu! I use it like this setup (ruclips.net/video/kDEflMYTFlk/видео.html) exactly. I use Provider for the statemanagement (ChangeNotifier) and get_it for service location / dependency injection depending on how it's setup. It's personal preference. I feel like the ProxyProvider code for dependency injection is too verbose, hard to maintain and is waaaaay to complicated for literally no added benefit over get it where it's all basically one line. Registration / injection / location and maintenance. I don't like more code for less functionality so I still use both until Provider can become less verbose and injecting Providers where there is no context becomes easier than the current ProxyProvider setup.

    • @DamiBiker
      @DamiBiker 5 лет назад

      @@FilledStacks Thank you, master !

  • @bearbare4495
    @bearbare4495 5 лет назад +1

    This is awesome! thanks, i really like this approach. But i have a question, how to keep user logged with this approach?

    • @FilledStacks
      @FilledStacks  5 лет назад

      Thank you. Abstraction has nothing to do with any implementation details that's the point of it. You can keep a user logged in by keeping a token stored in secure local storage that you use on startup to login again or make all your requests with. Any way you prefer to implement won't matter. Because you have abstraction :)

  • @RaymondAtivie
    @RaymondAtivie 5 лет назад +1

    This is a GREAT video. extremely useful. thank you.
    I would really love if you could expand on this abstraction with Provider. and how i can still listen and all. but great video.

    • @FilledStacks
      @FilledStacks  5 лет назад +1

      The functionality i showed doesn't take away any of Providers existing functionality. There's nothing to change to make it listen and all that. Everything else stays exactly the same you'll just use your interfaces instead of the implementation so anything else stays the same.

  • @gusdoh
    @gusdoh 5 лет назад

    Hi Dane!
    Can you add an explanation of how 'provider_setup.dart' is used in the building app? You have coded that file but hasn't been used in any files.

    • @FilledStacks
      @FilledStacks  5 лет назад

      Hi Gus. This video goes over my architecture using Provider only for dependency injection and state management. ruclips.net/video/VgrK_LlQRJ4/видео.html

  • @Khari99
    @Khari99 3 года назад

    Do you have an example of this working in Stacked instead of Provider at 11:32?

    • @FilledStacks
      @FilledStacks  3 года назад +1

      Yes, in stacked you supply the dependency to the dependencies list of the StackedApp annotation.

  • @alejandroulatefallas3011
    @alejandroulatefallas3011 5 лет назад +1

    Nice vid mate! I do, however have a question. Repeating the boolean in two different files is my main concern right now with this implementation, I think it would be better if you could somehow set the environment for your app. I have being taking ROTGP's approach (github.com/ROTGP/flutter_environments) but I'm certain that mixing it with get it and your own approach could be the base of something really good.

    • @FilledStacks
      @FilledStacks  5 лет назад

      I don't know how I missed this comment. RUclips notifications suck! Thanks for letting me know about this approach, the code I presented wasn't entirely production ready. It was more about understanding abstraction so that you can speed up development. The link you posted here doesn't exist anymore.

    • @alejandroulatefallas3011
      @alejandroulatefallas3011 5 лет назад

      @@FilledStacks No problem, in any case, the approach I linked was deprecated since Flutter now has a feature to create flavors, I guess it would be a good idea for a video. You can check it out in here flutter.dev/docs/deployment/flavors and medium.com/@animeshjain/build-flavors-in-flutter-android-and-ios-with-different-firebase-projects-per-flavor-27c5c5dac10b or flutter-academy.com/build-flavors-environment-specific-configuration/ . In any case, it's something to think about and discuss, feel free to ping me if you want to talk about it.

  • @drimadoh
    @drimadoh 5 лет назад

    Hi, I noticed going through your tutorials that sometimes you use a Final properties in the data model (using it as an immutable object) and sometimes as standard properties... So which one do you recommend and why?

    • @FilledStacks
      @FilledStacks  5 лет назад

      Both. If your value will be updated during the lifecycle of your model then you CANT use final because it can only be assigned one value. If you value will won't be updated then use final.

    • @drimadoh
      @drimadoh 5 лет назад

      @@FilledStacks ok got that thanks. Is there any performance advantages (or any other advantages you know about) for using immutable models? i.e. is it better to do it this way: create a new model (with final properties) with the updated values each time the model needs to be updated of course; rather than just updating the model the usual way?

    • @FilledStacks
      @FilledStacks  5 лет назад +1

      @@drimadoh It's definitely more maintainable knowing that the only way to update the values is through the constructor. It'll be easier to debug and log in a single place where values are updated.

  • @YasinIlhan61
    @YasinIlhan61 5 лет назад +1

    I see you are using get_it with provider package. As you know Provider package has also ProxyProvider for dependency injection, Is there a special reason for it? ( except get_it not need context)

    • @FilledStacks
      @FilledStacks  5 лет назад +1

      I do use get_it mostly. I explain the reasoning in my architecture videos. Mostly the amount of code required to maintain ProxyProvider injection is a lot more, meaning much more than get_it as well as the fact that it's easier to read and understand what you're doing with get it (for beginners, or any dev that might want to help on a project). It's all personal preference, which is why I made an architecture video covering provider + getit setup and then when v3 was released with ProxyProvider I covered that as well. I still prefer get it over ProxyProvider personally. It's been much easier to use, handle, maintain (especially with constructor signature changes) etc.

    • @YasinIlhan61
      @YasinIlhan61 5 лет назад +1

      @@FilledStacks thanks for detailed answer. I will check your videos.

  • @tylerthornton9611
    @tylerthornton9611 5 лет назад

    Another fantastic video. Thank you FilledStacks!

  • @leoncapl2367
    @leoncapl2367 4 года назад

    hi! Love your tutorials, but in this there seems to be an issue for me. Using getit I get an error about constructor and using provider way I get another error. GetIt error: The class 'GetIt' doesn't have a default constructor.
    Try using one of the named constructors defined in 'GetIt'.
    Thank you
    EDIT:
    I just tried doing it like this:
    GetIt locator = GetIt.instance;
    instead of:
    GetIt locator = GetIt();
    Is this the correcxt way of using it now. I mean there are no errors now :)

    • @FilledStacks
      @FilledStacks  4 года назад

      Thank you! And yes, that's the correct way. It was updated a bit after this episode came out.

  • @oliverbytes
    @oliverbytes 5 лет назад

    Super great tutorial! Please do one for Error Handling soon? What's the most proper way to handle exceptions please.

    • @FilledStacks
      @FilledStacks  5 лет назад +1

      Thank you. It depends on what you're handling. Try catch with good logging works well. If the user needs feedback, either a snack notification or a toast or a dialog will work. You can watch my logging video and dialog service and combine those two.

    • @oliverbytes
      @oliverbytes 5 лет назад

      @@FilledStacks thanks a lot.. what about if the API returns different kinds of error.. for example, the api can return a json like { .errors: {} } and sometimes will return {error: {}} and what if it returns a html error file for example.. how do we properly handle these kind of stuffs

    • @FilledStacks
      @FilledStacks  5 лет назад +1

      @@oliverbytes It's all dependent on your app. If you want to display it you display it, if you want to log it then you log it. If the user has to choose the next action then present a confirmation dialog with options. There's no specific rule for that. If you have a structure to your errors just check if it's there then perform the action you'd like to take.

    • @oliverbytes
      @oliverbytes 5 лет назад

      @@FilledStacks I get your point it all depends to us individually.. anyway I really appreciate everything you do.. thanks a lot

  • @mohabmagdy4155
    @mohabmagdy4155 5 лет назад

    I wonder how the theoretical part was not boring many thanks for sharing your information

    • @FilledStacks
      @FilledStacks  5 лет назад

      Hahaha i was literally thinking it's going to be so boring but it seems that it's not 😊 thanks for watching. I'm happy to share the knowledge 😁

  • @g-luu
    @g-luu 4 года назад

    The best part of the video 0:00 to 5:41 :)

    • @FilledStacks
      @FilledStacks  4 года назад +1

      haha, I thought it would be the most boring part :) Thanks man

  • @AllenWillian
    @AllenWillian 5 лет назад

    Bro this is awesome! Thanks for providing so much value

    • @FilledStacks
      @FilledStacks  5 лет назад +1

      It makes me happy to hear that man. Thanks for letting me know.

  • @harishkandekar1098
    @harishkandekar1098 3 года назад

    can you make a video on Bloc pattern , also tell how can we make use of bloc pattern along with this kind of abstraction

    • @harishkandekar1098
      @harishkandekar1098 3 года назад

      thanks in advance

    • @FilledStacks
      @FilledStacks  3 года назад

      Hey, we don't use BLoC in production so I have no experience with it. But the point of this video is to write code in an abstracted manner regardless of the state management you're using. It'll be the exact same video. it's not based on a specific state management setup, I just happen to use the one we like to use. But it can be applied to anything you're using.

    • @harishkandekar1098
      @harishkandekar1098 3 года назад

      @@FilledStacks thank you so much for reply, I will try to use with bloc pattern

    • @FilledStacks
      @FilledStacks  3 года назад

      @@harishkandekar1098 You're welcome :)

  • @oliverbytes
    @oliverbytes 5 лет назад

    Can you please do a tutorial about doing Globals, Constants, Utils, Singletons stuffs?

    • @FilledStacks
      @FilledStacks  5 лет назад +1

      Ill add it to my list. What specifically do you want to know?

    • @oliverbytes
      @oliverbytes 5 лет назад

      @@FilledStacks Thanks a lot... I want to know the best/proper way possible on how to implement a constants file, globals file, utils file in a project.. should we create a singleton for a Utilities class or just static class? a library file? those kind of stuffs.. would really appreciate it.. thanks so much for your great tutorials I'm sure you're helping a lot of developers like me doing more proper coding...

    • @oliverbytes
      @oliverbytes 5 лет назад

      @@FilledStacks Maybe an example of a Utils file that can do useful stuffs like generating MD5, writing and reading from files, getting user agent, getting the current platform name etc... I'm curious how you would set up

    • @FilledStacks
      @FilledStacks  5 лет назад

      @@oliverbytes Oh, you want specific implementations. I thought you meant more around name spacing and all that. To do what you mention I just wrap my functionality into a service like my latest video for any package and use it through my service. There's nothing special I do there. Encryption and getting files I all do through using a package that I wrap up in a service.

    • @FilledStacks
      @FilledStacks  5 лет назад

      @@oliverbytes Okay, I'll do a tutorial on name spacing and how I handle it.

  • @jajasaria
    @jajasaria 5 лет назад

    I need this. Thanks for this awesome video.

  • @Droidates
    @Droidates 4 года назад

    I am a beginner, how to learn advance flutter?

    • @FilledStacks
      @FilledStacks  4 года назад +1

      Build 10 basic apps using only the flutter knowledge you have. That should show you what you don't know yet then you spend another 6 months improving those apps. When you're done with that do it all over but using additional software principles like SOLID

    • @Droidates
      @Droidates 4 года назад

      @@FilledStacks Thanks, can you please let me know how to design ui that fit every screen and set the width, height and font size according to the device/screen.
      I have used media query but that is working fine in some devices and awful in some.
      Thanks for your help 👍

    • @FilledStacks
      @FilledStacks  4 года назад

      @@Droidates Yes, watch me responsive UI architecture or the responsive UI video for Flutter web. It shows you how to use my responsive_builder package.

  • @harishkandekar266
    @harishkandekar266 3 года назад

    Awesome !!! thanks ,
    can you please add a working example too with github link

    • @FilledStacks
      @FilledStacks  3 года назад +1

      You can check it out at github.com/filledstacks/flutter-tutorials

  • @skillkrio
    @skillkrio 2 года назад

    Hi Dane help me out, I read some java tight and loose coupling article which will be same in dart too I think. I had certain doubts in loose coupling watched several youtube video and article but still couldn't grasp certain points. I will explain what i understood and what confuses me . In loose coupling we restrict the direct coupling between classes. But in tight coupling we are bound to classes. Let's take an example. I have one Main class and another different class with the name Apple. I am creating a instance of this class in Main class by
    Apple apple =new Apple();
    //Apple is tightly coupled to Main class
    apple.eat();
    //If eat method signature is Changed to drink in the Apple class ofcourse we need to change the method name here in Main class also right?.
    Let's see loose coupling
    class interface Fruits{
    void drink();
    }
    Class Apple implements Fruits {
    @Override
    public void drink (){
    Printing some message;
    }
    }
    class Main{
    public static void main(String [] args){
    Fruits apple = new Apple ();
    //loose coupled ??
    apple.drink();
    }
    }
    If i Change the method signature in loose coupling from drink to pour . I need to change the code in 3 different places.
    1. method signature inside Fruits interface(drink to pour)
    2.class Apple(method override from drink to pour)
    3.inside Main class(method call from apple.drink to apple.pour)
    What's the point of using loose coupling here. In tight coupling once I modify the coupled class(Apple) i am forced to update the Main class. In loose coupling also I am doing the same process .what's the point of using it.
    The only benefit that I can feel through loose coupling is the interface reference type .for example
    Tight coupling code
    Main class{
    //boiler plate code
    Apple apple = new Apple();
    }
    In future if i create Mango class i need to create another object in Main class like Mango mango = new Mango();
    Loose coupling code
    Main class{
    //boiler plate code
    Fruits apple =new Apple():
    //In future if i Change Apple() to Mango() no error will occur here because of the interface reference type(Fruits).
    }
    And what is code extensibility in interface if i introduce new method signature all dependents are broken and force us to implement the new method. Then how to safely extend interface without breaking existing code
    Please help me to understand with this fruit analogy even with Java or dart.

    • @FilledStacks
      @FilledStacks  2 года назад +1

      Hey, awesome questions and it's good that you're thinking about it. I won't be able to answer all of it because the reply on youtube doesn't lend it self to long answers in the notification bar. But there are some general points that I want to say.
      1. Removing hard dependencies (tight coupling) works better for maintenance of your business logic. If you write your business logic against an interface, regardless of how it's implemented or if the names of that interface will change it provides a much more objective way to determine failure points or swap out implementations as needed (which doesn't happen often)
      2. It makes your code unit testable. If you have a hard dependency on an implementation it means you can't mock it out when you want to write automated tests .Unit, integration or end-to-end. This means you have a heavy burden of manually testing all your product code through the user interface provided, whether that's a mobile app, cli or website. Which is prove to be thousands of times longer than unit tests. This means everytime you change something in that implementation class (if you'll HAVE to do regression if quality is a priority for your work).
      I don't quite know exactly how to answer your questions but I can say, from my experience, if you don't see the requirement for something in your code then you probably don't need it. I live by solving a problem when you have one and not solving a problem that you could potentially have, if something had to happen in a scenario that might appear.
      Write code the way you want and then slowly apply design principles when you feel the pain of doing things a certain way. For instance, if you at somepoint say, I don't want to spend 7 hours testing my code manually anymore I'm gonna write tests to cover all the functionality I find critical. You will HAVE to remove the hard dependencies so you can mock out those responses when the test are running. Until then you really won't need it if you don't see the value in it. Don't do things just because they're written somewhere and considered to be good practice. Use your own assessment of it, and apply as you see fit.

    • @skillkrio
      @skillkrio 2 года назад

      @@FilledStacks Thanks alot for taking your time for replying me Dane💜

  • @muhammadyasser9929
    @muhammadyasser9929 5 лет назад

    Awesome, Awesome, Awesome!

  • @Hiro-yn4vt
    @Hiro-yn4vt 5 лет назад

    Hi, I love your contents. But if possible, can you please remove or lower the volume of the background music as it is somehow distracting?
    Thanks a lot for your videos. :)

    • @FilledStacks
      @FilledStacks  5 лет назад +1

      Hey, thanks for the feedback. I have been lowering it progressively but it also only plays when I'm not coding. I'll make it even softer if possible in the next video.

  • @pratikmhatre4815
    @pratikmhatre4815 4 года назад

    Superb

  • @tbm98
    @tbm98 5 лет назад

    Very helpful 😊

    • @FilledStacks
      @FilledStacks  5 лет назад +1

      That's Good news. Exactly what I'm trying to do.

  • @harishkandekar1098
    @harishkandekar1098 3 года назад

    awesome Thanks !!! tutorial can u please add working example with a git link

    • @FilledStacks
      @FilledStacks  3 года назад +1

      This had no actionable code so I don't think there's a git link for it. But you can go check at github.com/filledstacks/flutter-tutorials

  • @aseemshrey400
    @aseemshrey400 4 года назад

    Great tutorial :)

  • @uptourgames3735
    @uptourgames3735 4 года назад

    By interfaces, you mean UI right?

    • @FilledStacks
      @FilledStacks  4 года назад +1

      No, I mean an interface. The public facing API from a class. All public parts of a class, the functions, getters, setters or properties.

    • @uptourgames3735
      @uptourgames3735 4 года назад

      @@FilledStacks Thanks. Just wanted to confirm. KEEP UP THE GREAT WORK

    • @FilledStacks
      @FilledStacks  4 года назад +1

      @@uptourgames3735 You're welcome! And thank you. I will try my best to keep making videos.

    • @uptourgames3735
      @uptourgames3735 4 года назад

      @@FilledStacks HEY! Can you do a video of 'Preparing to build a production-ready app?;

    • @FilledStacks
      @FilledStacks  4 года назад +1

      @@uptourgames3735 Hey, what would a video like that have in it? I just followed the steps on the app store / playstore as they ask things I make it. Nothing specific that I do

  • @Pheenam
    @Pheenam 4 года назад

    The SingleChildCloneableWidget interface is removed, and replaced by a SingleChildWidget interface and two implementations:
    SingleChildStatelessWidget
    SingleChildStatefulWidget

    • @FilledStacks
      @FilledStacks  4 года назад +1

      Thanks for sharing Nam!

    • @Pheenam
      @Pheenam 4 года назад

      @@FilledStacks Thank you for your videos!!
      No worries, was having an issue and thought others might as well

    • @FilledStacks
      @FilledStacks  4 года назад

      @@Pheenam I appreciate the consideration. It helps getting those updates in the comments. I can't keep up with all the changes in the framework as it changes.

  • @dop3ch3f
    @dop3ch3f 5 лет назад

    Genius bro

  • @pathakvivek7865
    @pathakvivek7865 5 лет назад

    nice..

  • @SahharYoucef
    @SahharYoucef 5 лет назад +1

    My problem is that i only understand using examples 😅

    • @FilledStacks
      @FilledStacks  5 лет назад

      haha, do you understand the concept of registering an implementation against an interface and developing against the interface and not the implementation?

  • @jackellis7812
    @jackellis7812 5 лет назад

    Hi, sent you an email about working with you on a long-term flutter project. Please get back to me soon. Thank you!

    • @FilledStacks
      @FilledStacks  5 лет назад

      Awesome. I will get back to you as soon as it's mail time. Which is now :)

  • @TheEkkas
    @TheEkkas 3 года назад

    Praat met 'n Afrikaanse aksent, of hou jou bêk. :) Lekker vids.

    • @FilledStacks
      @FilledStacks  3 года назад

      haha Dankie 😁 Afrikaanse aksent kanie weg gesteek word nie 😛

  • @beaurondamons6187
    @beaurondamons6187 5 лет назад

    My bru waar in SA is jy... dont hide the accent lol

    • @FilledStacks
      @FilledStacks  5 лет назад

      Haha ek sal nog nooit my accent weg steek nie, I'm too proud of it 😬.... ek is in Western Cape.