rsflutterapp

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

commit fddbe28b70cb40c707b05d64232aaf7eb3433dfe
parent 21e3f38a70ff5c97e1ac51520b8bcfd36dd8391e
Author: Marcel <mtrnord1@gmail.com>
Date:   Sun, 15 Mar 2020 15:23:10 +0100

Add image picker

Took 57 minutes

Diffstat:
Mandroid/app/src/debug/AndroidManifest.xml | 4++++
Mandroid/app/src/main/AndroidManifest.xml | 9+++++++++
Mandroid/app/src/profile/AndroidManifest.xml | 4++++
Mios/Runner/Info.plist | 4++++
Mlib/views/DetailsPage.dart | 59+++++++++++++++++++++++++++++++++++++++++++++++++++++++----
Mlib/views/tabs/MapTab.dart | 8++++----
Mpubspec.lock | 7+++++++
Mpubspec.yaml | 2++
8 files changed, 89 insertions(+), 8 deletions(-)

diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml @@ -4,4 +4,8 @@ to allow setting breakpoints, to provide hot reload, etc. --> <uses-permission android:name="android.permission.INTERNET"/> + + <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> + <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> + <uses-permission android:name="android.permission.CAMERA" /> </manifest> diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml @@ -8,6 +8,10 @@ <uses-permission android:name="android.permission.INTERNET"/> + <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> + <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> + <uses-permission android:name="android.permission.CAMERA" /> + <application android:name="io.flutter.app.FlutterApplication" android:label="Bahnhofsfotos" @@ -41,6 +45,11 @@ <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> + + <activity + android:name="com.yalantis.ucrop.UCropActivity" + android:screenOrientation="portrait" + android:theme="@style/Theme.AppCompat.Light.NoActionBar"/> <!-- Don't delete the meta-data below. This is used by the Flutter tool to generate GeneratedPluginRegistrant.java --> <meta-data diff --git a/android/app/src/profile/AndroidManifest.xml b/android/app/src/profile/AndroidManifest.xml @@ -4,4 +4,8 @@ to allow setting breakpoints, to provide hot reload, etc. --> <uses-permission android:name="android.permission.INTERNET"/> + + <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> + <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> + <uses-permission android:name="android.permission.CAMERA" /> </manifest> diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist @@ -10,6 +10,10 @@ <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> <key>CFBundleInfoDictionaryVersion</key> <string>6.0</string> + <key>NSPhotoLibraryUsageDescription</key> + <string>Bahnhofsfoto auswählen</string> + <key>NSCameraUsageDescription</key> + <string>Bahnhofsfoto aufnehmen</string> <key>CFBundleName</key> <string>Bahnhofsfotos</string> <key>CFBundlePackageType</key> diff --git a/lib/views/DetailsPage.dart b/lib/views/DetailsPage.dart @@ -1,6 +1,9 @@ +import 'dart:io'; + import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:maps_launcher/maps_launcher.dart'; +import 'package:multi_image_picker/multi_image_picker.dart'; import 'package:url_launcher/url_launcher.dart'; import '../models/models.dart'; @@ -17,6 +20,37 @@ class DetailsPage extends StatelessWidget { : assert(railwayStationsRepository != null), super(key: key); + Future<List<Asset>> _pickImages() async { + List<Asset> resultList; + + try { + resultList = await MultiImagePicker.pickImages( + maxImages: 1, + enableCamera: true, + materialOptions: MaterialOptions( + actionBarTitle: "Albums", + allViewTitle: "All images", + actionBarColor: "#c71c4d", + actionBarTitleColor: "#ffffff", + lightStatusBar: false, + statusBarColor: '#c71c4d', + startInAllView: false, + selectCircleStrokeColor: "#000000", + selectionLimitReachedText: "You can only upload one image at a time.", + autoCloseOnSelectionLimit: true, + ), + ); + } on NoImagesSelectedException catch (e) { + debugPrint("User selected nothing"); + } on Exception catch (e) { + debugPrint(e.toString()); + } + + debugPrint(resultList.toString()); + + return resultList; + } + @override Widget build(BuildContext context) { return Scaffold( @@ -53,12 +87,29 @@ class DetailsPage extends StatelessWidget { .headline3 .copyWith(color: Colors.black), ), - Image.network(station.photoUrl), + station.photoUrl != null + ? Image.network(station.photoUrl) + : Container(), + Expanded( + child: Align( + alignment: Alignment.bottomCenter, + child: IconButton( + iconSize: 50, + icon: Icon( + Icons.camera_alt, + color: Theme.of(context).primaryColor, + ), + onPressed: () { + _pickImages(); + }, + ), + ), + ), Padding( - padding: EdgeInsets.all(8), + padding: EdgeInsets.all(24), child: Row( children: <Widget>[ - Text("Urheber: "), + Text(station.license != "" ? "Urheber: " : ""), RichText( text: TextSpan( text: station.photographer, @@ -72,7 +123,7 @@ class DetailsPage extends StatelessWidget { }, ), ), - Text(", "), + Text(station.license != "" ? ", " : ""), RichText( text: TextSpan( text: station.license, diff --git a/lib/views/tabs/MapTab.dart b/lib/views/tabs/MapTab.dart @@ -70,7 +70,7 @@ class MapTabState extends State<MapTab> ), layers: [ // Mapbox - TileLayerOptions( + /*TileLayerOptions( //tileSize: 1024, zoomOffset: -1, urlTemplate: @@ -80,17 +80,17 @@ class MapTabState extends State<MapTab> 'pk.eyJ1IjoibXRybm9yZCIsImEiOiJjaXIyZTRhNDcwMDhwaTJtZzBseTNkancxIn0.09m6ZCFvkKL6Ppss7XAnfA', 'id': 'streets-v11', }, - ), + ),*/ // Openstreetmap /*TileLayerOptions( urlTemplate: "https://{s}.tile.openstreetmap.de/{z}/{x}/{y}.png", subdomains: ['a', 'b', 'c'], ),*/ // Transport Map - /*TileLayerOptions( + TileLayerOptions( urlTemplate: "http://tile.memomaps.de/tilegen/{z}/{x}/{y}.png", subdomains: [], - ),*/ + ), // Railway overlay /*TileLayerOptions( urlTemplate: diff --git a/pubspec.lock b/pubspec.lock @@ -320,6 +320,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.9.6+3" + multi_image_picker: + dependency: "direct main" + description: + name: multi_image_picker + url: "https://pub.dartlang.org" + source: hosted + version: "4.6.3" multi_server_socket: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml @@ -40,6 +40,8 @@ dependencies: flutter_svg: ^0.17.1 + multi_image_picker: ^4.6.3 + dev_dependencies: flutter_test: sdk: flutter