Before getting started you’ll definitely want to read about the origination of this package… you can do that here.

All right, now that you’re back, this is the issue we’re going to be tackling today. In the first iteration of the package, only string values were supported as filter conditions. Booleans and numbers require a little extra work to normalize and I didn’t want them to slow down getting the initial version of the package published.

As an extra bonus, I’ll be writing this guide as I work through adding this functionality! You’ll be able to keep track of my thought process the entire time and we’ll be able to pair the work in progress to specific commits in the associated pull request. …


Image for post
Image for post
Photo by Émile Perron on Unsplash

Goal

The app I’m working on in my spare time has a need to consume large lists of data, with a key requirement of making it easy to filter the list based on properties of items in the list. Additionally, the list should be searchable to further narrow the results.

There are several places I was going to need this functionality, so it needed to be as generic as possible. I’m making heavy use of the flutter_bloc package for state management, so it should ideally be able to slot right into the existing app architecture. …


Or… how the heck is it even possible that the same exact code fails to pass analysis once it’s extracted into a local package?!

Seriously?
Seriously?

I’m working on a generic flutter widget using theflutter_bloc package that makes it easier to filter and search a list of data (more on that coming soon, but it will expand on the initial work found here). …


In my previous guide, we went over a technique to use Cloud Firestore to efficiently generate and maintain large lists of data to be consumed by a client with minimal use of Cloud Firestore read quota. We’ll be expanding on that technique here (using such buzz-words as repository and BLoC), so it will be highly beneficial to give that a read before continuing.

Image for post
Image for post
Logo by Google via https://flutter.dev/brand

Overview

Most folks these days have likely heard of Flutter and all of the cross-platform benefits that come from choosing it as your UI toolkit. I’m not going to dive into any of those benefits here, as there’s nothing meaningful I could add to the already plentiful ecosystem of posts on the matter. …


We previously discussed methods and techniques for testing Cloud Firestore functions and security rules, and we’ll be expanding on that knowledge in later sections. Give that article a read first, then join us back here.

Image for post
Image for post
Illustration by Google via https://firebase.google.com/products/firestore

Overview

A huge tenant of any mobile application is displaying, filtering, and very likely full-text searching across large lists of data. Querying is relatively straightforward in Cloud Firestore, but full-text searching is not (which is another issue entirely). …


Image for post
Image for post
Illustration by Google via https://firebase.google.com/docs/functions

Writing Cloud Firestore functions and security rules is relatively well documented and understood. Testing them, however, is not.

Presented here is a quick overview of how I’m writing and organizing functions and security rules, and more importantly how to confidently test your code. Everything below can be found in this repository.

As of this writing, the packages I’m using are:

General setup

I haven’t yet had a need to split my Firestore project into a separate repository, so it lives in a /server subdirectory. …


This is the first entry in my series on tech stack choices when you’re working on side project with a small team (or even by yourself). You can find the introduction here. Today we’re going to be discussing data!

Some applications work quite well with only local storage. Most, though, will need some form of centralized storage for long-term persistence and recovery, social or sharing features, data insights, the list goes on and on. …


Image for post
Image for post
“silver MacBook Pro on white table” by rawpixel on Unsplash

Working on a side project by yourself (or on a small team) can be daunting at times. It’s all too easy to feel like you’re not making any real progress on features or bug fixes, and then you have to apply a security patch to your server, deal with a broken CI environment, handle something that went sideways with your database, or otherwise switch gears into something that may not be your speciality. All of that, while important, keeps you from your ultimate goal of creating something amazing.

In this series, I’m going to delve as in-depth as I can into the decisions we’ve made for the journey of our side project; the core tenants of which being cost, ease of maintenance / setup, and speed to implement. …


Image for post
Image for post
Photo by Mark Tegethoff on Unsplash

I’ll start by saying that I love my HomePod. It sounds phenomenal no matter what’s playing. I didn’t think I would ever be so giddy about listening to music (heck, even someone’s voice).

But, forcing all connections through AirPlay, especially an Apple TV, leaves a lot to be desired. Yes, I knew it wasn’t a connected sound bar when I bought it; I simply figured it would work well enough until the software caught up with the hardware. …


How you can trim down your bundles by importing lodash properly

Image for post
Image for post
Importing lodash correctly in a Webpack project

Webpack is an amazing module bundler, but it’s not without its complexities. If you’re just getting started, everything can seem to just work by magic… much like when you’re getting started with AngularJS and the DOM updates automatically for the first time. Below is one simple tip to dramatically decrease your final bundle size if you’re using lodash.

If you’re using lodash as your javascript utility library, you’re likely not using a fraction of the provided methods. This is exactly the use-case for Webpack, picking and choosing modules of code that you need.

You do some searching and find there is a lodash module optimized for module bundlers! You find lodash-es on npm, and it immediately seems to solve your problem. You import { merge } from 'lodash-es'; and you’re off to the races! …

About

Dana Hartweg

Lead Software Engineer, InVision Studio

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store