An app to show everything bus related in Singapore, including arrival times and a directory

Overview

icon NextBus SG

An app to show everything bus related in Singapore, including bus arrival times and a directory, with extra features.

Made with Flutter PRs Welcome GitHub BMAC HitCount

Get it on app store Get it on Google Play

๐ŸŽ† Gallery

light mode dark mode other screens

Click here to see a detailed explanation of each screen.

๐Ÿš€ Features

Click to reveal all features
  • Show the arrival times of buses at stops near the user
    • Show a list of buses not currently in serivce
    • Show if a bus stop is also an MRT station in the search page
    • Show which all bus stops around the user are also MRT stations (needs help) (#2)
    • Show the load of buses (green for not crowded ... )
    • Show timings for college buses (NUS, NTU, SUTD, ... ), although still need to collect data for these (check out this repository for updates)
  • Ability to save buses at a particular stop as a favorite
    • Confirm user's action of adding/removing from favorites using bottom sheets
      • Display a toast when a favorite has been added/removed to notfy the user of their actions
      • Use slidable widget for adding and removing favorites
    • Automatically show the arrival time of favorite buses at stops (if user is at stop)
    • Add ability to view all favorites in a popup page
    • Show message prompting user to add a favorite if there are no favorites
    • Custom names for favorites
  • Ability to search for bus services, routes, and stops (Search page)
    • See information for each bus stop
    • See information for each bus service
      • See a list of routes for each bus service
    • See information for each MRT station (unplanned)
  • FAQ page to teach users how to use the app
  • Onboarding (introduction) pages to show how to use the app
  • Third page (settings/options page, should also show tutorial/FAQ on how to use the app)
  • Request user location permission on app start
    • Display button to open settings if location permissions denied
  • Add quick actions to go to favorites and MRT map (implemented, but not working on IOS: #13634)
  • Theme customization
    • Light/dark theme
      • Change status bar text color depending on theme
  • THINK OF A MORE CREATIVE NAME. How is BlackBus SG?
๐Ÿงจ Click to reveal features for the future
  • Graph view for arrival times, rather than just showing numbers (planned, although implementation is difficult)
  • AR navigation
  • Tell users how to get to the nearest bus stop (unplanned)
  • Map view to show the nearest bus stops (unplanned) (might not implement)

Wiki

๐Ÿ›  Data

Check out ninest/bus-sg for a detailed guide on how the data was scraped. The data is copyrighted by LTA.

๐Ÿ“ฆ Packages used

  • provider
  • hive
  • hive_flutter
  • hive_generator
  • geolocator
  • permission_handler
  • styled_widget
  • flutter_markdown
  • bot_toast
  • url_launcher
  • introduction_screen
  • flutter_launcher_icons
  • flutter_native_splash
  • quick_actions

App philosophy

In short, I first made this app only for myself because I wasn't happy with any app that already exists. All I needed was a simple, clutter-free interface to show bus timings of only the buses I'm actually taking. On rare occasions, I wounldn't know where the bus stop is. I'd just use Google Maps. I never found large maps on bus apps useful.

No map

The thing is, once you know where a bus stop is, you won't need to use the map again. If you already know where the stop is, the mpa on your scren takes more space. There are rare occasions when I don't know how to get to the bus stop, but that's why I have Google/Apple Maps.

Clutter free interface

You need bus timings. I'm giving you bus timings. Period.

Context-aware favorites

  • You saved Bus 14 at Bedok Interchange as a favorite.
  • You open the app near Bedok Interchange
  • We assume that you are taking Bus 14, so we put its timings at the top of the screen (refer to the images above)

Other information

Built setup

Your system requires the Flutter SDK. Follow the steps here to install it on your system. Once Flutter is installed, follow these steps:

  1. Clone or fork this repository.
  2. In the lib folder, create keys.dart .

In keys.dart , paste the following:

final String apiKey = '<LTA API KEY>';

To get an API key, go to LTA's Request For API Access web page and fill out the form. The key is required for the app to work properly.

Once the key as been set up, the app can be tested with the following commands:

flutter run

Please check out the wiki for additional information.

Generating icons and splash screens

After updating pubspec.yaml , run these commands:

flutter pub run flutter_launcher_icons:main
flutter pub pub run flutter_native_splash:create

Stuck at installing debug Android app?

Go to app settings and uninstall your app. The app may not appear in your launcher, but it could still be installed. Go to your settings, find it, and completely uninstall it.

This can also be done using ADB:

adb uninstall com.themindstorm.nextbussg

If this does not work, check out this answer on SO.

Build Android APK and appbundle

flutter build appbundle
flutter build apk

Once the APK has been built, install it on a physcally connected Android device:

flutter install

If you have multiple devices, you can view a list of Android devices connected using this command:

adb devices

And to install the app on an Android device, copy the device ID and install the app using

flutter install <devce ID>

๐ŸŽ— Support

Like this project?

  • โญ๏ธ Star the repository
  • ๐Ÿ“ฉ Send a pull request to add new features
  • ๐Ÿ’Œ Share this repository with other developers
  • ๐Ÿ“ฒ Download the mobile apps (scroll to the top for links)

Detailed screenshots

Click to reveal detailed images of the app's different screens and explanations. These images may be too tall for desktop screens.
UI Description
onboard view Onboarding screen, where the user is asked for the location permission
main page Main page, where users see a list of bus stops near them (and favorites), and see their respective bus arrival timings
favorites prompt Users are prompted to confirm
favorites view Favorites that are close to the user are show on the main page
search view Search page
bus stop view Bus stop details page
bus service view Bus service details page
More page More page, where users can change settings and see some more features
dark view ๐ŸŒ™ Dark theme
rename Bus stops can be renamed (renamed bus stops in italics)
quick actions Quick actions! These do not seem to be working on iOS at the moment: #13634.

This and this was what the design looked like at first.

Acknowledgements

This app makes use of data and images (MRT map) from:

License

GPL-3.0

Legal attribution

Google Play and the Google Play logo are trademarks of Google LLC.

You might also like...

Audio manager - A flutter plugin for music playback, including notification handling.

Audio manager - A flutter plugin for music playback, including notification handling.

audio_manager A flutter plugin for music playback, including notification handling. This plugin is developed for iOS based on AVPlayer, while android

Oct 25, 2022

A weather application that show the current weather for your location and forecast for 6 days, and favorite city and other locations

A weather application that show the current weather for your location and forecast for 6 days, and favorite city and other locations

Weather Application App concept created with Flutter using Dart programming language ad it's a demanded task in my internship at Algoriza About An app

Nov 13, 2022

Third App on Donut Count to show Stateless and Stateful App

Third App on Donut Count to show Stateless and Stateful App

Third App on Donut Count to show Stateless and Stateful App A new Flutter project. This app is show how Stateful and Stateless Widgets work together f

Mar 16, 2022

Provide easy and flexible way to show SnackBar. Simple text, undo, and error style are supported.

Provide easy and flexible way to show SnackBar. Simple text, undo, and error style are supported.

snack_bar_presenter Provide easy and flexible way to show SnackBar. Simple text, undo, and error style are supported. . . . Usage import 'package:exam

Nov 30, 2020

Android app to show movie ratings when browsing Netflix, Amazon Prime Video and other supported video streaming apps on the phone

Android app to show movie ratings when browsing Netflix, Amazon Prime Video and other supported video streaming apps on the phone

Flutter - Movie Ratings You can get the latest Playstore version here on Playstore - or download directly - 0.4.5 Screenshots of master Search Page Fa

Nov 23, 2022

A flutter widget that show the camera stream and allow ML vision recognition on it, it allow you to detect barcodes, labels, text, faces...

A flutter widget that show the camera stream and allow ML vision recognition on it, it allow you to detect barcodes, labels, text, faces...

Flutter Camera Ml Vision A Flutter package for iOS and Android to show a preview of the camera and detect things with Firebase ML Vision. Installation

Jan 2, 2023

Application that consumes the Movie Database (TMDB) api to show and search any kind of movie with its actors.

# cartelera A new Flutter project. ## Getting Started This project is a starting point for a Flutter application. A few resources to get you start

Jan 11, 2022

It's flutter weather project using "openweathermap(api)" and it just show the one city's weather forecast

flutter_weather A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started

Dec 24, 2021

A Flutter package for show custom in-app notification.

A Flutter package for show custom in-app notification.

๐Ÿ’ฌ in_app_notification A Flutter package to show custom in-app notification with any Widgets. โœ๏ธ Usage Import it. dependencies: in_app_notificatio

Oct 27, 2022
Comments
  • Pub get problem on clean setup

    Pub get problem on clean setup

    Error:

    [NextBusSG] flutter pub get
    Running "flutter pub get" in NextBusSG...                       
    Because dartx 0.2.0 depends on quiver >=2.0.3 <2.1.0 and no versions of dartx match >0.2.0 <0.3.0, dartx ^0.2.0 requires quiver >=2.0.3 <2.1.0.
    
    And because every version of flutter_test from sdk depends on quiver 2.1.3, flutter_test from sdk is incompatible with dartx ^0.2.0.
    
    And because hive_generator 0.7.0+2 depends on dartx ^0.2.0 and no versions of hive_generator match >0.7.0+2 <0.8.0, flutter_test from sdk is incompatible with hive_generator ^0.7.0+2.
    
    So, because nextbussg depends on both hive_generator ^0.7.0+2 and flutter_test any from sdk, version solving failed.
    pub get failed (1; So, because nextbussg depends on both hive_generator ^0.7.0+2 and flutter_test any from sdk, version solving failed.)
    exit code 1
    
    opened by zk-g 4
  • Build failed with an exception

    Build failed with an exception

    When I try to compile, it prompts several errors as below :

    /C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/bot_toast-2.2.1/lib/src/key_board_safe_area.dart:12:48: Error: No named parameter with the name 'nullOk'. MediaQueryData data= MediaQuery.of(context,nullOk: true); ^^^^^^ /C:/src/flutter/packages/flutter/lib/src/widgets/media_query.dart:818:25: Context: Found this candidate, but the arguments don't match. static MediaQueryData of(BuildContext context) { ^^ /C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_slidable-0.5.4/lib/src/widgets/slidable.dart:246:20: Error: The method 'inheritFromWidgetOfExactType' isn't defined for the class 'BuildContext'.

    • 'BuildContext' is from 'package:flutter/src/widgets/framework.dart' ('/C:/src/flutter/packages/flutter/lib/src/widgets/framework.dart'). Try correcting the name to the name of an existing method, or defining a method named 'inheritFromWidgetOfExactType'. return context.inheritFromWidgetOfExactType(SlidableData); ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_slidable-0.5.4/lib/src/widgets/slidable.dart:541:17: Error: The method 'inheritFromWidgetOfExactType' isn't defined for the class 'BuildContext'.
    • 'BuildContext' is from 'package:flutter/src/widgets/framework.dart' ('/C:/src/flutter/packages/flutter/lib/src/widgets/framework.dart'). Try correcting the name to the name of an existing method, or defining a method named 'inheritFromWidgetOfExactType'. context.inheritFromWidgetOfExactType(_SlidableScope); ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

    Please help as I do not have any idea how to solve this. Thanks.

    opened by ganlulu2018 0
  • Manually set Expansion Tile height and width

    Manually set Expansion Tile height and width

    I do not know the default vertical and horizontal padding for the ExpansionPanel widget, so I had to "eyeball" it to make the placeholder loading widget (LoadingBusStopTile). The values provided for padding look fine when the default font size is 19, but may look weird for different sizes.

    opened by ninest 1
Releases(v0.0.8)
Automatically increment File & Directory name and create

Name Plus Automatically increment File & Directory name and create. Getting Started In the pubspec.yaml of your flutter project, add the following dep

Thit Lwin 0 Dec 29, 2021
Caffodils - Download everything | Flutter app for Android and IOS. Download Video, Reels, Shorts, Music, Images, Files from Instagram, Facebook and Youtube

caffodils Caffodils - Download everything Flutter app for Android and IOS. Download Video, Reels, Shorts, Music, Images, Files from Instagram, Faceboo

Caffodils 11 Oct 24, 2022
A Dart library for creating a Dart object to represent directory trees.

Directory Tree A Dart library for creating a Dart object to represent directory trees. Getting Started Import and initialize package import 'package:d

Chiziaruhoma Ogbonda 5 Dec 1, 2021
Learn Flutter on Flutter! A widget directory with implementation samples!

Fludget Browse through a variety of widgets used in flutter This application is developed to learn Flutter using Flutter. Different widgets used in fl

ACM VIT 29 Nov 23, 2022
Kind of app that generally used to maintain our day-to-day tasks or list everything that we have to do.We can add more tasks at any time and delete a task that is completed.

todo_application A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started

Khaled Elnkhla 0 Nov 6, 2021
WeCare is a logistics management platform that can manage everything like delivering goods in time and in a preferable cost.

wecare_logistics A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started

Shaurya kajiwala 5 Nov 10, 2022
Crowdsourced COVID Related Resources Finder App Written In Flutter

COVIDAID+ Build Setup # install dependencies $ flutter pub get # run debug mode $ flutter run # run release mode $ flutter run --release # build ap

Mithun S Menon 4 Jul 21, 2022
The FlexGrid control provides a powerful and quickly way to display data in a tabular format. It is including that frozened column/row,loading more, high performance and better experience in TabBarView/PageView.

flex_grid Language: English| ไธญๆ–‡็ฎ€ไฝ“ The FlexGrid control provides a powerful and quickly way to display data in a tabular format. It is including that f

FlutterCandies 39 Nov 8, 2022
This repo contains a list of helpful Flutter related questions you can use to interview potential candidates.

Flutter Interview Questions This file contains a number of Flutter interview questions. Note: Keep in mind that many of these questions are open-ended

Whatsupcoders 325 Dec 2, 2022
The Dart SDK, including the VM, dart2js, core libraries, and more.

Dart A client-optimized language for fast apps on any platform Dart is: Optimized for UI: Develop with a programming language specialized around the n

Dart 8.7k Jan 2, 2023