Another attempt at building a nice ETV app. This app uses the API of the ETV website to access data from the site.
This app is built using Dart and the Flutter UI framework. Because of the architecture of Flutter, one can build an app almost completely in Dart and then compile it for all the available platforms (Android, iOS, Windows, web).
First of all, you should have the Flutter extension. Aside from IntelliSense for Flutter & Dart it also has some utilities e.g. for selecting a device to run/debug on.
Also, if you have a hard time keeping your code clean, you might like Trailing Spaces.
- Clone this repository
- Inside the repository, run:
flutter pub get
flutter pub run flutter_native_splash:create
- Install the flutter SDK
- a. install an Android emulator (via the AVD Manager in the Android SDK)
b. connect an Android phone with USB debugging enabled via a USB cable
Once everything is set up and connected, flutter run
will build the app in debug mode and run it on the selected device.
For building I recommend you read the manual. My workflow for Android (with my phone connected via USB) is pretty easy:
flutter build apk
flutter install
This will build & install a release package on your phone. For doing actual production releases it might be useful to look into app bundles for their reduced size.
No idea, this is a //TODO
.
- Login mechanism
- Digideb
- Upcoming activities
- Better view on the activities page
- Cool splash screen
- Notification for new activities
- Periodic background fetching
- Notification bubble
- Toggle for notifications
- Koffietimer connection
- Ledensearch
- More profile info
- Quotes
- Quote submissions
- Maxwell browser
- Exam browser
- Education help wizard
- Anti-SOG memes
- ETV netpresenter content
- General assembly stuff
- Integration with semicolon GA module
- Browser for minutes of previous GA's
- ETV Semicolon
- Hive document store
- HTML display library
- Splash screen generator
- Icon bundle (currently only using Feather icons)
Dart is a strongly typed language, not unlike Java or C#. In many ways I have found it to closely resemble TypeScript in its functionality, with a few notable differences. Firstly, simple objects as such do not exist; instead Dart has Maps, Classes and Enums. Parameters for widgets and functions are almost always a primitive type or typed with a class instance or an enum, so instead of f({ axis: 'horizontal' })
you would input f( axis: Axis.horizontal )
. This ensures the correct input type for f
at compile time.
Another notable difference is that aside from usual positional parameters, Dart also has named parameters as demonstrated in the last example.
Everything in Flutter is a Widget; a component, making building modular applications relatively easy. By far most widgets are either a StatelessWidget
or a StatefulWidget
. StatelessWidgets
are constructed once and do not maintain an internal state, so their display state is either constant or directly dependent on the input parameters. StatefulWidgets
have an internal state and some functionality to make sure the widget gets updated when the state changes.
When a dependency of a widget changes, the widget is entirely rebuilt/redrawn. Apparently this is faster than modifying a small part of it, but it is also a major difference with many web UI libraries.