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:
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