-
Урок 1.
00:03:15
What you will learn in this course
-
Урок 2.
00:01:17
Section overview
-
Урок 3.
00:01:45
VSCode Shortcuts, Extensions & Settings for Flutter development
-
Урок 4.
00:00:53
Join the Slack Channel
-
Урок 5.
00:02:03
Course Project on GitHub
-
Урок 6.
00:04:51
Download the Starter Project & pubspec.yaml overview
-
Урок 7.
00:03:39
eCommerce app overview
-
Урок 8.
00:05:48
Project structure & code walkthrough
-
Урок 9.
00:03:39
Exploring the codebase with the Widget Inspector (DevTools)
-
Урок 10.
00:05:03
UI Design Principles: Composition & Reusable Widget Classes
-
Урок 11.
00:08:26
Useful Widgets for Responsive Design
-
Урок 12.
00:03:46
App Localization
-
Урок 13.
00:02:52
Section Intro
-
Урок 14.
00:06:55
Limitations of Navigator 1.0
-
Урок 15.
00:06:14
GoRouter installation & initial setup with MaterialApp.router
-
Урок 16.
00:07:44
Routes, sub-routes and navigation
-
Урок 17.
00:03:55
GoRouterHelper Extension and pageBuilder
-
Урок 18.
00:06:19
Adding some additional routes
-
Урок 19.
00:04:36
Routing by path vs routing by name
-
Урок 20.
00:06:23
Routing with parameters
-
Урок 21.
00:03:46
GoRouter Error Handling
-
Урок 22.
00:04:35
Navigating with go vs push
-
Урок 23.
00:06:13
Adding the remaining routes
-
Урок 24.
00:03:24
How to pop a route with GoRouter
-
Урок 25.
00:04:29
Nested Navigation
-
Урок 26.
00:02:24
Wrap up + Exercise
-
Урок 27.
00:01:57
Section Intro
-
Урок 28.
00:04:16
Popular App Architectures: MVC, MVP, MVVM, Clean Architecture, Bloc
-
Урок 29.
00:06:18
Riverpod App Architecture with the Controller-Service-Repository Pattern
-
Урок 30.
00:06:08
Project Structure: Feature-first vs Layer-first
-
Урок 31.
00:04:24
The Repository Pattern and the Data Layer
-
Урок 32.
00:05:35
Implementing the "fake" products repository as a singleton
-
Урок 33.
00:06:46
Working with Future and Stream-based APIs
-
Урок 34.
00:02:29
Wrap Up
-
Урок 35.
00:03:38
Section Intro
-
Урок 36.
00:04:51
Introduction to Riverpod
-
Урок 37.
00:03:53
Riverpod installation and setup
-
Урок 38.
00:04:26
Creating our first provider
-
Урок 39.
00:07:12
Reading providers with ConsumerWidget and Consumer
-
Урок 40.
00:06:35
Working with FutureProvider, StreamProvider, and AsyncValue
-
Урок 41.
00:03:25
Testing AsyncValue by adding a delay
-
Урок 42.
00:05:42
The family modifier
-
Урок 43.
00:09:34
The autoDispose modifier + advanced data caching options with keepAlive() & Timer
-
Урок 44.
00:08:18
Creating a reusable AsyncValueWidget helper
-
Урок 45.
00:02:45
Wrap Up + Exercise
-
Урок 46.
00:02:26
Section intro
-
Урок 47.
00:04:37
Implementing a fake authentication repository
-
Урок 48.
00:03:59
Creating repositories using abstract classes (optional)
-
Урок 49.
00:03:14
Intro: a reactive in-memory store with RxDart
-
Урок 50.
00:05:06
Implementing the InMemoryStore with RxDart
-
Урок 51.
00:04:54
Using the InMemoryStore in the FakeAuthRepository
-
Урок 52.
00:03:55
Accessing the FakeAuthRepository with ref.read() in the AccountScreen
-
Урок 53.
00:07:47
Creating our first controller using StateNotifier
-
Урок 54.
00:03:49
Using the StateNotifier inside the AccountScreen widget
-
Урок 55.
00:06:49
Listening to provider state changes with ref.listen()
-
Урок 56.
00:02:38
Bug-fix for Navigator.pop
-
Урок 57.
00:02:10
The AsyncValue.guard method
-
Урок 58.
00:03:29
Adding an AsyncValue extension method
-
Урок 59.
00:05:30
Using the authStateChangesProvider in HomeAppBar
-
Урок 60.
00:04:53
Intro to the email & password sign-in screen
-
Урок 61.
00:03:06
How to generate immutable state classes in Dart (EmailPasswordSignInState)
-
Урок 62.
00:02:21
Using AsyncValue inside EmailPasswordSignInState
-
Урок 63.
00:06:32
Implementing the EmailPasswordSignInController
-
Урок 64.
00:07:27
Using the EmailPasswordSignInController in the widget class
-
Урок 65.
00:05:49
Bug fix + filtering state updates with select()
-
Урок 66.
00:05:59
GoRouter redirects
-
Урок 67.
00:05:13
GoRouter: the refreshListenable argument
-
Урок 68.
00:05:54
Fixing the checkout flows after changes to refreshListenable (advanced)
-
Урок 69.
00:02:01
Wrap Up + Exercise
-
Урок 70.
00:02:00
Section Intro
-
Урок 71.
00:04:44
Introduction to Automated Testing and the Testing Pyramid
-
Урок 72.
00:02:52
Getting started with automated testing
-
Урок 73.
00:04:10
Writing the first unit test + adding toString() and equality implementations
-
Урок 74.
00:06:19
Test matchers and working with methods that throw exceptions
-
Урок 75.
00:03:40
Fixing the getProduct() method and updating the unit tests
-
Урок 76.
00:04:58
Working with groups and testing Futures and Streams
-
Урок 77.
00:04:15
Adding an optional delay to the FakeProductsRepository
-
Урок 78.
00:03:43
How to generate a Flutter test coverage report in VSCode
-
Урок 79.
00:06:27
Testing the FakeAuthRepository (part 1)
-
Урок 80.
00:07:02
Testing the FakeAuthRepository (part 2) + advanced stream matchers
-
Урок 81.
00:02:46
Mocks vs Fakes + installing the mocktail package
-
Урок 82.
00:04:42
Testing the AccountScreenController (part 1) + AsyncValue subclasses
-
Урок 83.
00:07:36
Testing the AccountScreenController (part 2) + working with mocks
-
Урок 84.
00:03:13
Testing the AccountScreenController (part 3) + type matchers
-
Урок 85.
00:05:59
Testing with Stream Matchers and Predicates
-
Урок 86.
00:04:49
Testing lifecycle methods (setUp, tearDown, setUpAll, tearDownAll)
-
Урок 87.
00:07:08
Testing the EmailPasswordSignInController with Acceptance Criteria
-
Урок 88.
00:06:24
Testing the EmailPasswordSignInController (part 2)
-
Урок 89.
00:02:09
Tip: setting custom test timeouts per-file
-
Урок 90.
00:03:27
Adding a test workflow to automate testing with GitHub Actions
-
Урок 91.
00:01:20
Wrap up
-
Урок 92.
00:02:43
Section Intro
-
Урок 93.
00:02:31
Introduction to widget tests + starter project
-
Урок 94.
00:04:10
Writing our first widget test using pumpWidget()
-
Урок 95.
00:04:39
Working with WidgetTester and finder
-
Урок 96.
00:04:55
Robot testing
-
Урок 97.
00:03:45
How to find widgets by key
-
Урок 98.
00:07:55
Writing widget tests with mocks and provider overrides
-
Урок 99.
00:04:52
Writing widget tests with Future.delayed() and runAsync()
-
Урок 100.
00:06:09
Adding the email & password widget tests
-
Урок 101.
00:04:56
Adding the email & password widget tests (part 2)
-
Урок 102.
00:07:04
Test setup for the authentication flow + using pumpAndSettle()
-
Урок 103.
00:02:11
Fixing the RenderFlex overflow error
-
Урок 104.
00:08:43
Completing the authentication flow test
-
Урок 105.
00:05:31
Integration tests
-
Урок 106.
00:07:15
Golden image tests
-
Урок 107.
00:05:44
Running golden image tests with size variants
-
Урок 108.
00:01:43
How to deal with Golden Image tests failing on CI
-
Урок 109.
00:02:50
Wrap Up
-
Урок 110.
00:02:30
Section Intro
-
Урок 111.
00:06:30
Overview of the shopping cart feature + technical requirements
-
Урок 112.
00:02:55
App Architecture for the Shopping Cart Feature
-
Урок 113.
00:08:39
Starter project + Overview of the data and domain layers
-
Урок 114.
00:07:16
Local Data Persistence with Sembast: Initial Setup
-
Урок 115.
00:05:01
How to persist the shopping cart data with the SembastCartRepository
-
Урок 116.
00:07:25
Implementing the CartService class
-
Урок 117.
00:03:33
Updating the CartService class to read dependencies using Ref
-
Урок 118.
00:04:32
Writing unit tests using ProviderContainer
-
Урок 119.
00:07:43
Writing the unit tests the CartService class
-
Урок 120.
00:09:08
Implementing the AddToCartController
-
Урок 121.
00:07:43
Updating the AddToCartWidget
-
Урок 122.
00:02:32
Bug Fix: Adding autoDispose to the AddToCartController
-
Урок 123.
00:06:00
Showing the cart items in the ShoppingCartScreen + AutoDispose
-
Урок 124.
00:05:19
Implementing the ShoppingCartItemController
-
Урок 125.
00:04:39
Updating the EditOrRemoveItemWidget and ShoppingCartScreen widgets
-
Урок 126.
00:04:07
Calculating and showing the cart items count
-
Урок 127.
00:05:19
Calculating and showing the cart total price
-
Урок 128.
00:06:16
Limiting the available quantity when adding items to the shopping cart
-
Урок 129.
00:05:37
Implementing the CartSyncService with a listener
-
Урок 130.
00:03:07
Registering the CartSyncService with ProviderContainer when the app starts
-
Урок 131.
00:04:36
Implementing the logic inside the CartSyncService
-
Урок 132.
00:05:23
Implementing the logic inside the CartSyncService (part 2 - optional)
-
Урок 133.
00:11:13
Unit tests for the CartSyncService
-
Урок 134.
00:04:05
Unit-testing providers with dependencies using ProviderContainer
-
Урок 135.
00:03:42
Updated widget and integration tests
-
Урок 136.
00:01:43
Wrap up + exercise (implement a wish list feature)
-
Урок 137.
00:02:05
Section intro
-
Урок 138.
00:03:08
Starter project for the checkout flows
-
Урок 139.
00:06:31
Updating the CheckoutScreen with the PageController initialization logic
-
Урок 140.
00:02:17
Do we need a StateNotifier for the CheckoutScreen?
-
Урок 141.
00:01:58
Updating the PaymentPage
-
Урок 142.
00:07:07
Implementing the PaymentButtonController
-
Урок 143.
00:01:12
Wrap Up
-
Урок 144.
00:03:14
Section Intro
-
Урок 145.
00:01:52
Errors vs exceptions
-
Урок 146.
00:06:48
Starter project overview + defining custom exceptions with enums and subclasses
-
Урок 147.
00:02:48
Freezed Introduction and Installation
-
Урок 148.
00:08:19
Creating an AppException class with Freezed
-
Урок 149.
00:03:58
Updating the AsyncValueUI extension to handle AppException values
-
Урок 150.
00:07:32
Adding an AsyncErrorLogger using ProviderObserver
-
Урок 151.
00:06:23
Creating a reusable ErrorLogger to catch all exceptions
-
Урок 152.
00:08:46
Completing the error handling system
-
Урок 153.
00:07:29
Working with the Result type (Success and Error)
-
Урок 154.
00:02:17
Drawbacks of the Result type (and when not to use it)
-
Урок 155.
00:01:22
Wrap up
-
Урок 156.
00:02:18
Section Intro
-
Урок 157.
00:07:12
Starter project overview
-
Урок 158.
00:03:02
Overview of the LeaveReviewScreen
-
Урок 159.
00:05:22
Implemeting a LeaveReviewController and submitting form data
-
Урок 160.
00:05:14
Testing the LeaveReviewForm and preventing an AssertionError
-
Урок 161.
00:03:07
Dismissing the LeaveReviewScreen programmatically on success using a callback
-
Урок 162.
00:06:18
How to prefill a form with data from a repository/backend
-
Урок 163.
00:03:09
Optimization: only submit the form if the data has changed
-
Урок 164.
00:04:39
Showing existing reviews in the ProductReviewsList
-
Урок 165.
00:05:18
Updating the LeaveReviewAction by reading read data from the userPurchaseProvider
-
Урок 166.
00:04:13
Calculating the average product ratings
-
Урок 167.
00:03:33
Updated tests & wrap up
-
Урок 168.
00:02:16
Section Intro
-
Урок 169.
00:02:24
Client-side vs server-side search
-
Урок 170.
00:03:09
Adding a search method to the FakeProductsRepository
-
Урок 171.
00:07:19
Implementing client-side search with StateProvider and FutureProvider
-
Урок 172.
00:04:20
Riverpod caching with autoDispose and cacheTime
-
Урок 173.
00:03:41
Debouncing and cancelling network requests
-
Урок 174.
00:02:12
Introduction to Riverpod 2.x
-
Урок 175.
00:02:12
Starter project and updated code walkthrough
-
Урок 176.
00:02:02
Installing the Riverpod Generator package
-
Урок 177.
00:05:10
Generating providers with the @riverpod syntax
-
Урок 178.
00:05:48
Migrating some more providers to Riverpod Generator + the keepAlive syntax
-
Урок 179.
00:07:54
Migrating the AccountScreenController from StateNotifier to AsyncNotifier
-
Урок 180.
00:04:18
Converting the AccountScreenController to use Riverpod Generator
-
Урок 181.
00:05:58
How to check if an AsyncNotifier is mounted
-
Урок 182.
00:06:36
How to write unit tests for AsyncNotifier subclasses
-
Урок 183.
00:01:06
Wrap Up
-
Урок 184.
00:01:28
Conclusion & Next Steps
kurs-flutter-foundations-polnyy-paket:1 Uncaught (in promise) NotSupportedError: Failed to load because no supported source was found.
Other courses are playing well.