rsflutterapp

Bahnhofsfoto-App for Android and iOS using Flutter
git clone git://archive.git.mtrnord.blog/MTRNord/rsflutterapp.git
Log | Files | Refs | README

commit 089fc59d6c9c82605949faf173dda890e10ef095
parent 66c0919a91c7d567b8f7a71f14140c981831db7d
Author: Marcel <mtrnord1@gmail.com>
Date:   Sun, 23 Feb 2020 14:59:05 +0100

Use Material design to drastically improve performance

Took 23 minutes

Diffstat:
Mandroid/app/build.gradle | 3+++
Mandroid/app/src/main/AndroidManifest.xml | 2++
Mlib/blocs/MapBloc.dart | 3++-
Mlib/components/LoginForm.dart | 14+++++++++-----
Mlib/main.dart | 7+++----
Mlib/views/HomePage.dart | 89+++++++++++++++++++++++++++++++++++++++----------------------------------------
Mlib/views/LoginPage.dart | 14+++++++-------
Mlib/views/SplashPage.dart | 4++--
Mlib/views/tabs/SettingsTab.dart | 42++++++++++++++++++++----------------------
9 files changed, 92 insertions(+), 86 deletions(-)

diff --git a/android/app/build.gradle b/android/app/build.gradle @@ -51,6 +51,9 @@ android { // Signing with the debug keys for now, so `flutter run --release` works. signingConfig signingConfigs.debug applicationIdSuffix '.release' + + minifyEnabled true + shrinkResources true } debug { applicationIdSuffix '.debug' diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml @@ -6,6 +6,8 @@ additional functionality it is fine to subclass or reimplement FlutterApplication and put your custom class here. --> + <uses-permission android:name="android.permission.INTERNET"/> + <application android:name="io.flutter.app.FlutterApplication" android:label="Bahnhofsfotos" diff --git a/lib/blocs/MapBloc.dart b/lib/blocs/MapBloc.dart @@ -23,7 +23,8 @@ class MapBloc extends Bloc<MapEvent, MapState> { final List<Station> stations = await railwayStationsRepository.getStations(); yield MapLoaded(stations: stations); - } catch (_) { + } catch (e) { + debugPrint(e.toString()); yield MapError(); } } else if (event is RenderMap) { diff --git a/lib/components/LoginForm.dart b/lib/components/LoginForm.dart @@ -39,15 +39,19 @@ class _LoginFormState extends State<LoginForm> { }, child: BlocBuilder<LoginBloc, LoginState>( builder: (context, state) { - return SafeArea( + return Form( child: Column( children: [ - CupertinoTextField( - placeholder: 'username', + TextFormField( + decoration: InputDecoration( + hintText: 'username', + ), controller: _usernameController, ), - CupertinoTextField( - placeholder: 'password', + TextFormField( + decoration: InputDecoration( + hintText: 'password', + ), controller: _passwordController, obscureText: true, ), diff --git a/lib/main.dart b/lib/main.dart @@ -72,12 +72,11 @@ class App extends StatelessWidget { @override Widget build(BuildContext context) { - return CupertinoApp( + return MaterialApp( title: 'Bahnhofsfotos', - theme: CupertinoThemeData( - brightness: Brightness.light, + theme: ThemeData( primaryColor: Color(0xffc71c4d), - primaryContrastingColor: Color(0xffD0C332), + accentColor: Color(0xffD0C332), ), home: BlocBuilder<AuthenticationBloc, AuthenticationState>( builder: (context, state) { diff --git a/lib/views/HomePage.dart b/lib/views/HomePage.dart @@ -8,52 +8,50 @@ import 'tabs/SettingsTab.dart'; class HomePage extends StatelessWidget { @override Widget build(BuildContext context) { - return CupertinoTabScaffold( - tabBar: CupertinoTabBar( - items: const <BottomNavigationBarItem>[ - BottomNavigationBarItem( - icon: Icon(CupertinoIcons.location), - title: Text('Map'), + return DefaultTabController( + length: 3, + child: Scaffold( + bottomNavigationBar: Container( + color: Theme.of(context).primaryColor, + child: TabBar( + labelColor: Colors.white, + unselectedLabelColor: Colors.white70, + indicatorSize: TabBarIndicatorSize.tab, + indicatorPadding: EdgeInsets.all(5.0), + indicatorColor: Theme.of(context).accentColor, + tabs: [ + Tab( + icon: Icon(CupertinoIcons.location), + text: 'Map', + ), + Tab( + icon: Icon(CupertinoIcons.info), + text: 'Rangliste', + ), + Tab( + icon: Icon(CupertinoIcons.settings), + text: 'Einstellungen', + ), + ], ), - BottomNavigationBarItem( - icon: Icon(CupertinoIcons.info), - title: Text('Rangliste'), - ), - BottomNavigationBarItem( - icon: Icon(CupertinoIcons.settings), - title: Text('Einstellungen'), - ), - ], - ), - tabBuilder: (context, index) { - switch (index) { - case 0: - return CupertinoTabView(builder: (context) { - return CupertinoPageScaffold( - child: MapTab(), - ); - }); - case 1: - return CupertinoTabView(builder: (context) { - return CupertinoPageScaffold( - child: Container(), - ); - }); - case 2: - return CupertinoTabView(builder: (context) { - return CupertinoPageScaffold( - navigationBar: CupertinoNavigationBar( - middle: Text("Einstellungen"), - ), - child: SettingsTab(), - ); - }); - } - return CupertinoPageScaffold( - child: Container(), - ); - }, - /* child: Container( + ), + body: TabBarView( + children: [ + Scaffold( + body: MapTab(), + ), + Scaffold( + body: Container(), + ), + Scaffold( + appBar: AppBar( + title: Text("Einstellungen"), + ), + body: SettingsTab(), + ), + ], + ), + /* child: Container( child: Center( child: RaisedButton( child: Text('logout'), @@ -62,6 +60,7 @@ class HomePage extends StatelessWidget { }, )), ),*/ + ), ); } } diff --git a/lib/views/LoginPage.dart b/lib/views/LoginPage.dart @@ -2,12 +2,12 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; - import 'package:flutter_bloc/flutter_bloc.dart'; -import '../repos/UserRepository.dart'; -import '../blocs/LoginBloc.dart'; + import '../blocs/AuthenticationBloc.dart'; +import '../blocs/LoginBloc.dart'; import '../components/LoginForm.dart'; +import '../repos/UserRepository.dart'; class LoginPage extends StatelessWidget { final UserRepository userRepository; @@ -18,11 +18,11 @@ class LoginPage extends StatelessWidget { @override Widget build(BuildContext context) { - return CupertinoPageScaffold( - navigationBar: CupertinoNavigationBar( - middle: const Text('Login'), + return Scaffold( + appBar: AppBar( + title: const Text('Login'), ), - child: BlocProvider( + body: BlocProvider( create: (context) { return LoginBloc( authenticationBloc: BlocProvider.of<AuthenticationBloc>(context), diff --git a/lib/views/SplashPage.dart b/lib/views/SplashPage.dart @@ -4,8 +4,8 @@ import 'package:flutter/material.dart'; class SplashPage extends StatelessWidget { @override Widget build(BuildContext context) { - return CupertinoPageScaffold( - child: Center( + return Scaffold( + body: Center( // TODO fix placeholder child: Text('Splash Screen'), ), diff --git a/lib/views/tabs/SettingsTab.dart b/lib/views/tabs/SettingsTab.dart @@ -13,28 +13,26 @@ class SettingsTabState extends State<SettingsTab> Widget build(BuildContext context) { super.build(context); - return Material( - child: SettingsList(sections: [ - SettingsSection( - title: 'Bahnhofsdaten', - tiles: [ - SettingsTile( - title: 'Länderdaten aktualisieren', - leading: Icon(Icons.language), - onTap: () {}, - ), - ], - ), - SettingsSection( - title: 'Lizensierung', - tiles: [], - ), - SettingsSection( - title: 'Verlinkung', - tiles: [], - ), - ]), - ); + return SettingsList(sections: [ + SettingsSection( + title: 'Bahnhofsdaten', + tiles: [ + SettingsTile( + title: 'Länderdaten aktualisieren', + leading: Icon(Icons.language), + onTap: () {}, + ), + ], + ), + SettingsSection( + title: 'Lizensierung', + tiles: [], + ), + SettingsSection( + title: 'Verlinkung', + tiles: [], + ), + ]); } @override