0% found this document useful (0 votes)
4 views

Flutter Lecture8

Uploaded by

shahidyasin389
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
4 views

Flutter Lecture8

Uploaded by

shahidyasin389
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 9

Flutter Lecture 8

Flutter Lecture 8

File and Package Management


System in Flutter
Introduction:
Effective file management strategies in Dart, focusing on "Layer First" and "Feature First"
architectures, as well as exploring package management. This lecture aims to provide a
comprehensive understanding of structuring code and managing dependencies in Flutter.

File Management Strategies:


1.Layer First Architecture:
1. Explanation: Layering organizes code based on architectural layers (e.g., presentation, data,
domain) within the project.
lib/
|-- presentation/
Example Structure: | |-- screens/
| |-- widgets/
|-- data/
| |-- models/
| |-- repositories/
|-- domain/
| |-- entities/
| |-- use_cases/
Feature First Architecture: 5 Search:
• Search functionality for various sections of the app
Explanation: 6 Messaging:
• Chat feature
Organizes code based on individual features or • Inbox
modules of the application. 7 Notifications:
Example : • Push notifications handling
1 Authentication: • In-app notifications
• Login 8 Shopping:
• Sign-up • Product listing
• Password reset • Cart management
• Social login (Google, Facebook, etc.) • Checkout process
2 User Profile: 9 Payment:
• User details • Payment gateway integration
• Profile settings • Transaction history
• Avatar management 10. Media:
3 Home: • Image gallery
• Main dashboard or landing screen • Video player
• Widgets for displaying different content • Audio player
11 Maps and Location:
4 Settings: • Map display
• App settings • Geolocation services
• Notification preferences
• Theme preferences
Example structure:

--lib
|--feature_1
| |--screens
| |--widgets
| |--models
| |--services
| |--view_models
|--feature_2
| |--screens
| |--widgets
| |--models
| |--services
| |--view_models
| ...
Folder by Feature CLI Utility
To help with the folder by feature pattern, I authored a very
opinionated CLI tool that generates the folder structure and the feature1/
required files within them to provide an excellent structure for ┣ domain/
code organization, testing while still being maintainable and ┃ ┣ models/
┃ ┃ ┗ feature1_model.dart
easy to use.
┃ ┣ repository/
┃ ┃ ┗ feature1_repository.dart
┃ ┣ services/
┃ ┃ ┗ feature1_service.dart
┃ ┗ feature1_domain.dart
It generates a folder structure like ┣ providers/
┃ ┣ feature1_provider.dart
below: ┃ ┗ providers.dart

┣ screens/
┃ ┣ feature1_screen.dart
┃ ┗ screens.dart
┣ widgets/
┃ ┣ feature1_widget.dart
┃ ┗ widgets.dart
┗ index.dart
Command Usage :wrench:
Make sure you are in the root of your project

ff generate -n <feature_name> -t <type> -p <path>


The different components in the folder structure are:
•Domain → Models — contains all the data models and JSON to/from Dart helper
functions
•Domain → Repository — contains abstract classes that describe the feature
functionality
•Domain → Services — contains the actual implementation of the repository
•Providers — contains everything related to the state for that particular feature
•Screens — contains full screens that have a Scaffold
•Widgets — contains all the widgets required for that particular feature
Each of the folders has a common export file that simply exports everything
which enables us to tidy up our imports when importing multiple things from the
same feature.
Package Management:

Creating a Dart Package:


1.Using Flutter Command:
•The flutter create --template=package my_package command initializes a new Dart
package named my_package using Flutter's package template.
•This command generates the necessary files and folder structure for a Dart package.

2.Directory Structure:
•Upon execution, the command creates a directory named my_package containing the
package's files and configurations.
•Inside my_package, essential files include:AX
•lib/: Directory containing Dart code.
•pubspec.yaml: Configuration file defining the package metadata and dependencies.

3.Package Metadata:
•The pubspec.yaml file contains crucial information about the package:
Utilizing the Package:
To use this package in other Dart
projects, define the package as a
dependency in the project's
pubspec.yaml file:

dependencies:
my_package:
path: ../my_package // Replace with the actual path to the package
Import, Export, Part, and Library Keywords:

1.Import and Export:


1. Import: Brings code from one file or package into another file.
2. Export: Exposes code from the current file or package for use in other files.

2.Part and Part of:


1. Part: Indicates a file that is part of a particular library.
2. Part of: Specifies that a file is part of a specific library.

3.Library Keyword:
1. Used to define the current file as a library with a specific name.

Example:
File: my_library.dart File: utils.dart
library my_library;
part of my_library;
part 'utils.dart'; // Includes another part of the library
// Code related to utility functions or classes
// Code elements

You might also like