All Projects → rodydavis → Gmail_clone

rodydavis / Gmail_clone

Licence: mit
A Gmail Clone built with Flutter

Programming Languages

dart
5743 projects

Projects that are alternatives of or similar to Gmail clone

Add Ons Samples
Sample Google Workspace Add-ons
Stars: ✭ 159 (-76.99%)
Mutual labels:  google, gmail
Gmail-Clone
Gmail Clone using flutter
Stars: ✭ 82 (-88.13%)
Mutual labels:  clone, gmail
Darkness
Dark Themes for Popular Websites
Stars: ✭ 467 (-32.42%)
Mutual labels:  google, gmail
Pagodo
pagodo (Passive Google Dork) - Automate Google Hacking Database scraping and searching
Stars: ✭ 603 (-12.74%)
Mutual labels:  google
Apps Script Starter
Setup a local development environment inside Visual Studio Code and build Google Workspace add-ons with Google Apps Script
Stars: ✭ 611 (-11.58%)
Mutual labels:  gmail
Sou
简单搜索,一个简单的前端界面。用惯了各种导航首页,满屏幕尽是各种不厌其烦的广告和资讯;尝试自己写个自己的主页。
Stars: ✭ 628 (-9.12%)
Mutual labels:  google
Stories
Medium clone built with Ruby on Rails
Stars: ✭ 688 (-0.43%)
Mutual labels:  clone
No Google
Completely block Google and its services
Stars: ✭ 596 (-13.75%)
Mutual labels:  google
Jira clone
A Jira clone built with Vuejs & Nodejs/Graphql
Stars: ✭ 666 (-3.62%)
Mutual labels:  clone
Pydis
A redis clone in Python 3 to disprove some falsehoods about performance.
Stars: ✭ 623 (-9.84%)
Mutual labels:  clone
Search Deflector
A small program that forwards searches from Cortana to your preferred browser and search engine.
Stars: ✭ 620 (-10.27%)
Mutual labels:  google
Leku
🌍 Map location picker component for Android. Based on Google Maps. An alternative to Google Place Picker.
Stars: ✭ 612 (-11.43%)
Mutual labels:  google
Tinder React Native
Tinder clone - React Native.
Stars: ✭ 661 (-4.34%)
Mutual labels:  clone
Versaplayer
Versatile Video Player implementation for iOS, macOS, and tvOS
Stars: ✭ 608 (-12.01%)
Mutual labels:  google
Cloudcomparer
Compare the various managed cloud services offered by the major public cloud providers in the market.
Stars: ✭ 678 (-1.88%)
Mutual labels:  google
Beelogger
Generate Gmail Emailing Keyloggers to Windows.
Stars: ✭ 605 (-12.45%)
Mutual labels:  gmail
Playstoredownloader
A command line tool to download Android applications directly from the Google Play Store by specifying their package name (an initial one-time configuration is required)
Stars: ✭ 664 (-3.91%)
Mutual labels:  google
Gdrivefs
An innovative FUSE wrapper for Google Drive.
Stars: ✭ 618 (-10.56%)
Mutual labels:  google
Machine Learning Book
《机器学习宝典》包含:谷歌机器学习速成课程(招式)+机器学习术语表(口诀)+机器学习规则(心得)+机器学习中的常识性问题 (内功)。该资源适用于机器学习、深度学习研究人员和爱好者参考!
Stars: ✭ 616 (-10.85%)
Mutual labels:  google
Html Pdf Chrome
HTML to PDF converter via Chrome/Chromium
Stars: ✭ 629 (-8.97%)
Mutual labels:  google

gmail_clone

A new Flutter application to showcase how to build Gmail with Flutter.

Video Tutorial: YouTube

Screenshots

listview

details

tablet

selection

Example

import 'package:floating_search_bar/floating_search_bar.dart';
import 'package:flutter/material.dart';
import 'package:gmail_clone/ui/app/app.dart';
import 'package:responsive_scaffold/responsive_scaffold.dart';
import 'package:responsive_scaffold/utils/breakpoint.dart';

import '../data/classes/email.dart';
import '../data/dummy_data.dart';
import 'common/common.dart';

class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  List<EmailItem> _emails;
  @override
  void initState() {
    _emails = emails;
    super.initState();
  }

  final Size _tabletBreakpoint = Size(510.0, 510.0);

  @override
  Widget build(BuildContext context) {
    final bool _tablet = isTablet(context, breakpoint: _tabletBreakpoint);
    return ResponsiveScaffold.builder(
      tabletBreakpoint: _tabletBreakpoint,
      detailBuilder: (BuildContext context, int index) {
        final i = _emails[index];
        return DetailsScreen(
          appBar: AppBar(
            elevation: 0.0,
            actions: [
              IconButton(
                icon: Icon(Icons.archive),
                onPressed: () {},
              ),
              IconButton(
                icon: Icon(Icons.delete_outline),
                onPressed: () {
                  setState(() {
                    _emails.removeAt(index);
                  });
                },
              ),
              IconButton(
                icon: Icon(Icons.mail_outline),
                onPressed: () {},
              ),
              IconButton(
                icon: Icon(Icons.more_horiz),
                onPressed: () {},
              ),
            ],
          ),
          body: EmailView(
            item: i,
            favoriteChanged: () {
              setState(() {
                i.favorite = !i.favorite;
              });
            },
          ),
        );
      },
      drawer: AppDrawer(),
      tabletSideMenu: _tablet
          ? Flexible(
              flex: 1,
              child: AppSideMenu(),
            )
          : null,
      tabletFlexListView: 4,
      slivers: <Widget>[
        SliverFloatingBar(
          floating: true,
          automaticallyImplyLeading: !_tablet,
          title: TextField(
            decoration: InputDecoration.collapsed(hintText: "Search mail"),
          ),
          trailing: CircleAvatar(
            child: Text("RD"),
          ),
        ),
        SliverToBoxAdapter(
          child: Container(
            padding: EdgeInsets.all(12.0),
            child: Text("All Inboxes"),
          ),
        ),
      ],
      itemCount: _emails?.length ?? 0,
      itemBuilder: (BuildContext context, int index) {
        final i = _emails[index];
        final bool _lastItem = (index + 1) == emails?.length ?? 0;
        if (_lastItem) {
          return Container(
            padding: EdgeInsets.only(bottom: 70.0),
            child: EmailListTile(
              item: i,
              favoriteChanged: () {
                setState(() {
                  i.favorite = !i.favorite;
                });
              },
            ),
          );
        }
        return EmailListTile(
          item: i,
          favoriteChanged: () {
            setState(() {
              i.favorite = !i.favorite;
            });
          },
        );
      },
      floatingActionButton: EmailFAB(),
    );
  }
}

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].