Happy paths recommendations
Ads  
Are you looking to monetize your mobile app?
You can do that by adding in-app ads using the
google_mobile_ads package. You’ll need to register a free 
account with AdMob and you can then leverage
one or more AdMob features, including the following:
- Several ad formats: Banner, full-screen, native, and rewarded.
- Control over when ads display. For example, in between levels of a game, after completing a task, or before starting a new game
- Monetization reports to help you make decisions about your app.
Useful links
- Get started with the AdMob guide
- Create an AdMob account tutorial
- 
google_mobile_adspackage on pub.dev
Background processing  
The background processing path shows you how to run a Dart function in the background on mobile devices. With background processing, you can perform tasks like making an HTTP request, running an expensive calculation, or displaying a notification in another isolate (similar to a lightweight thread).
There are a of couple ways to incorporate background processing into your mobile app. One way is through a Dart isolate. With a Dart isolate, you can create a separate thread to run tasks concurrently in the background.
Another way to incorporate background processing is through the WorkManager plugin. With this plugin, you can enable persistent headless execution of Dart code. Your tasks remain scheduled through app restarts and system reboots.
Some features of WorkManager include:
- Persistent work handling
- Flexible scheduling
- Ability to apply constraints on jobs like checking for a network connection, only running when the device is charging, or only running when a device is idle (Android only)
Useful links
Geolocation  
Geolocation, the ability to determine where in the world a user is located, is critical functionality for many applications; for example, shopping apps need to calculate shipping, fitness apps need to track distance traveled, and so on. The plugins in Flutter’s ecosystem offer a number of features to help build these experiences.
A plugin that provides this functionality is the 
geolocator plugin, rated as a Flutter favorite. 
With this plugin, you can check and request permission,
fetch a one-time location, and even provide a stream
of constantly updated values as a user moves about.
Features include:
- Ability to get a device’s current location
- Receive location updates
- Ability to determine whether a devices’s location services are enabled
Useful links
- How to get a user’s location with the geolocator plugin tutorial
- 
geolocatorplugin
Immutable data   
For an easy way to represent immutable application data, 
check out two plugins that provide ways to handle and manipulate 
immutable data: freezed and json_serializable,
both rated as Flutter favorites.
These plugins can be used independently, 
but are also great when used together. 
The freezed package handles in-memory objects 
and json_serializable maps those immutable 
objects to and from the JSON format.
Useful links
- Freezed
    - 
freezedpackage video
- 
freezedpackage
 
- 
- json_serializable
    - Serializing JSON using json_serializable
- 
json_serializableexample on GitHub
- 
json_serializablepackage
 
Structured local storage  
Structured local storage increases app performance and
improves the user experience by selectively saving expensive
or slow data on a user’s device. 
This path suggests two plugins for local persistence:
drift and hive. 
Which plugin you choose depends on your needs.
Drift, rated a Flutter favorite, offers a fully-typed object relational mapping (ORM) around SQLite, with support on all Flutter platforms. Developers who require a fully relational database on their users’ device will benefit most from this package.
Hive offers a fully-typed object document mapping (ODM) around a custom storage solution, with support on all Flutter platforms. Developers who do not require a fully relational database, especially if they use document-based storage on their server (like Cloud Firestore) will benefit most from this package.
Useful links
- Drift:
    - The boring flutter development show using Drift video
- Fluent sqlite database video that references Drift’s previous name, Moor
- 
driftpackage
 
- Hive:
    - Hive NoSQL Database IN 16 Minutes video
- 
hivepackage
 
Web sockets  
Web sockets enable communication between Flutter clients and servers. This path suggests two packages to use when installing and using web sockets.
Use the web_socket_channel package for client-side
web socket connections,
and the web_socket_connections package 
for server-side Dart web sockets.
Useful links
- web_socket_channel:
    - Work with WebSockets cookbook recipe
- 
web_socket_channelpackage
 
- shelf_web_socket
    - 
shelf_web_socketexample
- 
shelf_web_socketpackage
 
-