A fresh and modern Google Contacts manager that integrates with GitHub and Twitter.

Last update: Aug 14, 2022

Flokk

A fresh and modern Google Contacts manager that integrates with GitHub and Twitter.

Demo Builds

Contributing

You are invited to improve Flokk Contacts! Submitting pull requests, answering and asking questions in the Issues page, and updating documentation are all ways you can contribute to the app.

Please note that although we are monitoring GitHub issues, we aren't actively maintaining the codebase, so community involvement and contributions are really appreciated going forward. We're aiming to review pull requests on a weekly basis.

Getting Set Up

1. Flutter

2. Add Required API Keys

Google Sign In is required in order to run the app (unless running with cached data). The app uses the Google People API, and you will need to provide your own Google OAuth 2 client credentials in the /lib/api_keys.dart file.

Follow the instructions here to enable the People API and create credentials:

To optionally fetch social data for your contacts, add your own API keys for those as well:

Although the Twitter and GitHub keys are optional, they are recommended. Otherwise the app will not be able to fetch tweets and GitHub calls will be subject to a rate limit (https://developer.github.com/v3/#rate-limiting).

Web Builds

If you're building for web:

  • Edit /web/index.html to include your web credentials (web client Id) <meta name="google-signin-client_id" content="YOUR_GOOGLE_SIGN_IN_OAUTH_CLIENT_ID.apps.googleusercontent.com">.
  • This is needed for Google Sign In to work on web builds. For more details, see https://pub.dev/packages/google_sign_in_web

CORS Proxy

For Twitter support to work on web builds, it is necessary to use a CORS proxy. You can set up a proxy on your own domain, or else run a localhost instance with proxy/app.js.

If setting up on your domain, ensure you have enabled https (https://letsencrypt.org/). Once you have the security certificate, edit proxy/app.js and insert your cert and key. This is not necessary if running a localhost instance.

After the proxy is set up, edit services/twitter_rest_service.dart to point to your running proxy instance (e.g. "https://my-proxy.com", "http://localhost", etc.)

For more information, see https://github.com/Rob--W/cors-anywhere

Running With Cached Data

If you simply want to see the app running, it is possible to run the app using cached data:

  • Run the app at least once, to create your data folders
  • Extract the contents of /sample_data.zip to the newly created data folder on your machine:
    • Windows: \Users\[USER]\AppData\Roaming\flokk
    • Linux: $HOME/.local/share/flokk-contacts
    • macOS: /Users/[USER]/Library/Containers/app.flokk/Data/Library/Application Support/app.flokk
  • Overwrite any files that are there
  • Launch the app again, it should now sign in, and load with existing data.
  • If you sign out, your saved data will be wiped and you will need to repeat the process.

Note: This is meant as a 'read-only' mode so you can quickly explore all the widgets and features of the app. Updates, deletes, etc are not expected to work.

Test & Build

Debug Builds

  • Use flutter run -d DEVICE_ID to deploy a test build
  • To get a list of available DEVICE_ID, use flutter run
  • Typical values are: windows, linux, macos, chrome
  • Add --release to deploy an optimized build

Release Builds

  • Use flutter build PACKAGE_TYPE to build a release package
  • To get a list of available PACKAGE_TYPE, use flutter build
  • Typical values are windows, linux, apk, ios
  • In order to build the snap package one must first run lxd init on your system if you haven't already. ** Then execute snapcraft --use-lxd to create the snap from the flutter build

Force Log In

  • The app uses a kForceWebLogin flag to force release builds to skip the oauth screen.
  • Add --dart-define=flokk.forceWebLogin=true to your build command to enable
  • E.g. flutter build web --dart-define=flokk.forceWebLogin=true

Desktop Runners

The /linux and /windows folders contain modifications and should not be upgraded to upstream without first verifying that each plugin works correctly with the new upstream code and any modifications are made.

Since the desktop runners for this project may contain modifications, upgrades should not be made without first verifying that every plugin and embedder can be upgraded and that they remain compatible after an upgrade. Hopefully this will not be as much of an issue once Flutter's desktop support becomes more mature.

--

Happy Flokking!

GitHub

https://github.com/gskinnerTeam/flokk
Comments
  • 1. sqflite issues

    Hi, wanna ask how do u guys implement solved the SQL problem in flokk on desktop version. AFAIK, there were no such plugin for sqflite for now in flutter.

    Reviewed by jinfagang at 2020-07-16 07:53
  • 2. Couldn't `flutter pub get`

    Hello, After flutter pub get I've got such error:

    Because dartx >=0.2.0 depends on collection >=1.14.11 <1.15.0 and every version of flutter from sdk depends on collection 1.15.0-nullsafety, dartx >=0.2.0 is incompatible with flutter from sdk.
    So, because flokk depends on both flutter any from sdk and dartx ^0.4.0, version solving failed.
    pub get failed (1; So, because flokk depends on both flutter any from sdk and dartx ^0.4.0, version solving failed.)
    

    I have

    $ flutter --version
    Flutter 1.20.0-8.0.pre.125 • channel master • https://github.com/flutter/flutter.git
    Framework • revision 9c4a5ef1ed (9 hours ago) • 2020-07-15 21:41:27 +0100
    Engine • revision 774ae0313d
    Tools • Dart 2.9.0 (build 2.9.0-21.0.dev 89fe12b12a)
    
    Reviewed by gagarin55 at 2020-07-16 05:42
  • 3. Empty window on Ubuntu 20.04

    Just installed the snap version. After starting the app, I can only see an empty window. When I start the app from terminal I get this:

    [email protected]:~$ flokk-contacts 
    
    (flokk-contacts:3482): Gdk-WARNING **: 09:52:42.440: ../../../../../gdk/x11/gdkwindow-x11.c:5579 drawable is not a native X11 window
    
    ** (flokk-contacts:3482): WARNING **: 09:52:42.450: Failed to start Flutter engine: Failed to create EGL surface: Bad Native Window
    
    Reviewed by mivoligo at 2020-07-09 08:56
  • 4. Question: Does static instance of context make a perf difference

    I noticed that the AbstractCommand checks to see if the context passed into the constructor matches a previously passed in context.

    https://github.com/gskinnerTeam/flokk/blob/861553120f153a6cba8bf262d6fc02002234469b/flokk_src/lib/commands/abstract_command.dart#L25-L30

    Wondering whether this done purely for perf gains, and if so how noticeable is the difference?

    Reviewed by chimon2000 at 2020-10-27 05:46
  • 5. README gives incorrect Flutter hash

    The recent changes to the repo appear to be using a recent master—it's using the latest FDE plugin versions, and a fairly recent version of the Windows runner—but the README still says to use Flutter 9c3f0faa6d, which is from June. That wouldn't compile.

    The README should be updated to whatever version you updated against.

    Reviewed by stuartmorgan at 2020-09-21 16:59
  • 6. Unable to copy text

    Hey, I'm trying to make a flutter desktop app for Linux and in a text field, I'm not able to use any keyboard shortcuts for eg, ctrl+c for copy or ctrl+a for all selection. Can you help me with this?

    Reviewed by rish07 at 2020-08-23 08:30
  • 7. Fix default geometry for scaled screens

    There is an issue when the application starts up on a scaled (HiDpi) monitor. gtk_widget_set_size_request sets the minimum size for the window. It currently uses 1376x768. On a screen with scale factor of 2, this 2752x1376. I have a 2160x1440 display. Therefore the width is too large to fit on the screen. I updated the code to first get the scale factor and divide the preferred width and height by the scale factor. This now shows up correctly on my display.

    Reviewed by harriseldon at 2020-08-21 03:40
  • 8. Cannot resize on Gnome with scaling

    I currently use 200% scaling in Gnome. When I launch Flokk, it is larger than my available screen and cannot be resized.

    If I switch the scaling back to 100% and launch Flokk, it appears smaller than my screen and I am able to resize it.

    Reviewed by harriseldon at 2020-08-18 13:49
  • 9. Build fails with No named parameter with the name 'autovalidate' on flutter master

    Flutter master version: 2.9.0-1.0.pre.293

    Build error with No named parameter with the name 'autovalidate'.

    To fix it:

    change autovalidate to autovalidateMode. change final bool autoValidate to final AutovalidateMode autoValidate change this.autoValidate =false to this.autoValidate = AutovalidateMode.disabled

    Reviewed by sgon00 at 2022-01-25 12:14
  • 10. build fails with KeyEventResult type errors

    (latest flutter on ubuntu)

    > flutter run -d linux
    Running "flutter pub get" in flokk_src...                          15.8s
    Launching lib/main.dart on Linux in debug mode...
    ERROR: lib/styled_components/styled_text_input.dart:149:20: Error: A value of type 'bool' can't be returned from a function with return type 'KeyEventResult'.
    ERROR:  - 'KeyEventResult' is from 'package:flutter/src/widgets/focus_manager.dart' ('/home/dym/snap/flutter/common/flutter/packages/flutter/lib/src/widgets/focus_manager.dart').
    ERROR:             return true;
    ERROR:                    ^
    ERROR: lib/styled_components/styled_text_input.dart:152:16: Error: A value of type 'bool' can't be returned from a function with return type 'KeyEventResult'.
    ERROR:  - 'KeyEventResult' is from 'package:flutter/src/widgets/focus_manager.dart' ('/home/dym/snap/flutter/common/flutter/packages/flutter/lib/src/widgets/focus_manager.dart').
    ERROR:         return false;
    ERROR:                ^
    ERROR: lib/views/search/search_bar_view.dart:46:14: Error: The argument type 'bool Function(FocusNode, RawKeyEvent)' can't be assigned to the parameter type 'KeyEventResult Function(FocusNode, RawKeyEvent)?'.
    ERROR:  - 'FocusNode' is from 'package:flutter/src/widgets/focus_manager.dart' ('/home/dym/snap/flutter/common/flutter/packages/flutter/lib/src/widgets/focus_manager.dart').
    ERROR:  - 'RawKeyEvent' is from 'package:flutter/src/services/raw_keyboard.dart' ('/home/dym/snap/flutter/common/flutter/packages/flutter/lib/src/services/raw_keyboard.dart').
    ERROR:  - 'KeyEventResult' is from 'package:flutter/src/widgets/focus_manager.dart' ('/home/dym/snap/flutter/common/flutter/packages/flutter/lib/src/widgets/focus_manager.dart').
    ERROR:       onKey: _handleKeyPress,
    ERROR:              ^
    Building Linux application...
    Exception: Build process failed
    
    Reviewed by dym-sh at 2021-09-29 16:45
  • 11. Where do i place the sample data?

    I'm currently using vscode on windows to launch the web app. As per the README to use cache data, I copy the contents of "sample_data.zip" to "C:\Users<USER>\AppData\Roaming\flokk"

    However, i got some error and exception:

    [ERROR] Exception: app.settings not found ............... Error: Exception: error-log.txt not found .............

    Am i missing any steps?

    Reviewed by jeremy-chua at 2021-08-30 07:19
  • 12. Loading only 1000 out of 2566 contacts

    I am only getting 1000 contacts. I think there is a error in "load more" mechanism. Logs:

    Restarted application in 703ms. flutter: /################################################## flutter: [BootstrapCommand] flutter: DataDir is: C:\Users\jrvid\AppData\Roaming\flokk flutter: ################################################## flutter: [RefreshAuthTokensCommand] Refreshing with token: <<>> flutter: Response: 200 / { "access_token": "<<>>", "expires_in": 3599, "scope": "https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/contacts", "token_type": "Bearer", "id_token": "<<>>" } flutter: Refresh token success. authKey = <<>>, refreshToken = <<>> flutter: [RefreshContactsCommand] flutter: [RefreshAuthTokensCommand] Refreshing with token: <<>> flutter: REQUEST: https://people.googleapis.com/v1/people/me/connections?access_token=<<>>&personFields=addresses,ageRanges,biographies,birthdays,braggingRights,coverPhotos,emailAddresses,events,genders,imClients,interests,locales,memberships,metadata,names,nicknames,occupations,organizations,phoneNumbers,photos,relations,relationshipInterests,relationshipStatuses,residences,sipAddresses,skills,taglines,urls,userDefined&sortOrder=FIRST_NAME_ASCENDING&pageSize=2000&requestSyncToken=true /// RESPONSE: 200 flutter: token: <<>> 1000 out of 2566 flutter: [RefreshContactGroupsCommand] flutter: [RefreshAuthTokensCommand] Refreshing with token: <<>> flutter: REQUEST: https://people.googleapis.com/v1/contactGroups?access_token=<<>>&pageSize=1000 /// RESPONSE: 200 flutter: Groups loaded = 13 flutter: Contacts loaded = 1000 flutter: ######################### flutter: BootstrapCommand Complete flutter: ######################### flutter: [RefreshContactsCommand] flutter: [RefreshAuthTokensCommand] Refreshing with token: <<>> flutter: REQUEST: https://people.googleapis.com/v1/people/me/connections?access_token=<<>>&personFields=addresses,ageRanges,biographies,birthdays,braggingRights,coverPhotos,emailAddresses,events,genders,imClients,interests,locales,memberships,metadata,names,nicknames,occupations,organizations,phoneNumbers,photos,relations,relationshipInterests,relationshipStatuses,residences,sipAddresses,skills,taglines,urls,userDefined&sortOrder=FIRST_NAME_ASCENDING&pageSize=2000&requestSyncToken=true /// RESPONSE: 200 flutter: token: <<>> 1000 out of 2566

    Reviewed by jrvidotti at 2021-07-23 18:25

Related

Gitrat (Github-Traitors) is a CLI utility to track GitHub (un)followers.

Gitrat ?? Gitrat (Github-Traitors) is a CLI utility to track GitHub (un)followers. Prerequisite Dart Setup Cloning Repository $ git clone https://gith

Feb 1, 2021
Like Button is a flutter library that allows you to create a button with animation effects similar to Twitter's heart when you like something and animation effects to increase like count.
Like Button is a flutter library that allows you to create a button with animation effects similar to Twitter's heart when you like something and animation effects to increase like count.

like_button Language: English | 中文简体 Like Button is a flutter library that allows you to create a button with animation effects similar to Twitter's h

Aug 10, 2022
💙 Google Classroom Clone using Flutter, GCP
💙 Google Classroom Clone using  Flutter, GCP

Introduction ?? Classroom is a Google Classroom clone built using ?? Flutter. Before we start, you can take a look at the app: Screenshots ?? Key Feat

Aug 4, 2022
High-level interfaces to Google Cloud Platform APIs

Google Cloud Platform support package (gcloud) The gcloud package provides a high level "idiomatic Dart" interface to some of the most widely used Goo

Jul 14, 2022
✨A clean and lightweight loading/toast widget for Flutter, easy to use without context, support iOS、Android and Web
✨A clean and lightweight loading/toast widget for Flutter, easy to use without context, support iOS、Android and Web

Flutter EasyLoading English | 简体中文 Live Preview ?? https://nslog11.github.io/flutter_easyloading Installing Add this to your package's pubspec.yaml fi

Aug 14, 2022
This repository demonstrates use of various widgets in flutter and tricks to create beautiful UI elements in flutter for Android and IOS
This repository demonstrates use of various widgets in flutter and tricks to create beautiful UI elements in flutter for Android and IOS

AwesomeFlutterUI The purpose of this repository is to demonstrate the use of different widgets and tricks in flutter and how to use them in your proje

May 20, 2022
A collection of Screens and attractive UIs built with Flutter ready to be used in your applications. No external libraries are used. Just download, add to your project and use.
A collection of Screens and attractive UIs built with Flutter ready to be used in your applications. No external libraries are used. Just download, add to your project and use.

Flutter Screens A collection of Login Screens, Buttons, Loaders and Widgets with attractive UIs, built with Flutter, ready to be used in your applicat

Aug 13, 2022
A flutter package which contains a collection of some cool and beautiful effects; support android and ios
A flutter package which contains a collection of some cool and beautiful effects; support android and ios

flutter effects A flutter package which contains a collection of some cool and beautiful effects; support android and ios . Screenshot type support ch

Aug 15, 2022
Flexible and easy to use page transitions.
Flexible and easy to use page transitions.

flutter_villains What are heroes without villains? (Profile image from: https://unsplash.com/photos/pAs4IM6OGWI) Check out the article. What are villa

Jul 26, 2022
🔔 A flutter package to create cool and beautiful text animations. [Flutter Favorite Package]
🔔  A flutter package to create cool and beautiful text animations. [Flutter Favorite Package]

Animated Text Kit A flutter package which contains a collection of some cool and awesome text animations. Recommended package for text animations in C

Aug 11, 2022
Easily add staggered animations to your ListView, GridView, Column and Row children.
Easily add staggered animations to your ListView, GridView, Column and Row children.

Flutter Staggered Animations Easily add staggered animations to your ListView, GridView, Column and Row children as shown in Material Design guideline

Aug 12, 2022
Fun canvas animations in Flutter based on time and math functions.
Fun canvas animations in Flutter based on time and math functions.

funvas Flutter package that allows creating canvas animations based on time and math (mostly trigonometric) functions. The name "funvas" is based on F

Aug 13, 2022
A widget for stacking cards, which users can swipe horizontally and vertically with beautiful animations.
A widget for stacking cards, which users can swipe horizontally and vertically with beautiful animations.

A widget for stacking cards, which users can swipe horizontally and vertically with beautiful animations.

Jul 20, 2022
A catalog of beautiful, reusable and elegant animations
A catalog of beautiful, reusable and elegant animations

Animations Catalog The goal of this project is to catalog and build multiple animation patterns with flutter. Budget App Animation Harley Swipe To Enl

Sep 6, 2021
Beautiful Animated ListView and GridView

staggered_animated_listview Beautiful Animated ListView and GridView Online Preview Getting Started This project is a starting point for a Flutter app

Dec 11, 2021
A package to create nice and smooth animations for flutter
A package to create nice and smooth animations for flutter

animation_director A package to create nice and smooth animations for flutter Introduction A simple package to build beautiful and smooth animations f

Dec 5, 2021
An awesome list that curates the best Flutter libraries, tools, tutorials, articles and more.
An awesome list that curates the best Flutter libraries, tools, tutorials, articles and more.

Flutter is Google’s UI toolkit for building beautiful, natively compiled applications for mobile, web, and desktop from a single codebase. If you appr

Aug 17, 2022
A Flutter package for a quick and handy giffy dialog.
A Flutter package for a quick and handy giffy dialog.

?? Giffy Dialogs A beautiful and custom alert dialog for flutter highly inspired from FancyAlertDialog-Android. The source code is 100% Dart, and ever

Aug 7, 2022
a widget provided to the flutter scroll component drop-down refresh and pull up load.
a widget provided to the flutter scroll component drop-down refresh and pull up load.

flutter_pulltorefresh Intro a widget provided to the flutter scroll component drop-down refresh and pull up load.support android and ios. If you are C

Aug 11, 2022