{"id":13694406,"url":"https://github.com/rodydavis/gmail_clone","last_synced_at":"2025-04-04T11:12:31.218Z","repository":{"id":44031601,"uuid":"175635375","full_name":"rodydavis/gmail_clone","owner":"rodydavis","description":"A Gmail Clone built with Flutter","archived":false,"fork":false,"pushed_at":"2021-01-08T10:17:37.000Z","size":722,"stargazers_count":818,"open_issues_count":4,"forks_count":138,"subscribers_count":20,"default_branch":"master","last_synced_at":"2025-03-28T10:06:36.816Z","etag":null,"topics":["clone","dart","flutter","flutter-examples","gmail","google"],"latest_commit_sha":null,"homepage":null,"language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rodydavis.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-03-14T14:12:06.000Z","updated_at":"2025-02-01T05:03:46.000Z","dependencies_parsed_at":"2022-08-27T06:21:45.521Z","dependency_job_id":null,"html_url":"https://github.com/rodydavis/gmail_clone","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rodydavis%2Fgmail_clone","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rodydavis%2Fgmail_clone/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rodydavis%2Fgmail_clone/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rodydavis%2Fgmail_clone/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rodydavis","download_url":"https://codeload.github.com/rodydavis/gmail_clone/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247166168,"owners_count":20894654,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["clone","dart","flutter","flutter-examples","gmail","google"],"created_at":"2024-08-02T17:01:31.200Z","updated_at":"2025-04-04T11:12:31.204Z","avatar_url":"https://github.com/rodydavis.png","language":"Dart","readme":"# gmail_clone\n\nA new Flutter application to showcase how to build Gmail with Flutter.\n\nVideo Tutorial: [YouTube](https://youtu.be/RWInOp5My3g)\n\n## Screenshots\n\n![listview](https://github.com/AppleEducate/gmail_clone/blob/master/screenshots/listview.png)\n\n![details](https://github.com/AppleEducate/gmail_clone/blob/master/screenshots/details.png)\n\n![tablet](https://github.com/AppleEducate/gmail_clone/blob/master/screenshots/tablet.png)\n\n![selection](https://github.com/AppleEducate/gmail_clone/blob/master/screenshots/selection.png)\n\n\n## Example \n\n``` dart\nimport 'package:floating_search_bar/floating_search_bar.dart';\nimport 'package:flutter/material.dart';\nimport 'package:gmail_clone/ui/app/app.dart';\nimport 'package:responsive_scaffold/responsive_scaffold.dart';\nimport 'package:responsive_scaffold/utils/breakpoint.dart';\n\nimport '../data/classes/email.dart';\nimport '../data/dummy_data.dart';\nimport 'common/common.dart';\n\nclass HomeScreen extends StatefulWidget {\n  @override\n  _HomeScreenState createState() =\u003e _HomeScreenState();\n}\n\nclass _HomeScreenState extends State\u003cHomeScreen\u003e {\n  List\u003cEmailItem\u003e _emails;\n  @override\n  void initState() {\n    _emails = emails;\n    super.initState();\n  }\n\n  final Size _tabletBreakpoint = Size(510.0, 510.0);\n\n  @override\n  Widget build(BuildContext context) {\n    final bool _tablet = isTablet(context, breakpoint: _tabletBreakpoint);\n    return ResponsiveScaffold.builder(\n      tabletBreakpoint: _tabletBreakpoint,\n      detailBuilder: (BuildContext context, int index) {\n        final i = _emails[index];\n        return DetailsScreen(\n          appBar: AppBar(\n            elevation: 0.0,\n            actions: [\n              IconButton(\n                icon: Icon(Icons.archive),\n                onPressed: () {},\n              ),\n              IconButton(\n                icon: Icon(Icons.delete_outline),\n                onPressed: () {\n                  setState(() {\n                    _emails.removeAt(index);\n                  });\n                },\n              ),\n              IconButton(\n                icon: Icon(Icons.mail_outline),\n                onPressed: () {},\n              ),\n              IconButton(\n                icon: Icon(Icons.more_horiz),\n                onPressed: () {},\n              ),\n            ],\n          ),\n          body: EmailView(\n            item: i,\n            favoriteChanged: () {\n              setState(() {\n                i.favorite = !i.favorite;\n              });\n            },\n          ),\n        );\n      },\n      drawer: AppDrawer(),\n      tabletSideMenu: _tablet\n          ? Flexible(\n              flex: 1,\n              child: AppSideMenu(),\n            )\n          : null,\n      tabletFlexListView: 4,\n      slivers: \u003cWidget\u003e[\n        SliverFloatingBar(\n          floating: true,\n          automaticallyImplyLeading: !_tablet,\n          title: TextField(\n            decoration: InputDecoration.collapsed(hintText: \"Search mail\"),\n          ),\n          trailing: CircleAvatar(\n            child: Text(\"RD\"),\n          ),\n        ),\n        SliverToBoxAdapter(\n          child: Container(\n            padding: EdgeInsets.all(12.0),\n            child: Text(\"All Inboxes\"),\n          ),\n        ),\n      ],\n      itemCount: _emails?.length ?? 0,\n      itemBuilder: (BuildContext context, int index) {\n        final i = _emails[index];\n        final bool _lastItem = (index + 1) == emails?.length ?? 0;\n        if (_lastItem) {\n          return Container(\n            padding: EdgeInsets.only(bottom: 70.0),\n            child: EmailListTile(\n              item: i,\n              favoriteChanged: () {\n                setState(() {\n                  i.favorite = !i.favorite;\n                });\n              },\n            ),\n          );\n        }\n        return EmailListTile(\n          item: i,\n          favoriteChanged: () {\n            setState(() {\n              i.favorite = !i.favorite;\n            });\n          },\n        );\n      },\n      floatingActionButton: EmailFAB(),\n    );\n  }\n}\n\n```\n","funding_links":[],"categories":["Misc"],"sub_categories":["Flutter"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frodydavis%2Fgmail_clone","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frodydavis%2Fgmail_clone","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frodydavis%2Fgmail_clone/lists"}