diff --git a/android/app/build.gradle b/android/app/build.gradle index e5fb1cab6fc52b2646f12cc4ebbb0902bec6b1a2..877eb33669e7087b2ac4dbb7497c41f3b3b90321 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -44,7 +44,7 @@ android { defaultConfig { applicationId "org.benoitharrault.stopmotion" - minSdkVersion flutter.minSdkVersion + minSdkVersion 21 targetSdkVersion 30 versionCode appVersionCode.toInteger() versionName appVersionName diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 91f2d2d15c025322e26378fc097c735fef016324..9b1861e6a8206174d566c341e743713590b0004a 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,6 +1,7 @@ <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.benoitharrault.stopmotion"> - <application + <uses-permission android:name="android.permission.CAMERA" /> + <application android:label="stopmotion" android:icon="@mipmap/ic_launcher"> <activity @@ -11,20 +12,20 @@ android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize"> <meta-data - android:name="io.flutter.embedding.android.NormalTheme" - android:resource="@style/NormalTheme" - /> + android:name="io.flutter.embedding.android.NormalTheme" + android:resource="@style/NormalTheme" + /> <meta-data - android:name="io.flutter.embedding.android.SplashScreenDrawable" - android:resource="@drawable/launch_background" - /> + android:name="io.flutter.embedding.android.SplashScreenDrawable" + android:resource="@drawable/launch_background" + /> <intent-filter> - <action android:name="android.intent.action.MAIN"/> - <category android:name="android.intent.category.LAUNCHER"/> + <action android:name="android.intent.action.MAIN" /> + <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <meta-data android:name="flutterEmbedding" android:value="2" /> </application> -</manifest> +</manifest> \ No newline at end of file diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png index 0420a38ccbf0e75d4b9738cb41d3b854cde286c5..579151d3ca5f948d110b81bdeff3e28cbefc494b 100644 Binary files a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-hdpi/launch_image.png b/android/app/src/main/res/mipmap-hdpi/launch_image.png index 0420a38ccbf0e75d4b9738cb41d3b854cde286c5..579151d3ca5f948d110b81bdeff3e28cbefc494b 100644 Binary files a/android/app/src/main/res/mipmap-hdpi/launch_image.png and b/android/app/src/main/res/mipmap-hdpi/launch_image.png differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png index c012a51b3b61eaaf64feae75809e8820490fe2b0..a767305e592285b1a6967a27127ec106f0e6fdab 100644 Binary files a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-mdpi/launch_image.png b/android/app/src/main/res/mipmap-mdpi/launch_image.png index c012a51b3b61eaaf64feae75809e8820490fe2b0..a767305e592285b1a6967a27127ec106f0e6fdab 100644 Binary files a/android/app/src/main/res/mipmap-mdpi/launch_image.png and b/android/app/src/main/res/mipmap-mdpi/launch_image.png differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png index 33f6455914993deaeff45acee622ddb9073b95c9..073f304eef1481a76d205d9e4f1f7d14590bb88d 100644 Binary files a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xhdpi/launch_image.png b/android/app/src/main/res/mipmap-xhdpi/launch_image.png index 33f6455914993deaeff45acee622ddb9073b95c9..073f304eef1481a76d205d9e4f1f7d14590bb88d 100644 Binary files a/android/app/src/main/res/mipmap-xhdpi/launch_image.png and b/android/app/src/main/res/mipmap-xhdpi/launch_image.png differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index 4a575380ab8ea7578f46277ffec318322a1e220f..a0d27afbb9aee3273cefc225a191b2db9827a644 100644 Binary files a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/launch_image.png b/android/app/src/main/res/mipmap-xxhdpi/launch_image.png index 4a575380ab8ea7578f46277ffec318322a1e220f..a0d27afbb9aee3273cefc225a191b2db9827a644 100644 Binary files a/android/app/src/main/res/mipmap-xxhdpi/launch_image.png and b/android/app/src/main/res/mipmap-xxhdpi/launch_image.png differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index ee01066d00a3e091504da704086fb364f22f6b0f..a5282f34002739e13e72e468acddaa2adde8d126 100644 Binary files a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/launch_image.png b/android/app/src/main/res/mipmap-xxxhdpi/launch_image.png index ee01066d00a3e091504da704086fb364f22f6b0f..a5282f34002739e13e72e468acddaa2adde8d126 100644 Binary files a/android/app/src/main/res/mipmap-xxxhdpi/launch_image.png and b/android/app/src/main/res/mipmap-xxxhdpi/launch_image.png differ diff --git a/android/gradle.properties b/android/gradle.properties index bc2d95e8567abcfd41c26ebeb95fced48f43e773..818e87b23b224ced309ae5c147e5ed827826e237 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -1,5 +1,5 @@ org.gradle.jvmargs=-Xmx1536M android.useAndroidX=true android.enableJetifier=true -app.versionName=0.0.1 -app.versionCode=1 +app.versionName=0.0.2 +app.versionCode=2 diff --git a/assets/translations/en.json b/assets/translations/en.json index ef88ee112505950ef959981119bba0c7a6ebfe7d..f53b1cdd7eb11b40a9bfa48b5ced2628de1cb912 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -2,6 +2,7 @@ "app_name": "Stop Motion assistant", "bottom_nav_home": "Home", + "bottom_nav_camera": "Camera", "bottom_nav_settings": "Settings", "settings_title": "Settings", diff --git a/assets/translations/fr.json b/assets/translations/fr.json index 526084a48c1ae5c3974a47c69abba73013340c47..69be2063cc2af3de1d9ec30788c798a32313653c 100644 --- a/assets/translations/fr.json +++ b/assets/translations/fr.json @@ -2,6 +2,7 @@ "app_name": "Assistant Stop Motion", "bottom_nav_home": "Accueil", + "bottom_nav_camera": "Caméra", "bottom_nav_settings": "Réglages", "settings_title": "Réglages", diff --git a/fastlane/metadata/android/en-US/changelogs/2.txt b/fastlane/metadata/android/en-US/changelogs/2.txt new file mode 100644 index 0000000000000000000000000000000000000000..d06c5d2db363e4e3ffa75c116a6b57025dab9939 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/2.txt @@ -0,0 +1 @@ +Add take and save pictures. diff --git a/fastlane/metadata/android/en-US/images/icon.png b/fastlane/metadata/android/en-US/images/icon.png index 02e771f2f8742cef993eb40c7539fb6ec0f70f4a..dcf9dbe0e16a1a01487b7e428bb224e3968f687a 100644 Binary files a/fastlane/metadata/android/en-US/images/icon.png and b/fastlane/metadata/android/en-US/images/icon.png differ diff --git a/fastlane/metadata/android/fr-FR/changelogs/2.txt b/fastlane/metadata/android/fr-FR/changelogs/2.txt new file mode 100644 index 0000000000000000000000000000000000000000..b24a8fd36e5d23e0073b6cace84a70fb92a5c303 --- /dev/null +++ b/fastlane/metadata/android/fr-FR/changelogs/2.txt @@ -0,0 +1 @@ +Ajout de la prise de photos et sauvegarde. diff --git a/icons/icon.svg b/icons/icon.svg index ade1c033f53261b8b0925ffb211769a37c000cfa..6f02a9f79b4c3057fd11ae3b9ea1730c896521d4 100644 --- a/icons/icon.svg +++ b/icons/icon.svg @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <svg version="1.1" viewBox="0 0 28.747 28.747" xmlns="http://www.w3.org/2000/svg"> <defs> - <filter id="filter6206-7" x="-.072" y="-.072" width="1.144" height="1.144" color-interpolation-filters="sRGB"> + <filter id="filter6206-7" x="-.072" y="-.072001" width="1.144" height="1.144" color-interpolation-filters="sRGB"> <feGaussianBlur stdDeviation="0.658125"/> </filter> </defs> @@ -75,6 +75,8 @@ </g> <path d="m24.549 1119.5c0.66325 0 1.1979-0.5346 1.1979-1.1979v-0.3333c0 0.6632-0.53461 1.1978-1.1979 1.1978h-20.354c-0.66325 0-1.1979-0.5346-1.1979-1.1978v0.3333c0 0.6633 0.53461 1.1979 1.1979 1.1979z" fill="#1a237e" opacity=".2"/> </g> - <path d="m21.141 11.764a1.1513 1.1513 0 0 0-1.0798-0.89569c-0.95204 0.0038-1.9043-0.0075-2.8564 0.0065a0.65653 0.65653 0 0 0-0.13626-0.42804c-0.38572-0.49919-0.75993-1.0074-1.1479-1.5046a0.59422 0.59422 0 0 0-0.46814-0.23494c-0.75192-1e-3 -1.5038 0.00401-2.2557 5.128e-4a0.56532 0.56532 0 0 0-0.45536 0.22292c-0.38397 0.50019-0.76394 1.0034-1.1454 1.5056a0.66926 0.66926 0 0 0-0.14077 0.43356c-0.24772-0.0055-0.49543-0.0027-0.74315-0.0013-1.21e-4 -0.02042-6.77e-4 -0.04078-1e-3 -0.06118v-0.1958h-0.11981c-0.0018-0.14287-0.0011-0.28595-0.0019-0.42881-0.53324-3e-3 -1.0668-0.0023-1.6-0.0043-0.00261 0.14436 0.00209 0.28871-0.00334 0.43306h-0.12164c-9.324e-4 0.0317-6.066e-4 0.06344 0 0.09521v0.1633l-0.0048-3.97e-4a1.1764 1.1764 0 0 0-1.2235 0.90684 0.47582 0.47582 0 0 0-0.52749 0.48843 0.48424 0.48424 0 0 0 0.51798 0.47765q0.00115 2.4537-7.529e-4 4.907a2.7779 2.7779 0 0 0 0.028558 0.53025 1.2133 1.2133 0 0 0 1.1602 0.93626c0.8516-0.0036 1.703-2e-3 2.5546-0.0013 0.06838 0.0032 0.14778-0.01828 0.2044 0.03181a4.6428 4.6428 0 0 0 5.431 0.03206 0.2352 0.2352 0 0 1 0.13-0.06337c0.96682-0.0045 1.9334 0.0016 2.9002-0.0027a1.1953 1.1953 0 0 0 1.1159-1.187c2e-3 -1.727-0.0036-3.454 0.0025-5.181a0.49917 0.49917 0 0 0 0.48141-0.42907 0.49272 0.49272 0 0 0-0.49343-0.55153zm-2.5192 3.8332a4.1985 4.1985 0 0 1-0.95655 2.4641 4.3163 4.3163 0 0 1-7.2952-0.94127 4.1969 4.1969 0 0 1-0.37496-2.002 4.3722 4.3722 0 0 1 1.8755-3.2777 4.3074 4.3074 0 0 1 6.7512 3.7568zm1.2326-2.6122a0.73486 0.73486 0 1 1 0.17909-0.82029 0.72723 0.72723 0 0 1-0.17909 0.82029z" stroke-width=".23306"/> - <path class="cls-1" d="m14.303 11.474a3.9178 3.9178 0 1 0 3.9178 3.9178 3.9178 3.9178 0 0 0-3.9178-3.9178zm2.3572 6.275a3.3312 3.3312 0 1 1 0.97733-2.3572 3.3219 3.3219 0 0 1-0.97733 2.3572zm-0.13841-4.5761a3.1379 3.1379 0 1 0 0.9191 2.2188 3.1269 3.1269 0 0 0-0.9191-2.2188zm-0.55365 2.3446-2.5547 1.4778a0.1401 0.1401 0 0 1-0.14516 0 0.14179 0.14179 0 0 1-0.07259-0.12575v-2.9522a0.14179 0.14179 0 0 1 0.07259-0.12912 0.1401 0.1401 0 0 1 0.14516 0l2.5547 1.4778a0.14516 0.14516 0 0 1 0 0.25319z" fill-rule="evenodd" stroke-width=".084398"/> + <g fill="#fff"> + <path d="m21.141 11.764a1.1513 1.1513 0 0 0-1.0798-0.89569c-0.95204 0.0038-1.9043-0.0075-2.8564 0.0065a0.65653 0.65653 0 0 0-0.13626-0.42804c-0.38572-0.49919-0.75993-1.0074-1.1479-1.5046a0.59422 0.59422 0 0 0-0.46814-0.23494c-0.75192-1e-3 -1.5038 0.00401-2.2557 5.128e-4a0.56532 0.56532 0 0 0-0.45536 0.22292c-0.38397 0.50019-0.76394 1.0034-1.1454 1.5056a0.66926 0.66926 0 0 0-0.14077 0.43356c-0.24772-0.0055-0.49543-0.0027-0.74315-0.0013-1.21e-4 -0.02042-6.77e-4 -0.04078-1e-3 -0.06118v-0.1958h-0.11981c-0.0018-0.14287-0.0011-0.28595-0.0019-0.42881-0.53324-3e-3 -1.0668-0.0023-1.6-0.0043-0.00261 0.14436 0.00209 0.28871-0.00334 0.43306h-0.12164c-9.324e-4 0.0317-6.066e-4 0.06344 0 0.09521v0.1633l-0.0048-3.97e-4a1.1764 1.1764 0 0 0-1.2235 0.90684 0.47582 0.47582 0 0 0-0.52749 0.48843 0.48424 0.48424 0 0 0 0.51798 0.47765q0.00115 2.4537-7.529e-4 4.907a2.7779 2.7779 0 0 0 0.028558 0.53025 1.2133 1.2133 0 0 0 1.1602 0.93626c0.8516-0.0036 1.703-2e-3 2.5546-0.0013 0.06838 0.0032 0.14778-0.01828 0.2044 0.03181a4.6428 4.6428 0 0 0 5.431 0.03206 0.2352 0.2352 0 0 1 0.13-0.06337c0.96682-0.0045 1.9334 0.0016 2.9002-0.0027a1.1953 1.1953 0 0 0 1.1159-1.187c2e-3 -1.727-0.0036-3.454 0.0025-5.181a0.49917 0.49917 0 0 0 0.48141-0.42907 0.49272 0.49272 0 0 0-0.49343-0.55153zm-2.5192 3.8332a4.1985 4.1985 0 0 1-0.95655 2.4641 4.3163 4.3163 0 0 1-7.2952-0.94127 4.1969 4.1969 0 0 1-0.37496-2.002 4.3722 4.3722 0 0 1 1.8755-3.2777 4.3074 4.3074 0 0 1 6.7512 3.7568zm1.2326-2.6122a0.73486 0.73486 0 1 1 0.17909-0.82029 0.72723 0.72723 0 0 1-0.17909 0.82029z" stroke-width=".23306"/> + <path class="cls-1" d="m14.303 11.474a3.9178 3.9178 0 1 0 3.9178 3.9178 3.9178 3.9178 0 0 0-3.9178-3.9178zm2.3572 6.275a3.3312 3.3312 0 1 1 0.97733-2.3572 3.3219 3.3219 0 0 1-0.97733 2.3572zm-0.13841-4.5761a3.1379 3.1379 0 1 0 0.9191 2.2188 3.1269 3.1269 0 0 0-0.9191-2.2188zm-0.55365 2.3446-2.5547 1.4778a0.1401 0.1401 0 0 1-0.14516 0 0.14179 0.14179 0 0 1-0.07259-0.12575v-2.9522a0.14179 0.14179 0 0 1 0.07259-0.12912 0.1401 0.1401 0 0 1 0.14516 0l2.5547 1.4778a0.14516 0.14516 0 0 1 0 0.25319z" fill-rule="evenodd" stroke-width=".084398"/> + </g> </svg> diff --git a/lib/cubit/bottom_nav_cubit.dart b/lib/cubit/bottom_nav_cubit.dart index c633c6515b0fcb4e19a521e45b579f178d605970..8753255ac7acba27b594ea5cfb5b46aafee31625 100644 --- a/lib/cubit/bottom_nav_cubit.dart +++ b/lib/cubit/bottom_nav_cubit.dart @@ -3,7 +3,7 @@ import 'package:hydrated_bloc/hydrated_bloc.dart'; class BottomNavCubit extends HydratedCubit<int> { BottomNavCubit() : super(0); - int pagesCount = 2; + int pagesCount = 3; void updateIndex(int index) { if (isIndexAllowed(index)) { diff --git a/lib/main.dart b/lib/main.dart index 71db40e07d7ac8f23447dda21927b013a46de143..7ce98c62d7c9ae45735ede3e07a831da6a6e0308 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -15,6 +15,7 @@ import 'package:stopmotion/ui/skeleton.dart'; void main() async { /// Initialize packages WidgetsFlutterBinding.ensureInitialized(); + await EasyLocalization.ensureInitialized(); final Directory tmpDir = await getTemporaryDirectory(); Hive.init(tmpDir.toString()); diff --git a/lib/ui/screens/camera.dart b/lib/ui/screens/camera.dart new file mode 100644 index 0000000000000000000000000000000000000000..69ae81e174377e9567c19d26c1cdc2f92a7d7328 --- /dev/null +++ b/lib/ui/screens/camera.dart @@ -0,0 +1,24 @@ +import 'package:flutter/material.dart'; +import 'package:unicons/unicons.dart'; + +import 'package:stopmotion/ui/widgets/take_picture_widget.dart'; + +class ScreenCamera extends StatelessWidget { + const ScreenCamera({super.key}); + + static Icon navBarIcon = const Icon(UniconsLine.camera); + static String navBarText = 'bottom_nav_camera'; + + @override + Widget build(BuildContext context) { + return Material( + color: Theme.of(context).colorScheme.background, + child: Column( + children: <Widget>[ + const SizedBox(height: 8), + TakePictureWidget(), + ], + ), + ); + } +} diff --git a/lib/ui/skeleton.dart b/lib/ui/skeleton.dart index d2a1679b84effb6eb7b28cec3e3b8d617430f86b..f3979df590e396ff260fce18ac9629c65bfcb3a6 100644 --- a/lib/ui/skeleton.dart +++ b/lib/ui/skeleton.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:stopmotion/cubit/bottom_nav_cubit.dart'; +import 'package:stopmotion/ui/screens/camera.dart'; import 'package:stopmotion/ui/screens/home.dart'; import 'package:stopmotion/ui/screens/settings.dart'; import 'package:stopmotion/ui/widgets/app_bar.dart'; @@ -18,7 +19,8 @@ class _SkeletonScreenState extends State<SkeletonScreen> { @override Widget build(BuildContext context) { List<Widget> pageNavigation = <Widget>[ - ScreenHome(), + const ScreenHome(), + const ScreenCamera(), const ScreenSettings(), ]; diff --git a/lib/ui/widgets/bottom_nav_bar.dart b/lib/ui/widgets/bottom_nav_bar.dart index 1479904149ba72f3a4438adf2872ae23ae340717..9ce8d67088e14107d2d8b2c3082355e5b4de322d 100644 --- a/lib/ui/widgets/bottom_nav_bar.dart +++ b/lib/ui/widgets/bottom_nav_bar.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:stopmotion/cubit/bottom_nav_cubit.dart'; +import 'package:stopmotion/ui/screens/camera.dart'; import 'package:stopmotion/ui/screens/settings.dart'; import 'package:stopmotion/ui/screens/home.dart'; @@ -36,6 +37,10 @@ class BottomNavBar extends StatelessWidget { icon: ScreenHome.navBarIcon, label: tr(ScreenHome.navBarText), ), + BottomNavigationBarItem( + icon: ScreenCamera.navBarIcon, + label: tr(ScreenCamera.navBarText), + ), BottomNavigationBarItem( icon: ScreenSettings.navBarIcon, label: tr(ScreenSettings.navBarText), diff --git a/lib/ui/widgets/take_picture_widget.dart b/lib/ui/widgets/take_picture_widget.dart new file mode 100644 index 0000000000000000000000000000000000000000..488dd178538f9c3422cf6123023da369084c628b --- /dev/null +++ b/lib/ui/widgets/take_picture_widget.dart @@ -0,0 +1,129 @@ +import 'package:camera/camera.dart'; +import 'package:flutter/material.dart'; +import 'package:image_picker/image_picker.dart'; +import 'package:unicons/unicons.dart'; + +class TakePictureWidget extends StatefulWidget { + const TakePictureWidget({super.key}); + + @override + TakePictureWidgetState createState() => TakePictureWidgetState(); +} + +class TakePictureWidgetState extends State<TakePictureWidget> { + CameraController? controller; + + List<String> previousImages = []; + String debug = ''; + + @override + void initState() { + loadCamera(); + super.initState(); + } + + loadCamera() async { + final List<CameraDescription>? cameras = await availableCameras(); + if (cameras != null) { + controller = CameraController( + cameras.first, + ResolutionPreset.max, + enableAudio: false, + ); + + controller!.initialize().then((_) { + if (!mounted) { + return; + } + setState(() {}); + }); + } else { + print("No camera found."); + } + } + + @override + void dispose() { + controller!.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return Column( + children: [ + Container( + height: 300, + width: 400, + child: controller == null + ? Center(child: Text("Loading camera...")) + : !controller!.value.isInitialized + ? Center(child: CircularProgressIndicator()) + : CameraPreview(controller!), + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + ElevatedButton.icon( + label: Text("Capture (1)"), + icon: Icon(UniconsLine.camera), + onPressed: () async { + try { + if ((controller != null) && (controller!.value.isInitialized)) { + final XFile image = await controller!.takePicture(); + + print('(1)path: ' + image.path); + previousImages.add(image.path); + setState(() {}); + + debug = debug + "\n" + '(1) path: ' + image.path; + } + } catch (e) { + debug = debug + "\n" + '(1) error: ' + e.toString(); + setState(() {}); + + print(e); + } + }, + ), + ElevatedButton.icon( + label: Text("Capture (2)"), + icon: Icon(UniconsLine.camera), + onPressed: () async { + try { + final ImagePicker _picker = ImagePicker(); + + final XFile? image = await _picker.pickImage(source: ImageSource.camera); + + print('(2) path: ' + image!.path); + previousImages.add(image.path); + setState(() {}); + + debug = debug + "\n" + '(2) path: ' + image.path; + } catch (e) { + debug = debug + "\n" + '(2) error: ' + e.toString(); + setState(() {}); + + print(e); + } + }, + ), + ], + ), + Text('debug: ' + debug), + previousImages.length == 0 + ? Text('no previous images') + : Column( + children: previousImages.map((String imagePath) { + return Row( + children: [ + // Image.file(File(imagePath)), + Text(imagePath), + ], + ); + }).toList(), + ), + ], + ); + } +} diff --git a/pubspec.lock b/pubspec.lock index d54095c61378821fb5ed1ba0ae8819e1fd7e7c12..7d03778bd693a2e32e8fdaf42b23b10e6698c117 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -9,6 +9,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.4.2" + async: + dependency: transitive + description: + name: async + sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" + url: "https://pub.dev" + source: hosted + version: "2.11.0" bloc: dependency: transitive description: @@ -17,6 +25,46 @@ packages: url: "https://pub.dev" source: hosted version: "8.1.2" + camera: + dependency: "direct main" + description: + name: camera + sha256: f3813a634fd1350a9d2a78ee70e5b247cebedc9c58a24560992620e57a8a5600 + url: "https://pub.dev" + source: hosted + version: "0.10.5+8" + camera_android: + dependency: transitive + description: + name: camera_android + sha256: "351429510121d179b9aac5a2e8cb525c3cd6c39f4d709c5f72dfb21726e52371" + url: "https://pub.dev" + source: hosted + version: "0.10.8+16" + camera_avfoundation: + dependency: transitive + description: + name: camera_avfoundation + sha256: "1408600aa45faad05c518afccaabcd58419412ab67755a405b2ddce4f93fa120" + url: "https://pub.dev" + source: hosted + version: "0.9.13+9" + camera_platform_interface: + dependency: transitive + description: + name: camera_platform_interface + sha256: fdb8b7a40c3564ce2967273445707d58cbff91bc2fa129e8de80af8cc501e793 + url: "https://pub.dev" + source: hosted + version: "2.7.1" + camera_web: + dependency: transitive + description: + name: camera_web + sha256: f18ccfb33b2a7c49a52ad5aa3f07330b7422faaecbdfd9b9fe8e51182f6ad67d + url: "https://pub.dev" + source: hosted + version: "0.3.2+4" characters: dependency: transitive description: @@ -41,6 +89,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.18.0" + cross_file: + dependency: transitive + description: + name: cross_file + sha256: fedaadfa3a6996f75211d835aaeb8fede285dae94262485698afd832371b9a5e + url: "https://pub.dev" + source: hosted + version: "0.3.3+8" crypto: dependency: transitive description: @@ -89,6 +145,38 @@ packages: url: "https://pub.dev" source: hosted version: "7.0.0" + file_selector_linux: + dependency: transitive + description: + name: file_selector_linux + sha256: "045d372bf19b02aeb69cacf8b4009555fb5f6f0b7ad8016e5f46dd1387ddd492" + url: "https://pub.dev" + source: hosted + version: "0.9.2+1" + file_selector_macos: + dependency: transitive + description: + name: file_selector_macos + sha256: b15c3da8bd4908b9918111fa486903f5808e388b8d1c559949f584725a6594d6 + url: "https://pub.dev" + source: hosted + version: "0.9.3+3" + file_selector_platform_interface: + dependency: transitive + description: + name: file_selector_platform_interface + sha256: "0aa47a725c346825a2bd396343ce63ac00bda6eff2fbc43eabe99737dede8262" + url: "https://pub.dev" + source: hosted + version: "2.6.1" + file_selector_windows: + dependency: transitive + description: + name: file_selector_windows + sha256: d3547240c20cabf205c7c7f01a50ecdbc413755814d6677f3cb366f04abcead0 + url: "https://pub.dev" + source: hosted + version: "0.9.3+1" flutter: dependency: "direct main" description: flutter @@ -107,6 +195,14 @@ packages: description: flutter source: sdk version: "0.0.0" + flutter_plugin_android_lifecycle: + dependency: transitive + description: + name: flutter_plugin_android_lifecycle + sha256: b068ffc46f82a55844acfa4fdbb61fad72fa2aef0905548419d97f0f95c456da + url: "https://pub.dev" + source: hosted + version: "2.0.17" flutter_web_plugins: dependency: transitive description: flutter @@ -120,6 +216,22 @@ packages: url: "https://pub.dev" source: hosted version: "2.2.3" + http: + dependency: transitive + description: + name: http + sha256: d4872660c46d929f6b8a9ef4e7a7eff7e49bbf0c4ec3f385ee32df5119175139 + url: "https://pub.dev" + source: hosted + version: "1.1.2" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + url: "https://pub.dev" + source: hosted + version: "4.0.2" hydrated_bloc: dependency: "direct main" description: @@ -128,6 +240,70 @@ packages: url: "https://pub.dev" source: hosted version: "9.1.3" + image_picker: + dependency: "direct main" + description: + name: image_picker + sha256: "340efe08645537d6b088a30620ee5752298b1630f23a829181172610b868262b" + url: "https://pub.dev" + source: hosted + version: "1.0.6" + image_picker_android: + dependency: transitive + description: + name: image_picker_android + sha256: "1a27bf4cc0330389cebe465bab08fe6dec97e44015b4899637344bb7297759ec" + url: "https://pub.dev" + source: hosted + version: "0.8.9+2" + image_picker_for_web: + dependency: transitive + description: + name: image_picker_for_web + sha256: e2423c53a68b579a7c37a1eda967b8ae536c3d98518e5db95ca1fe5719a730a3 + url: "https://pub.dev" + source: hosted + version: "3.0.2" + image_picker_ios: + dependency: transitive + description: + name: image_picker_ios + sha256: eac0a62104fa12feed213596df0321f57ce5a572562f72a68c4ff81e9e4caacf + url: "https://pub.dev" + source: hosted + version: "0.8.9" + image_picker_linux: + dependency: transitive + description: + name: image_picker_linux + sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_macos: + dependency: transitive + description: + name: image_picker_macos + sha256: "3f5ad1e8112a9a6111c46d0b57a7be2286a9a07fc6e1976fdf5be2bd31d4ff62" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_platform_interface: + dependency: transitive + description: + name: image_picker_platform_interface + sha256: "0e827c156e3a90edd3bbe7f6de048b39247b16e58173b08a835b7eb00aba239e" + url: "https://pub.dev" + source: hosted + version: "2.9.2" + image_picker_windows: + dependency: transitive + description: + name: image_picker_windows + sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" intl: dependency: transitive description: @@ -152,6 +328,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.0" + mime: + dependency: transitive + description: + name: mime + sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e + url: "https://pub.dev" + source: hosted + version: "1.0.4" nested: dependency: transitive description: @@ -161,7 +345,7 @@ packages: source: hosted version: "1.0.0" path: - dependency: transitive + dependency: "direct main" description: name: path sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" @@ -220,18 +404,18 @@ packages: dependency: transitive description: name: platform - sha256: "0a279f0707af40c890e80b1e9df8bb761694c074ba7e1d4ab1bc4b728e200b59" + sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec" url: "https://pub.dev" source: hosted - version: "3.1.3" + version: "3.1.4" plugin_platform_interface: dependency: transitive description: name: plugin_platform_interface - sha256: f4f88d4a900933e7267e2b353594774fc0d07fb072b47eedcd5b54e1ea3269f8 + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" url: "https://pub.dev" source: hosted - version: "2.1.7" + version: "2.1.8" provider: dependency: transitive description: @@ -301,6 +485,30 @@ packages: description: flutter source: sdk version: "0.0.99" + source_span: + dependency: transitive + description: + name: source_span + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + url: "https://pub.dev" + source: hosted + version: "1.10.0" + stream_transform: + dependency: transitive + description: + name: stream_transform + sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" + source: hosted + version: "1.2.0" synchronized: dependency: transitive description: @@ -309,6 +517,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.1.0+1" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" + source: hosted + version: "1.2.1" typed_data: dependency: transitive description: @@ -345,18 +561,18 @@ packages: dependency: transitive description: name: win32 - sha256: b0f37db61ba2f2e9b7a78a1caece0052564d1bc70668156cf3a29d676fe4e574 + sha256: "464f5674532865248444b4c3daca12bd9bf2d7c47f759ce2617986e7229494a8" url: "https://pub.dev" source: hosted - version: "5.1.1" + version: "5.2.0" xdg_directories: dependency: transitive description: name: xdg_directories - sha256: "589ada45ba9e39405c198fe34eb0f607cddb2108527e658136120892beac46d2" + sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d url: "https://pub.dev" source: hosted - version: "1.0.3" + version: "1.0.4" sdks: dart: ">=3.2.0 <4.0.0" flutter: ">=3.16.0" diff --git a/pubspec.yaml b/pubspec.yaml index 5f6f020eb4bdc9493701f99cfe7bf02c17a3cc0d..6589a7ffcb8ec0b330d0e5562ce1441301d1a3bb 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -3,7 +3,7 @@ description: stop motion assistant publish_to: 'none' -version: 0.0.1+1 +version: 0.0.2+2 environment: sdk: '^3.0.0' @@ -12,11 +12,14 @@ dependencies: flutter: sdk: flutter + camera: ^0.10.5+8 easy_localization: ^3.0.1 equatable: ^2.0.5 flutter_bloc: ^8.1.1 - path_provider: ^2.0.11 hydrated_bloc: ^9.0.0 + image_picker: ^1.0.6 + path: ^1.8.3 + path_provider: ^2.1.1 unicons: ^2.1.1 flutter: