Start to build app skeleton
							
								
								
									
										3
									
								
								moneymgr_mobile/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -43,3 +43,6 @@ app.*.map.json
 | 
			
		||||
/android/app/debug
 | 
			
		||||
/android/app/profile
 | 
			
		||||
/android/app/release
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
*.g.dart
 | 
			
		||||
@@ -1,3 +1,8 @@
 | 
			
		||||
# MoneyMgrMobile
 | 
			
		||||
 | 
			
		||||
Mobile application for MoneyMgr, built using Flutter
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Build
 | 
			
		||||
1. Run `flutter pub get` to get dependencies.
 | 
			
		||||
2. Run `dart run build_runner build` to generate required files. You can also run `dart run build_runner watch` to generate files and let [build_runner] watch for changes and rebuild if necessary.
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,8 @@ plugins {
 | 
			
		||||
android {
 | 
			
		||||
    namespace = "com.example.moneymgr_mobile"
 | 
			
		||||
    compileSdk = flutter.compileSdkVersion
 | 
			
		||||
    ndkVersion = flutter.ndkVersion
 | 
			
		||||
    // ndkVersion = flutter.ndkVersion
 | 
			
		||||
    ndkVersion = "27.0.12077973"
 | 
			
		||||
 | 
			
		||||
    compileOptions {
 | 
			
		||||
        sourceCompatibility = JavaVersion.VERSION_11
 | 
			
		||||
 
 | 
			
		||||
| 
		 After Width: | Height: | Size: 69 B  | 
@@ -1,12 +1,6 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<!-- Modify this file to customize your launch splash screen -->
 | 
			
		||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
 | 
			
		||||
    <item android:drawable="?android:colorBackground" />
 | 
			
		||||
 | 
			
		||||
    <!-- You can insert your own image assets here -->
 | 
			
		||||
    <!-- <item>
 | 
			
		||||
        <bitmap
 | 
			
		||||
            android:gravity="center"
 | 
			
		||||
            android:src="@mipmap/launch_image" />
 | 
			
		||||
    </item> -->
 | 
			
		||||
    <item>
 | 
			
		||||
        <bitmap android:gravity="fill" android:src="@drawable/background"/>
 | 
			
		||||
    </item>
 | 
			
		||||
</layer-list>
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								moneymgr_mobile/android/app/src/main/res/drawable/background.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 69 B  | 
@@ -1,12 +1,6 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<!-- Modify this file to customize your launch splash screen -->
 | 
			
		||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
 | 
			
		||||
    <item android:drawable="@android:color/white" />
 | 
			
		||||
 | 
			
		||||
    <!-- You can insert your own image assets here -->
 | 
			
		||||
    <!-- <item>
 | 
			
		||||
        <bitmap
 | 
			
		||||
            android:gravity="center"
 | 
			
		||||
            android:src="@mipmap/launch_image" />
 | 
			
		||||
    </item> -->
 | 
			
		||||
    <item>
 | 
			
		||||
        <bitmap android:gravity="fill" android:src="@drawable/background"/>
 | 
			
		||||
    </item>
 | 
			
		||||
</layer-list>
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,19 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<resources>
 | 
			
		||||
    <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on -->
 | 
			
		||||
    <style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
 | 
			
		||||
        <item name="android:forceDarkAllowed">false</item>
 | 
			
		||||
        <item name="android:windowFullscreen">false</item>
 | 
			
		||||
        <item name="android:windowDrawsSystemBarBackgrounds">false</item>
 | 
			
		||||
        <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
 | 
			
		||||
    </style>
 | 
			
		||||
    <!-- Theme applied to the Android Window as soon as the process has started.
 | 
			
		||||
         This theme determines the color of the Android Window while your
 | 
			
		||||
         Flutter UI initializes, as well as behind your Flutter UI while its
 | 
			
		||||
         running.
 | 
			
		||||
         
 | 
			
		||||
         This Theme is only used starting with V2 of Flutter's Android embedding. -->
 | 
			
		||||
    <style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
 | 
			
		||||
        <item name="android:windowBackground">?android:colorBackground</item>
 | 
			
		||||
    </style>
 | 
			
		||||
</resources>
 | 
			
		||||
@@ -5,6 +5,10 @@
 | 
			
		||||
        <!-- Show a splash screen on the activity. Automatically removed when
 | 
			
		||||
             the Flutter engine draws its first frame -->
 | 
			
		||||
        <item name="android:windowBackground">@drawable/launch_background</item>
 | 
			
		||||
        <item name="android:forceDarkAllowed">false</item>
 | 
			
		||||
        <item name="android:windowFullscreen">false</item>
 | 
			
		||||
        <item name="android:windowDrawsSystemBarBackgrounds">false</item>
 | 
			
		||||
        <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
 | 
			
		||||
    </style>
 | 
			
		||||
    <!-- Theme applied to the Android Window as soon as the process has started.
 | 
			
		||||
         This theme determines the color of the Android Window while your
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,19 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<resources>
 | 
			
		||||
    <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
 | 
			
		||||
    <style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
 | 
			
		||||
        <item name="android:forceDarkAllowed">false</item>
 | 
			
		||||
        <item name="android:windowFullscreen">false</item>
 | 
			
		||||
        <item name="android:windowDrawsSystemBarBackgrounds">false</item>
 | 
			
		||||
        <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
 | 
			
		||||
    </style>
 | 
			
		||||
    <!-- Theme applied to the Android Window as soon as the process has started.
 | 
			
		||||
         This theme determines the color of the Android Window while your
 | 
			
		||||
         Flutter UI initializes, as well as behind your Flutter UI while its
 | 
			
		||||
         running.
 | 
			
		||||
         
 | 
			
		||||
         This Theme is only used starting with V2 of Flutter's Android embedding. -->
 | 
			
		||||
    <style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
 | 
			
		||||
        <item name="android:windowBackground">?android:colorBackground</item>
 | 
			
		||||
    </style>
 | 
			
		||||
</resources>
 | 
			
		||||
@@ -5,6 +5,10 @@
 | 
			
		||||
        <!-- Show a splash screen on the activity. Automatically removed when
 | 
			
		||||
             the Flutter engine draws its first frame -->
 | 
			
		||||
        <item name="android:windowBackground">@drawable/launch_background</item>
 | 
			
		||||
        <item name="android:forceDarkAllowed">false</item>
 | 
			
		||||
        <item name="android:windowFullscreen">false</item>
 | 
			
		||||
        <item name="android:windowDrawsSystemBarBackgrounds">false</item>
 | 
			
		||||
        <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
 | 
			
		||||
    </style>
 | 
			
		||||
    <!-- Theme applied to the Android Window as soon as the process has started.
 | 
			
		||||
         This theme determines the color of the Android Window while your
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										154
									
								
								moneymgr_mobile/flutter_native_splash.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,154 @@
 | 
			
		||||
flutter_native_splash:
 | 
			
		||||
  # This package generates native code to customize Flutter's default white native splash screen
 | 
			
		||||
  # with background color and splash image.
 | 
			
		||||
  # Customize the parameters below, and run the following command in the terminal:
 | 
			
		||||
  # dart run flutter_native_splash:create
 | 
			
		||||
  # To restore Flutter's default white splash screen, run the following command in the terminal:
 | 
			
		||||
  # dart run flutter_native_splash:remove
 | 
			
		||||
 | 
			
		||||
  # IMPORTANT NOTE: These parameter do not affect the configuration of Android 12 and later, which
 | 
			
		||||
  # handle splash screens differently that prior versions of Android.  Android 12 and later must be
 | 
			
		||||
  # configured specifically in the android_12 section below.
 | 
			
		||||
 | 
			
		||||
  # color or background_image is the only required parameter.  Use color to set the background
 | 
			
		||||
  # of your splash screen to a solid color.  Use background_image to set the background of your
 | 
			
		||||
  # splash screen to a png image.  This is useful for gradients. The image will be stretch to the
 | 
			
		||||
  # size of the app. Only one parameter can be used, color and background_image cannot both be set.
 | 
			
		||||
  color: "#42a5f5"
 | 
			
		||||
  #background_image: "assets/background.png"
 | 
			
		||||
 | 
			
		||||
  # Optional parameters are listed below.  To enable a parameter, uncomment the line by removing
 | 
			
		||||
  # the leading # character.
 | 
			
		||||
 | 
			
		||||
  # The image parameter allows you to specify an image used in the splash screen.  It must be a
 | 
			
		||||
  # png file and should be sized for 4x pixel density.
 | 
			
		||||
  #image: assets/splash.png
 | 
			
		||||
 | 
			
		||||
  # The branding property allows you to specify an image used as branding in the splash screen.
 | 
			
		||||
  # It must be a png file. It is supported for Android, iOS and the Web.  For Android 12,
 | 
			
		||||
  # see the Android 12 section below.
 | 
			
		||||
  #branding: assets/dart.png
 | 
			
		||||
 | 
			
		||||
  # To position the branding image at the bottom of the screen you can use bottom, bottomRight,
 | 
			
		||||
  # and bottomLeft. The default values is bottom if not specified or specified something else.
 | 
			
		||||
  #branding_mode: bottom
 | 
			
		||||
 | 
			
		||||
  # Set the branding padding from the bottom of the screen.  The default value is 0
 | 
			
		||||
  # (Not supported on web yet)
 | 
			
		||||
  # branding_bottom_padding: 24
 | 
			
		||||
 | 
			
		||||
  # The color_dark, background_image_dark, image_dark, branding_dark are parameters that set the background
 | 
			
		||||
  # and image when the device is in dark mode. If they are not specified, the app will use the
 | 
			
		||||
  # parameters from above.  If there is no parameter above, the app will use the light mode values.
 | 
			
		||||
  # If the image_dark parameter is specified, color_dark or background_image_dark must be specified.
 | 
			
		||||
  # color_dark and background_image_dark cannot both be set.
 | 
			
		||||
  #color_dark: "#042a49"
 | 
			
		||||
  #background_image_dark: "assets/dark-background.png"
 | 
			
		||||
  #image_dark: assets/splash-invert.png
 | 
			
		||||
  #branding_dark: assets/dart_dark.png
 | 
			
		||||
 | 
			
		||||
  # From Android 12 onwards, the splash screen is handled differently than in previous versions.
 | 
			
		||||
  # Please visit https://developer.android.com/guide/topics/ui/splash-screen
 | 
			
		||||
  # Following are specific parameters for Android 12+.
 | 
			
		||||
  android_12:
 | 
			
		||||
  # The image parameter sets the splash screen icon image.  If this parameter is not specified,
 | 
			
		||||
  # the app's launcher icon will be used instead.
 | 
			
		||||
  # Please note that the splash screen will be clipped to a circle on the center of the screen.
 | 
			
		||||
  # App icon with an icon background: This should be 960×960 pixels, and fit within a circle
 | 
			
		||||
  # 640 pixels in diameter.
 | 
			
		||||
  # App icon without an icon background: This should be 1152×1152 pixels, and fit within a circle
 | 
			
		||||
  # 768 pixels in diameter.  To fit a 1152x1152 image within a circle with a 768 diameter, simply
 | 
			
		||||
  # ensure that the most important design elements of your image are placed within a circular area
 | 
			
		||||
  # with a 768 diameter at the center of the 1152x1152 canvas.
 | 
			
		||||
  #image: assets/android12splash.png
 | 
			
		||||
 | 
			
		||||
  # Splash screen background color.
 | 
			
		||||
  #color: "#42a5f5"
 | 
			
		||||
 | 
			
		||||
  # App icon background color.
 | 
			
		||||
  #icon_background_color: "#111111"
 | 
			
		||||
 | 
			
		||||
  # The branding property allows you to specify an image used as branding in the splash screen.
 | 
			
		||||
  #branding: assets/dart.png
 | 
			
		||||
 | 
			
		||||
  # The image_dark, color_dark, icon_background_color_dark, and branding_dark set values that
 | 
			
		||||
  # apply when the device is in dark mode. If they are not specified, the app will use the
 | 
			
		||||
  # parameters from above.  If there is no parameter above, the app will use the light mode values.
 | 
			
		||||
  #image_dark: assets/android12splash-invert.png
 | 
			
		||||
  #color_dark: "#042a49"
 | 
			
		||||
  #icon_background_color_dark: "#eeeeee"
 | 
			
		||||
 | 
			
		||||
  # The android, ios and web parameters can be used to disable generating a splash screen on a given
 | 
			
		||||
  # platform.
 | 
			
		||||
  #android: false
 | 
			
		||||
  #ios: false
 | 
			
		||||
  #web: false
 | 
			
		||||
 | 
			
		||||
  # Platform specific images can be specified with the following parameters, which will override
 | 
			
		||||
  # the respective parameter.  You may specify all, selected, or none of these parameters:
 | 
			
		||||
  #color_android: "#42a5f5"
 | 
			
		||||
  #color_dark_android: "#042a49"
 | 
			
		||||
  #color_ios: "#42a5f5"
 | 
			
		||||
  #color_dark_ios: "#042a49"
 | 
			
		||||
  #color_web: "#42a5f5"
 | 
			
		||||
  #color_dark_web: "#042a49"
 | 
			
		||||
  #image_android: assets/splash-android.png
 | 
			
		||||
  #image_dark_android: assets/splash-invert-android.png
 | 
			
		||||
  #image_ios: assets/splash-ios.png
 | 
			
		||||
  #image_dark_ios: assets/splash-invert-ios.png
 | 
			
		||||
  #image_web: assets/splash-web.gif
 | 
			
		||||
  #image_dark_web: assets/splash-invert-web.gif
 | 
			
		||||
  #background_image_android: "assets/background-android.png"
 | 
			
		||||
  #background_image_dark_android: "assets/dark-background-android.png"
 | 
			
		||||
  #background_image_ios: "assets/background-ios.png"
 | 
			
		||||
  #background_image_dark_ios: "assets/dark-background-ios.png"
 | 
			
		||||
  #background_image_web: "assets/background-web.png"
 | 
			
		||||
  #background_image_dark_web: "assets/dark-background-web.png"
 | 
			
		||||
  #branding_android: assets/brand-android.png
 | 
			
		||||
  #branding_bottom_padding_android: 24
 | 
			
		||||
  #branding_dark_android: assets/dart_dark-android.png
 | 
			
		||||
  #branding_ios: assets/brand-ios.png
 | 
			
		||||
  #branding_bottom_padding_ios: 24
 | 
			
		||||
  #branding_dark_ios: assets/dart_dark-ios.png
 | 
			
		||||
  #branding_web: assets/brand-web.gif
 | 
			
		||||
  #branding_dark_web: assets/dart_dark-web.gif
 | 
			
		||||
 | 
			
		||||
  # The position of the splash image can be set with android_gravity, ios_content_mode, and
 | 
			
		||||
  # web_image_mode parameters.  All default to center.
 | 
			
		||||
  #
 | 
			
		||||
  # android_gravity can be one of the following Android Gravity (see
 | 
			
		||||
  # https://developer.android.com/reference/android/view/Gravity): bottom, center,
 | 
			
		||||
  # center_horizontal, center_vertical, clip_horizontal, clip_vertical, end, fill, fill_horizontal,
 | 
			
		||||
  # fill_vertical, left, right, start, or top. android_gravity can be combined using the | operator to achieve multiple effects.
 | 
			
		||||
  # For example:
 | 
			
		||||
  # `android_gravity: fill|clip_vertical` - This will fill the width while maintaining the image's vertical aspect ratio
 | 
			
		||||
  #android_gravity: center
 | 
			
		||||
  #
 | 
			
		||||
  # ios_content_mode can be one of the following iOS UIView.ContentMode (see
 | 
			
		||||
  # https://developer.apple.com/documentation/uikit/uiview/contentmode): scaleToFill,
 | 
			
		||||
  # scaleAspectFit, scaleAspectFill, center, top, bottom, left, right, topLeft, topRight,
 | 
			
		||||
  # bottomLeft, or bottomRight.
 | 
			
		||||
  #ios_content_mode: center
 | 
			
		||||
  #
 | 
			
		||||
  # web_image_mode can be one of the following modes: center, contain, stretch, and cover.
 | 
			
		||||
  #web_image_mode: center
 | 
			
		||||
 | 
			
		||||
  # The screen orientation can be set in Android with the android_screen_orientation parameter.
 | 
			
		||||
  # Valid parameters can be found here:
 | 
			
		||||
  # https://developer.android.com/guide/topics/manifest/activity-element#screen
 | 
			
		||||
  #android_screen_orientation: sensorLandscape
 | 
			
		||||
 | 
			
		||||
  # To hide the notification bar, use the fullscreen parameter.  Has no effect in web since web
 | 
			
		||||
  # has no notification bar.  Defaults to false.
 | 
			
		||||
  # NOTE: Unlike Android, iOS will not automatically show the notification bar when the app loads.
 | 
			
		||||
  #       To show the notification bar, add the following code to your Flutter app:
 | 
			
		||||
  #       WidgetsFlutterBinding.ensureInitialized();
 | 
			
		||||
  #       SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: [SystemUiOverlay.bottom, SystemUiOverlay.top], );
 | 
			
		||||
  #fullscreen: true
 | 
			
		||||
 | 
			
		||||
  # If you have changed the name(s) of your info.plist file(s), you can specify the filename(s)
 | 
			
		||||
  # with the info_plist_files parameter.  Remove only the # characters in the three lines below,
 | 
			
		||||
  # do not remove any spaces:
 | 
			
		||||
  #info_plist_files:
 | 
			
		||||
  #  - 'ios/Runner/Info-Debug.plist'
 | 
			
		||||
  #  - 'ios/Runner/Info-Release.plist'
 | 
			
		||||
							
								
								
									
										21
									
								
								moneymgr_mobile/ios/Runner/Assets.xcassets/LaunchBackground.imageset/Contents.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,21 @@
 | 
			
		||||
{
 | 
			
		||||
  "images" : [
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "background.png",
 | 
			
		||||
      "idiom" : "universal",
 | 
			
		||||
      "scale" : "1x"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "idiom" : "universal",
 | 
			
		||||
      "scale" : "2x"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "idiom" : "universal",
 | 
			
		||||
      "scale" : "3x"
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "info" : {
 | 
			
		||||
    "author" : "xcode",
 | 
			
		||||
    "version" : 1
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								moneymgr_mobile/ios/Runner/Assets.xcassets/LaunchBackground.imageset/background.png
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 69 B  | 
@@ -1,23 +1,23 @@
 | 
			
		||||
{
 | 
			
		||||
  "images" : [
 | 
			
		||||
    {
 | 
			
		||||
      "idiom" : "universal",
 | 
			
		||||
      "filename" : "LaunchImage.png",
 | 
			
		||||
      "idiom" : "universal",
 | 
			
		||||
      "scale" : "1x"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "idiom" : "universal",
 | 
			
		||||
      "filename" : "LaunchImage@2x.png",
 | 
			
		||||
      "idiom" : "universal",
 | 
			
		||||
      "scale" : "2x"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "idiom" : "universal",
 | 
			
		||||
      "filename" : "LaunchImage@3x.png",
 | 
			
		||||
      "idiom" : "universal",
 | 
			
		||||
      "scale" : "3x"
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "info" : {
 | 
			
		||||
    "version" : 1,
 | 
			
		||||
    "author" : "xcode"
 | 
			
		||||
    "author" : "xcode",
 | 
			
		||||
    "version" : 1
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 68 B After Width: | Height: | Size: 69 B  | 
| 
		 Before Width: | Height: | Size: 68 B After Width: | Height: | Size: 69 B  | 
| 
		 Before Width: | Height: | Size: 68 B After Width: | Height: | Size: 69 B  | 
@@ -16,13 +16,19 @@
 | 
			
		||||
                    <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
 | 
			
		||||
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
 | 
			
		||||
                        <subviews>
 | 
			
		||||
                            <imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" image="LaunchImage" translatesAutoresizingMaskIntoConstraints="NO" id="YRO-k0-Ey4">
 | 
			
		||||
                            </imageView>
 | 
			
		||||
                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" image="LaunchBackground" translatesAutoresizingMaskIntoConstraints="NO" id="tWc-Dq-wcI"/>
 | 
			
		||||
                            <imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" image="LaunchImage" translatesAutoresizingMaskIntoConstraints="NO" id="YRO-k0-Ey4"></imageView>
 | 
			
		||||
                        </subviews>
 | 
			
		||||
                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
 | 
			
		||||
                        <constraints>
 | 
			
		||||
                            <constraint firstItem="YRO-k0-Ey4" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="1a2-6s-vTC"/>
 | 
			
		||||
                            <constraint firstItem="YRO-k0-Ey4" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" id="4X2-HB-R7a"/>
 | 
			
		||||
                            <constraint firstItem="YRO-k0-Ey4" firstAttribute="leading" secondItem="Ze5-6b-2t3" secondAttribute="leading" id="3T2-ad-Qdv"/>
 | 
			
		||||
                            <constraint firstItem="tWc-Dq-wcI" firstAttribute="bottom" secondItem="Ze5-6b-2t3" secondAttribute="bottom" id="RPx-PI-7Xg"/>
 | 
			
		||||
                            <constraint firstItem="tWc-Dq-wcI" firstAttribute="top" secondItem="Ze5-6b-2t3" secondAttribute="top" id="SdS-ul-q2q"/>
 | 
			
		||||
                            <constraint firstAttribute="trailing" secondItem="tWc-Dq-wcI" secondAttribute="trailing" id="Swv-Gf-Rwn"/>
 | 
			
		||||
                            <constraint firstAttribute="trailing" secondItem="YRO-k0-Ey4" secondAttribute="trailing" id="TQA-XW-tRk"/>
 | 
			
		||||
                            <constraint firstItem="YRO-k0-Ey4" firstAttribute="bottom" secondItem="Ze5-6b-2t3" secondAttribute="bottom" id="duK-uY-Gun"/>
 | 
			
		||||
                            <constraint firstItem="tWc-Dq-wcI" firstAttribute="leading" secondItem="Ze5-6b-2t3" secondAttribute="leading" id="kV7-tw-vXt"/>
 | 
			
		||||
                            <constraint firstItem="YRO-k0-Ey4" firstAttribute="top" secondItem="Ze5-6b-2t3" secondAttribute="top" id="xPn-NY-SIU"/>
 | 
			
		||||
                        </constraints>
 | 
			
		||||
                    </view>
 | 
			
		||||
                </viewController>
 | 
			
		||||
@@ -33,5 +39,6 @@
 | 
			
		||||
    </scenes>
 | 
			
		||||
    <resources>
 | 
			
		||||
        <image name="LaunchImage" width="168" height="185"/>
 | 
			
		||||
        <image name="LaunchBackground" width="1" height="1"/>
 | 
			
		||||
    </resources>
 | 
			
		||||
</document>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,49 +1,51 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 | 
			
		||||
<plist version="1.0">
 | 
			
		||||
<dict>
 | 
			
		||||
	<key>CFBundleDevelopmentRegion</key>
 | 
			
		||||
	<string>$(DEVELOPMENT_LANGUAGE)</string>
 | 
			
		||||
	<key>CFBundleDisplayName</key>
 | 
			
		||||
	<string>Moneymgr Mobile</string>
 | 
			
		||||
	<key>CFBundleExecutable</key>
 | 
			
		||||
	<string>$(EXECUTABLE_NAME)</string>
 | 
			
		||||
	<key>CFBundleIdentifier</key>
 | 
			
		||||
	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
 | 
			
		||||
	<key>CFBundleInfoDictionaryVersion</key>
 | 
			
		||||
	<string>6.0</string>
 | 
			
		||||
	<key>CFBundleName</key>
 | 
			
		||||
	<string>moneymgr_mobile</string>
 | 
			
		||||
	<key>CFBundlePackageType</key>
 | 
			
		||||
	<string>APPL</string>
 | 
			
		||||
	<key>CFBundleShortVersionString</key>
 | 
			
		||||
	<string>$(FLUTTER_BUILD_NAME)</string>
 | 
			
		||||
	<key>CFBundleSignature</key>
 | 
			
		||||
	<string>????</string>
 | 
			
		||||
	<key>CFBundleVersion</key>
 | 
			
		||||
	<string>$(FLUTTER_BUILD_NUMBER)</string>
 | 
			
		||||
	<key>LSRequiresIPhoneOS</key>
 | 
			
		||||
	<true/>
 | 
			
		||||
	<key>UILaunchStoryboardName</key>
 | 
			
		||||
	<string>LaunchScreen</string>
 | 
			
		||||
	<key>UIMainStoryboardFile</key>
 | 
			
		||||
	<string>Main</string>
 | 
			
		||||
	<key>UISupportedInterfaceOrientations</key>
 | 
			
		||||
	<array>
 | 
			
		||||
		<string>UIInterfaceOrientationPortrait</string>
 | 
			
		||||
		<string>UIInterfaceOrientationLandscapeLeft</string>
 | 
			
		||||
		<string>UIInterfaceOrientationLandscapeRight</string>
 | 
			
		||||
	</array>
 | 
			
		||||
	<key>UISupportedInterfaceOrientations~ipad</key>
 | 
			
		||||
	<array>
 | 
			
		||||
		<string>UIInterfaceOrientationPortrait</string>
 | 
			
		||||
		<string>UIInterfaceOrientationPortraitUpsideDown</string>
 | 
			
		||||
		<string>UIInterfaceOrientationLandscapeLeft</string>
 | 
			
		||||
		<string>UIInterfaceOrientationLandscapeRight</string>
 | 
			
		||||
	</array>
 | 
			
		||||
	<key>CADisableMinimumFrameDurationOnPhone</key>
 | 
			
		||||
	<true/>
 | 
			
		||||
	<key>UIApplicationSupportsIndirectInputEvents</key>
 | 
			
		||||
	<true/>
 | 
			
		||||
</dict>
 | 
			
		||||
	<dict>
 | 
			
		||||
		<key>CFBundleDevelopmentRegion</key>
 | 
			
		||||
		<string>$(DEVELOPMENT_LANGUAGE)</string>
 | 
			
		||||
		<key>CFBundleDisplayName</key>
 | 
			
		||||
		<string>Moneymgr Mobile</string>
 | 
			
		||||
		<key>CFBundleExecutable</key>
 | 
			
		||||
		<string>$(EXECUTABLE_NAME)</string>
 | 
			
		||||
		<key>CFBundleIdentifier</key>
 | 
			
		||||
		<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
 | 
			
		||||
		<key>CFBundleInfoDictionaryVersion</key>
 | 
			
		||||
		<string>6.0</string>
 | 
			
		||||
		<key>CFBundleName</key>
 | 
			
		||||
		<string>moneymgr_mobile</string>
 | 
			
		||||
		<key>CFBundlePackageType</key>
 | 
			
		||||
		<string>APPL</string>
 | 
			
		||||
		<key>CFBundleShortVersionString</key>
 | 
			
		||||
		<string>$(FLUTTER_BUILD_NAME)</string>
 | 
			
		||||
		<key>CFBundleSignature</key>
 | 
			
		||||
		<string>????</string>
 | 
			
		||||
		<key>CFBundleVersion</key>
 | 
			
		||||
		<string>$(FLUTTER_BUILD_NUMBER)</string>
 | 
			
		||||
		<key>LSRequiresIPhoneOS</key>
 | 
			
		||||
		<true/>
 | 
			
		||||
		<key>UILaunchStoryboardName</key>
 | 
			
		||||
		<string>LaunchScreen</string>
 | 
			
		||||
		<key>UIMainStoryboardFile</key>
 | 
			
		||||
		<string>Main</string>
 | 
			
		||||
		<key>UISupportedInterfaceOrientations</key>
 | 
			
		||||
		<array>
 | 
			
		||||
			<string>UIInterfaceOrientationPortrait</string>
 | 
			
		||||
			<string>UIInterfaceOrientationLandscapeLeft</string>
 | 
			
		||||
			<string>UIInterfaceOrientationLandscapeRight</string>
 | 
			
		||||
		</array>
 | 
			
		||||
		<key>UISupportedInterfaceOrientations~ipad</key>
 | 
			
		||||
		<array>
 | 
			
		||||
			<string>UIInterfaceOrientationPortrait</string>
 | 
			
		||||
			<string>UIInterfaceOrientationPortraitUpsideDown</string>
 | 
			
		||||
			<string>UIInterfaceOrientationLandscapeLeft</string>
 | 
			
		||||
			<string>UIInterfaceOrientationLandscapeRight</string>
 | 
			
		||||
		</array>
 | 
			
		||||
		<key>CADisableMinimumFrameDurationOnPhone</key>
 | 
			
		||||
		<true/>
 | 
			
		||||
		<key>UIApplicationSupportsIndirectInputEvents</key>
 | 
			
		||||
		<true/>
 | 
			
		||||
		<key>UIStatusBarHidden</key>
 | 
			
		||||
		<false/>
 | 
			
		||||
	</dict>
 | 
			
		||||
</plist>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,122 +1,93 @@
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
import 'package:flutter_hooks/flutter_hooks.dart';
 | 
			
		||||
import 'package:flutter_native_splash/flutter_native_splash.dart';
 | 
			
		||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
 | 
			
		||||
import 'package:moneymgr_mobile/providers/settings.dart';
 | 
			
		||||
import 'package:moneymgr_mobile/services/storage/prefs.dart';
 | 
			
		||||
import 'package:moneymgr_mobile/utils/provider_observer.dart';
 | 
			
		||||
import 'package:moneymgr_mobile/utils/theme_utils.dart';
 | 
			
		||||
 | 
			
		||||
void main() {
 | 
			
		||||
  runApp(const MyApp());
 | 
			
		||||
// Inspired from https://github.com/dhafinrayhan/dummymart
 | 
			
		||||
 | 
			
		||||
Future<void> main() async {
 | 
			
		||||
  WidgetsBinding widgetsBinding = WidgetsFlutterBinding.ensureInitialized();
 | 
			
		||||
 | 
			
		||||
  // We preserve the native splash screen, which will then removed once the main
 | 
			
		||||
  // app is inserted to the widget tree.
 | 
			
		||||
  FlutterNativeSplash.preserve(widgetsBinding: widgetsBinding);
 | 
			
		||||
 | 
			
		||||
  runApp(ProviderScope(
 | 
			
		||||
    observers: [AppProviderObserver()],
 | 
			
		||||
    child: const MoneyMgrApp(),
 | 
			
		||||
  ));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class MyApp extends StatelessWidget {
 | 
			
		||||
  const MyApp({super.key});
 | 
			
		||||
class MoneyMgrApp extends StatelessWidget {
 | 
			
		||||
  const MoneyMgrApp({super.key});
 | 
			
		||||
 | 
			
		||||
  // This widget is the root of your application.
 | 
			
		||||
  @override
 | 
			
		||||
  Widget build(BuildContext context) {
 | 
			
		||||
    return MaterialApp(
 | 
			
		||||
      title: 'Flutter Demo',
 | 
			
		||||
      theme: ThemeData(
 | 
			
		||||
        // This is the theme of your application.
 | 
			
		||||
        //
 | 
			
		||||
        // TRY THIS: Try running your application with "flutter run". You'll see
 | 
			
		||||
        // the application has a purple toolbar. Then, without quitting the app,
 | 
			
		||||
        // try changing the seedColor in the colorScheme below to Colors.green
 | 
			
		||||
        // and then invoke "hot reload" (save your changes or press the "hot
 | 
			
		||||
        // reload" button in a Flutter-supported IDE, or press "r" if you used
 | 
			
		||||
        // the command line to start the app).
 | 
			
		||||
        //
 | 
			
		||||
        // Notice that the counter didn't reset back to zero; the application
 | 
			
		||||
        // state is not lost during the reload. To reset the state, use hot
 | 
			
		||||
        // restart instead.
 | 
			
		||||
        //
 | 
			
		||||
        // This works for code too, not just values: Most code changes can be
 | 
			
		||||
        // tested with just a hot reload.
 | 
			
		||||
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
 | 
			
		||||
      ),
 | 
			
		||||
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
 | 
			
		||||
    return const _EagerInitialization(
 | 
			
		||||
      child: _MainApp(),
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class MyHomePage extends StatefulWidget {
 | 
			
		||||
  const MyHomePage({super.key, required this.title});
 | 
			
		||||
 | 
			
		||||
  // This widget is the home page of your application. It is stateful, meaning
 | 
			
		||||
  // that it has a State object (defined below) that contains fields that affect
 | 
			
		||||
  // how it looks.
 | 
			
		||||
 | 
			
		||||
  // This class is the configuration for the state. It holds the values (in this
 | 
			
		||||
  // case the title) provided by the parent (in this case the App widget) and
 | 
			
		||||
  // used by the build method of the State. Fields in a Widget subclass are
 | 
			
		||||
  // always marked "final".
 | 
			
		||||
 | 
			
		||||
  final String title;
 | 
			
		||||
class _EagerInitialization extends ConsumerWidget {
 | 
			
		||||
  const _EagerInitialization({required this.child});
 | 
			
		||||
  final Widget child;
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  State<MyHomePage> createState() => _MyHomePageState();
 | 
			
		||||
  Widget build(BuildContext context, WidgetRef ref) {
 | 
			
		||||
    final values = [
 | 
			
		||||
      ref.watch(prefsProvider),
 | 
			
		||||
    ];
 | 
			
		||||
 | 
			
		||||
    if (values.every((value) => value.hasValue)) {
 | 
			
		||||
      return child;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return const SizedBox();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class _MyHomePageState extends State<MyHomePage> {
 | 
			
		||||
  int _counter = 0;
 | 
			
		||||
class _MainApp extends StatefulHookConsumerWidget {
 | 
			
		||||
  const _MainApp();
 | 
			
		||||
 | 
			
		||||
  void _incrementCounter() {
 | 
			
		||||
    setState(() {
 | 
			
		||||
      // This call to setState tells the Flutter framework that something has
 | 
			
		||||
      // changed in this State, which causes it to rerun the build method below
 | 
			
		||||
      // so that the display can reflect the updated values. If we changed
 | 
			
		||||
      // _counter without calling setState(), then the build method would not be
 | 
			
		||||
      // called again, and so nothing would appear to happen.
 | 
			
		||||
      _counter++;
 | 
			
		||||
    });
 | 
			
		||||
  @override
 | 
			
		||||
  ConsumerState<_MainApp> createState() => _MainAppState();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class _MainAppState extends ConsumerState<_MainApp> {
 | 
			
		||||
  @override
 | 
			
		||||
  void initState() {
 | 
			
		||||
    super.initState();
 | 
			
		||||
    FlutterNativeSplash.remove();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Widget build(BuildContext context) {
 | 
			
		||||
    // This method is rerun every time setState is called, for instance as done
 | 
			
		||||
    // by the _incrementCounter method above.
 | 
			
		||||
    //
 | 
			
		||||
    // The Flutter framework has been optimized to make rerunning build methods
 | 
			
		||||
    // fast, so that you can just rebuild anything that needs updating rather
 | 
			
		||||
    // than having to individually change instances of widgets.
 | 
			
		||||
    return Scaffold(
 | 
			
		||||
      appBar: AppBar(
 | 
			
		||||
        // TRY THIS: Try changing the color here to a specific color (to
 | 
			
		||||
        // Colors.amber, perhaps?) and trigger a hot reload to see the AppBar
 | 
			
		||||
        // change color while the other colors stay the same.
 | 
			
		||||
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
 | 
			
		||||
        // Here we take the value from the MyHomePage object that was created by
 | 
			
		||||
        // the App.build method, and use it to set our appbar title.
 | 
			
		||||
        title: Text(widget.title),
 | 
			
		||||
      ),
 | 
			
		||||
      body: Center(
 | 
			
		||||
        // Center is a layout widget. It takes a single child and positions it
 | 
			
		||||
        // in the middle of the parent.
 | 
			
		||||
        child: Column(
 | 
			
		||||
          // Column is also a layout widget. It takes a list of children and
 | 
			
		||||
          // arranges them vertically. By default, it sizes itself to fit its
 | 
			
		||||
          // children horizontally, and tries to be as tall as its parent.
 | 
			
		||||
          //
 | 
			
		||||
          // Column has various properties to control how it sizes itself and
 | 
			
		||||
          // how it positions its children. Here we use mainAxisAlignment to
 | 
			
		||||
          // center the children vertically; the main axis here is the vertical
 | 
			
		||||
          // axis because Columns are vertical (the cross axis would be
 | 
			
		||||
          // horizontal).
 | 
			
		||||
          //
 | 
			
		||||
          // TRY THIS: Invoke "debug painting" (choose the "Toggle Debug Paint"
 | 
			
		||||
          // action in the IDE, or press "p" in the console), to see the
 | 
			
		||||
          // wireframe for each widget.
 | 
			
		||||
          mainAxisAlignment: MainAxisAlignment.center,
 | 
			
		||||
          children: <Widget>[
 | 
			
		||||
            const Text('You have pushed the button this many times:'),
 | 
			
		||||
            Text(
 | 
			
		||||
              '$_counter',
 | 
			
		||||
              style: Theme.of(context).textTheme.headlineMedium,
 | 
			
		||||
            ),
 | 
			
		||||
          ],
 | 
			
		||||
    final router = ref.watch(routerProvider);
 | 
			
		||||
    final themeMode = ref.watch(currentThemeModeProvider);
 | 
			
		||||
 | 
			
		||||
    final (lightTheme, darkTheme) = useMemoized(() => createDualThemeData(
 | 
			
		||||
      seedColor: Colors.blue,
 | 
			
		||||
      useMaterial3: true,
 | 
			
		||||
      transformer: (data) => data.copyWith(
 | 
			
		||||
        inputDecorationTheme: const InputDecorationTheme(
 | 
			
		||||
          border: OutlineInputBorder(),
 | 
			
		||||
        ),
 | 
			
		||||
      ),
 | 
			
		||||
      floatingActionButton: FloatingActionButton(
 | 
			
		||||
        onPressed: _incrementCounter,
 | 
			
		||||
        tooltip: 'Increment',
 | 
			
		||||
        child: const Icon(Icons.add),
 | 
			
		||||
      ), // This trailing comma makes auto-formatting nicer for build methods.
 | 
			
		||||
    ));
 | 
			
		||||
 | 
			
		||||
    return MaterialApp.router(
 | 
			
		||||
      title: 'MoneyMgr',
 | 
			
		||||
      themeMode: themeMode,
 | 
			
		||||
      theme: lightTheme,
 | 
			
		||||
      darkTheme: darkTheme,
 | 
			
		||||
      routerConfig: router,
 | 
			
		||||
      debugShowCheckedModeBanner: false,
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										37
									
								
								moneymgr_mobile/lib/providers/settings.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,37 @@
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
 | 
			
		||||
 | 
			
		||||
import '../../../services/storage/prefs.dart';
 | 
			
		||||
 | 
			
		||||
part 'settings.g.dart';
 | 
			
		||||
 | 
			
		||||
/// The current theme mode of the app.
 | 
			
		||||
///
 | 
			
		||||
/// When this provider is first read, it will read the saved value from storage,
 | 
			
		||||
/// and defaults to [ThemeMode.system] if the theme mode has not been set before.
 | 
			
		||||
@riverpod
 | 
			
		||||
class CurrentThemeMode extends _$CurrentThemeMode {
 | 
			
		||||
  @override
 | 
			
		||||
  ThemeMode build() {
 | 
			
		||||
    final prefs = ref.watch(prefsProvider).requireValue;
 | 
			
		||||
 | 
			
		||||
    // Load the saved theme mode setting from shared preferences.
 | 
			
		||||
    final themeModeName = prefs.getString('themeMode');
 | 
			
		||||
 | 
			
		||||
    // Return [ThemeMode] based on the saved setting, or [ThemeMode.system]
 | 
			
		||||
    // if there's no saved setting yet.
 | 
			
		||||
    return ThemeMode.values.singleWhere(
 | 
			
		||||
          (themeMode) => themeMode.name == themeModeName,
 | 
			
		||||
      orElse: () => ThemeMode.system,
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  void set(ThemeMode themeMode) {
 | 
			
		||||
    final prefs = ref.read(prefsProvider).requireValue;
 | 
			
		||||
 | 
			
		||||
    // Save the new theme mode to shared preferences.
 | 
			
		||||
    prefs.setString('themeMode', themeMode.name);
 | 
			
		||||
 | 
			
		||||
    ref.invalidateSelf();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										11
									
								
								moneymgr_mobile/lib/services/storage/prefs.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,11 @@
 | 
			
		||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
 | 
			
		||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
 | 
			
		||||
import 'package:shared_preferences/shared_preferences.dart';
 | 
			
		||||
 | 
			
		||||
part 'prefs.g.dart';
 | 
			
		||||
 | 
			
		||||
@riverpod
 | 
			
		||||
Future<SharedPreferencesWithCache> prefs(Ref ref) =>
 | 
			
		||||
    SharedPreferencesWithCache.create(
 | 
			
		||||
      cacheOptions: const SharedPreferencesWithCacheOptions(),
 | 
			
		||||
    );
 | 
			
		||||
							
								
								
									
										42
									
								
								moneymgr_mobile/lib/utils/provider_observer.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,42 @@
 | 
			
		||||
import 'package:flutter/foundation.dart';
 | 
			
		||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
 | 
			
		||||
 | 
			
		||||
/// A utility to observe Riverpod providers.
 | 
			
		||||
class AppProviderObserver extends ProviderObserver {
 | 
			
		||||
  @override
 | 
			
		||||
  void didAddProvider(
 | 
			
		||||
    ProviderBase<Object?> provider,
 | 
			
		||||
    Object? value,
 | 
			
		||||
    ProviderContainer container,
 | 
			
		||||
  ) {
 | 
			
		||||
    debugPrint('Provider $provider was initialized with $value');
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  void didDisposeProvider(
 | 
			
		||||
    ProviderBase<Object?> provider,
 | 
			
		||||
    ProviderContainer container,
 | 
			
		||||
  ) {
 | 
			
		||||
    debugPrint('Provider $provider was disposed');
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  void didUpdateProvider(
 | 
			
		||||
    ProviderBase<Object?> provider,
 | 
			
		||||
    Object? previousValue,
 | 
			
		||||
    Object? newValue,
 | 
			
		||||
    ProviderContainer container,
 | 
			
		||||
  ) {
 | 
			
		||||
    debugPrint('Provider $provider updated from $previousValue to $newValue');
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  void providerDidFail(
 | 
			
		||||
    ProviderBase<Object?> provider,
 | 
			
		||||
    Object error,
 | 
			
		||||
    StackTrace stackTrace,
 | 
			
		||||
    ProviderContainer container,
 | 
			
		||||
  ) {
 | 
			
		||||
    debugPrint('Provider $provider threw $error at $stackTrace');
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										36
									
								
								moneymgr_mobile/lib/utils/theme_utils.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,36 @@
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
 | 
			
		||||
/// Creates two [ThemeData]s (light and dark variants) from a given [seedColor].
 | 
			
		||||
///
 | 
			
		||||
/// This method is needed because once a [ThemeData] is generated, we cannot get
 | 
			
		||||
/// the [ColorScheme] seed to generate another one based on the same seed.
 | 
			
		||||
(ThemeData, ThemeData) createDualThemeData({
 | 
			
		||||
  required Color seedColor,
 | 
			
		||||
  TextTheme? textTheme,
 | 
			
		||||
  bool? useMaterial3,
 | 
			
		||||
  ThemeData Function(ThemeData)? transformer,
 | 
			
		||||
}) {
 | 
			
		||||
  var lightTheme = ThemeData.from(
 | 
			
		||||
    colorScheme: ColorScheme.fromSeed(
 | 
			
		||||
      seedColor: seedColor,
 | 
			
		||||
      brightness: Brightness.light,
 | 
			
		||||
    ),
 | 
			
		||||
    textTheme: textTheme,
 | 
			
		||||
    useMaterial3: useMaterial3,
 | 
			
		||||
  );
 | 
			
		||||
  var darkTheme = ThemeData.from(
 | 
			
		||||
    colorScheme: ColorScheme.fromSeed(
 | 
			
		||||
      seedColor: seedColor,
 | 
			
		||||
      brightness: Brightness.dark,
 | 
			
		||||
    ),
 | 
			
		||||
    textTheme: textTheme,
 | 
			
		||||
    useMaterial3: useMaterial3,
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  if (transformer != null) {
 | 
			
		||||
    lightTheme = transformer(lightTheme);
 | 
			
		||||
    darkTheme = transformer(darkTheme);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return (lightTheme, darkTheme);
 | 
			
		||||
}
 | 
			
		||||
@@ -5,6 +5,8 @@
 | 
			
		||||
import FlutterMacOS
 | 
			
		||||
import Foundation
 | 
			
		||||
 | 
			
		||||
import shared_preferences_foundation
 | 
			
		||||
 | 
			
		||||
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
 | 
			
		||||
  SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,54 @@
 | 
			
		||||
# Generated by pub
 | 
			
		||||
# See https://dart.dev/tools/pub/glossary#lockfile
 | 
			
		||||
packages:
 | 
			
		||||
  _fe_analyzer_shared:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: _fe_analyzer_shared
 | 
			
		||||
      sha256: e55636ed79578b9abca5fecf9437947798f5ef7456308b5cb85720b793eac92f
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "82.0.0"
 | 
			
		||||
  analyzer:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: analyzer
 | 
			
		||||
      sha256: "904ae5bb474d32c38fb9482e2d925d5454cda04ddd0e55d2e6826bc72f6ba8c0"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "7.4.5"
 | 
			
		||||
  analyzer_plugin:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: analyzer_plugin
 | 
			
		||||
      sha256: ee188b6df6c85f1441497c7171c84f1392affadc0384f71089cb10a3bc508cef
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "0.13.1"
 | 
			
		||||
  ansicolor:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: ansicolor
 | 
			
		||||
      sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.0.3"
 | 
			
		||||
  archive:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: archive
 | 
			
		||||
      sha256: "2fde1607386ab523f7a36bb3e7edb43bd58e6edaf2ffb29d8a6d578b297fdbbd"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "4.0.7"
 | 
			
		||||
  args:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: args
 | 
			
		||||
      sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.7.0"
 | 
			
		||||
  async:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
@@ -17,6 +65,70 @@ packages:
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.1.2"
 | 
			
		||||
  build:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: build
 | 
			
		||||
      sha256: "51dc711996cbf609b90cbe5b335bbce83143875a9d58e4b5c6d3c4f684d3dda7"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.5.4"
 | 
			
		||||
  build_config:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: build_config
 | 
			
		||||
      sha256: "4ae2de3e1e67ea270081eaee972e1bd8f027d459f249e0f1186730784c2e7e33"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "1.1.2"
 | 
			
		||||
  build_daemon:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: build_daemon
 | 
			
		||||
      sha256: "8e928697a82be082206edb0b9c99c5a4ad6bc31c9e9b8b2f291ae65cd4a25daa"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "4.0.4"
 | 
			
		||||
  build_resolvers:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: build_resolvers
 | 
			
		||||
      sha256: ee4257b3f20c0c90e72ed2b57ad637f694ccba48839a821e87db762548c22a62
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.5.4"
 | 
			
		||||
  build_runner:
 | 
			
		||||
    dependency: "direct dev"
 | 
			
		||||
    description:
 | 
			
		||||
      name: build_runner
 | 
			
		||||
      sha256: "382a4d649addbfb7ba71a3631df0ec6a45d5ab9b098638144faf27f02778eb53"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.5.4"
 | 
			
		||||
  build_runner_core:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: build_runner_core
 | 
			
		||||
      sha256: "85fbbb1036d576d966332a3f5ce83f2ce66a40bea1a94ad2d5fc29a19a0d3792"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "9.1.2"
 | 
			
		||||
  built_collection:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: built_collection
 | 
			
		||||
      sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "5.1.1"
 | 
			
		||||
  built_value:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: built_value
 | 
			
		||||
      sha256: "082001b5c3dc495d4a42f1d5789990505df20d8547d42507c29050af6933ee27"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "8.10.1"
 | 
			
		||||
  characters:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
@@ -25,6 +137,14 @@ packages:
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "1.4.0"
 | 
			
		||||
  checked_yaml:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: checked_yaml
 | 
			
		||||
      sha256: "959525d3162f249993882720d52b7e0c833978df229be20702b33d48d91de70f"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.0.4"
 | 
			
		||||
  clock:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
@@ -33,6 +153,14 @@ packages:
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "1.1.2"
 | 
			
		||||
  code_builder:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: code_builder
 | 
			
		||||
      sha256: "0ec10bf4a89e4c613960bf1e8b42c64127021740fb21640c29c909826a5eea3e"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "4.10.1"
 | 
			
		||||
  collection:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
@@ -41,6 +169,30 @@ packages:
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "1.19.1"
 | 
			
		||||
  convert:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: convert
 | 
			
		||||
      sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "3.1.2"
 | 
			
		||||
  crypto:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: crypto
 | 
			
		||||
      sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "3.0.6"
 | 
			
		||||
  csslib:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: csslib
 | 
			
		||||
      sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "1.0.2"
 | 
			
		||||
  cupertino_icons:
 | 
			
		||||
    dependency: "direct main"
 | 
			
		||||
    description:
 | 
			
		||||
@@ -49,6 +201,30 @@ packages:
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "1.0.8"
 | 
			
		||||
  custom_lint_core:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: custom_lint_core
 | 
			
		||||
      sha256: "31110af3dde9d29fb10828ca33f1dce24d2798477b167675543ce3d208dee8be"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "0.7.5"
 | 
			
		||||
  custom_lint_visitor:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: custom_lint_visitor
 | 
			
		||||
      sha256: cba5b6d7a6217312472bf4468cdf68c949488aed7ffb0eab792cd0b6c435054d
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "1.0.0+7.4.5"
 | 
			
		||||
  dart_style:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: dart_style
 | 
			
		||||
      sha256: "5b236382b47ee411741447c1f1e111459c941ea1b3f2b540dde54c210a3662af"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "3.1.0"
 | 
			
		||||
  fake_async:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
@@ -57,11 +233,43 @@ packages:
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "1.3.3"
 | 
			
		||||
  ffi:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: ffi
 | 
			
		||||
      sha256: "289279317b4b16eb2bb7e271abccd4bf84ec9bdcbe999e278a94b804f5630418"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.1.4"
 | 
			
		||||
  file:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: file
 | 
			
		||||
      sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "7.0.1"
 | 
			
		||||
  fixnum:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: fixnum
 | 
			
		||||
      sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "1.1.1"
 | 
			
		||||
  flutter:
 | 
			
		||||
    dependency: "direct main"
 | 
			
		||||
    description: flutter
 | 
			
		||||
    source: sdk
 | 
			
		||||
    version: "0.0.0"
 | 
			
		||||
  flutter_hooks:
 | 
			
		||||
    dependency: "direct main"
 | 
			
		||||
    description:
 | 
			
		||||
      name: flutter_hooks
 | 
			
		||||
      sha256: b772e710d16d7a20c0740c4f855095026b31c7eb5ba3ab67d2bd52021cd9461d
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "0.21.2"
 | 
			
		||||
  flutter_lints:
 | 
			
		||||
    dependency: "direct dev"
 | 
			
		||||
    description:
 | 
			
		||||
@@ -70,11 +278,144 @@ packages:
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "5.0.0"
 | 
			
		||||
  flutter_native_splash:
 | 
			
		||||
    dependency: "direct main"
 | 
			
		||||
    description:
 | 
			
		||||
      name: flutter_native_splash
 | 
			
		||||
      sha256: "8321a6d11a8d13977fa780c89de8d257cce3d841eecfb7a4cadffcc4f12d82dc"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.4.6"
 | 
			
		||||
  flutter_riverpod:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: flutter_riverpod
 | 
			
		||||
      sha256: "9532ee6db4a943a1ed8383072a2e3eeda041db5657cdf6d2acecf3c21ecbe7e1"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.6.1"
 | 
			
		||||
  flutter_test:
 | 
			
		||||
    dependency: "direct dev"
 | 
			
		||||
    description: flutter
 | 
			
		||||
    source: sdk
 | 
			
		||||
    version: "0.0.0"
 | 
			
		||||
  flutter_web_plugins:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description: flutter
 | 
			
		||||
    source: sdk
 | 
			
		||||
    version: "0.0.0"
 | 
			
		||||
  freezed_annotation:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: freezed_annotation
 | 
			
		||||
      sha256: c87ff004c8aa6af2d531668b46a4ea379f7191dc6dfa066acd53d506da6e044b
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "3.0.0"
 | 
			
		||||
  frontend_server_client:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: frontend_server_client
 | 
			
		||||
      sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "4.0.0"
 | 
			
		||||
  glob:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: glob
 | 
			
		||||
      sha256: c3f1ee72c96f8f78935e18aa8cecced9ab132419e8625dc187e1c2408efc20de
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.1.3"
 | 
			
		||||
  go_router:
 | 
			
		||||
    dependency: "direct main"
 | 
			
		||||
    description:
 | 
			
		||||
      name: go_router
 | 
			
		||||
      sha256: ac294be30ba841830cfa146e5a3b22bb09f8dc5a0fdd9ca9332b04b0bde99ebf
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "15.2.4"
 | 
			
		||||
  graphs:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: graphs
 | 
			
		||||
      sha256: "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.3.2"
 | 
			
		||||
  hooks_riverpod:
 | 
			
		||||
    dependency: "direct main"
 | 
			
		||||
    description:
 | 
			
		||||
      name: hooks_riverpod
 | 
			
		||||
      sha256: "70bba33cfc5670c84b796e6929c54b8bc5be7d0fe15bb28c2560500b9ad06966"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.6.1"
 | 
			
		||||
  html:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: html
 | 
			
		||||
      sha256: "6d1264f2dffa1b1101c25a91dff0dc2daee4c18e87cd8538729773c073dbf602"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "0.15.6"
 | 
			
		||||
  http:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: http
 | 
			
		||||
      sha256: "2c11f3f94c687ee9bad77c171151672986360b2b001d109814ee7140b2cf261b"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "1.4.0"
 | 
			
		||||
  http_multi_server:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: http_multi_server
 | 
			
		||||
      sha256: aa6199f908078bb1c5efb8d8638d4ae191aac11b311132c3ef48ce352fb52ef8
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "3.2.2"
 | 
			
		||||
  http_parser:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: http_parser
 | 
			
		||||
      sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "4.1.2"
 | 
			
		||||
  image:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: image
 | 
			
		||||
      sha256: "4e973fcf4caae1a4be2fa0a13157aa38a8f9cb049db6529aa00b4d71abc4d928"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "4.5.4"
 | 
			
		||||
  io:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: io
 | 
			
		||||
      sha256: dfd5a80599cf0165756e3181807ed3e77daf6dd4137caaad72d0b7931597650b
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "1.0.5"
 | 
			
		||||
  js:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: js
 | 
			
		||||
      sha256: "53385261521cc4a0c4658fd0ad07a7d14591cf8fc33abbceae306ddb974888dc"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "0.7.2"
 | 
			
		||||
  json_annotation:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: json_annotation
 | 
			
		||||
      sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "4.9.0"
 | 
			
		||||
  leak_tracker:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
@@ -107,6 +448,14 @@ packages:
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "5.1.1"
 | 
			
		||||
  logging:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: logging
 | 
			
		||||
      sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "1.3.0"
 | 
			
		||||
  matcher:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
@@ -131,6 +480,22 @@ packages:
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "1.16.0"
 | 
			
		||||
  mime:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: mime
 | 
			
		||||
      sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.0.0"
 | 
			
		||||
  package_config:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: package_config
 | 
			
		||||
      sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.2.0"
 | 
			
		||||
  path:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
@@ -139,11 +504,203 @@ packages:
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "1.9.1"
 | 
			
		||||
  path_provider_linux:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: path_provider_linux
 | 
			
		||||
      sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.2.1"
 | 
			
		||||
  path_provider_platform_interface:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: path_provider_platform_interface
 | 
			
		||||
      sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.1.2"
 | 
			
		||||
  path_provider_windows:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: path_provider_windows
 | 
			
		||||
      sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.3.0"
 | 
			
		||||
  petitparser:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: petitparser
 | 
			
		||||
      sha256: "07c8f0b1913bcde1ff0d26e57ace2f3012ccbf2b204e070290dad3bb22797646"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "6.1.0"
 | 
			
		||||
  platform:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: platform
 | 
			
		||||
      sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "3.1.6"
 | 
			
		||||
  plugin_platform_interface:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: plugin_platform_interface
 | 
			
		||||
      sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.1.8"
 | 
			
		||||
  pool:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: pool
 | 
			
		||||
      sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "1.5.1"
 | 
			
		||||
  posix:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: posix
 | 
			
		||||
      sha256: "6323a5b0fa688b6a010df4905a56b00181479e6d10534cecfecede2aa55add61"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "6.0.3"
 | 
			
		||||
  pub_semver:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: pub_semver
 | 
			
		||||
      sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.2.0"
 | 
			
		||||
  pubspec_parse:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: pubspec_parse
 | 
			
		||||
      sha256: "0560ba233314abbed0a48a2956f7f022cce7c3e1e73df540277da7544cad4082"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "1.5.0"
 | 
			
		||||
  riverpod:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: riverpod
 | 
			
		||||
      sha256: "59062512288d3056b2321804332a13ffdd1bf16df70dcc8e506e411280a72959"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.6.1"
 | 
			
		||||
  riverpod_analyzer_utils:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: riverpod_analyzer_utils
 | 
			
		||||
      sha256: "03a17170088c63aab6c54c44456f5ab78876a1ddb6032ffde1662ddab4959611"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "0.5.10"
 | 
			
		||||
  riverpod_annotation:
 | 
			
		||||
    dependency: "direct main"
 | 
			
		||||
    description:
 | 
			
		||||
      name: riverpod_annotation
 | 
			
		||||
      sha256: e14b0bf45b71326654e2705d462f21b958f987087be850afd60578fcd502d1b8
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.6.1"
 | 
			
		||||
  riverpod_generator:
 | 
			
		||||
    dependency: "direct dev"
 | 
			
		||||
    description:
 | 
			
		||||
      name: riverpod_generator
 | 
			
		||||
      sha256: "44a0992d54473eb199ede00e2260bd3c262a86560e3c6f6374503d86d0580e36"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.6.5"
 | 
			
		||||
  shared_preferences:
 | 
			
		||||
    dependency: "direct main"
 | 
			
		||||
    description:
 | 
			
		||||
      name: shared_preferences
 | 
			
		||||
      sha256: "6e8bf70b7fef813df4e9a36f658ac46d107db4b4cfe1048b477d4e453a8159f5"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.5.3"
 | 
			
		||||
  shared_preferences_android:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: shared_preferences_android
 | 
			
		||||
      sha256: "20cbd561f743a342c76c151d6ddb93a9ce6005751e7aa458baad3858bfbfb6ac"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.4.10"
 | 
			
		||||
  shared_preferences_foundation:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: shared_preferences_foundation
 | 
			
		||||
      sha256: "6a52cfcdaeac77cad8c97b539ff688ccfc458c007b4db12be584fbe5c0e49e03"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.5.4"
 | 
			
		||||
  shared_preferences_linux:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: shared_preferences_linux
 | 
			
		||||
      sha256: "580abfd40f415611503cae30adf626e6656dfb2f0cee8f465ece7b6defb40f2f"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.4.1"
 | 
			
		||||
  shared_preferences_platform_interface:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: shared_preferences_platform_interface
 | 
			
		||||
      sha256: "57cbf196c486bc2cf1f02b85784932c6094376284b3ad5779d1b1c6c6a816b80"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.4.1"
 | 
			
		||||
  shared_preferences_web:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: shared_preferences_web
 | 
			
		||||
      sha256: c49bd060261c9a3f0ff445892695d6212ff603ef3115edbb448509d407600019
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.4.3"
 | 
			
		||||
  shared_preferences_windows:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: shared_preferences_windows
 | 
			
		||||
      sha256: "94ef0f72b2d71bc3e700e025db3710911bd51a71cefb65cc609dd0d9a982e3c1"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.4.1"
 | 
			
		||||
  shelf:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: shelf
 | 
			
		||||
      sha256: e7dd780a7ffb623c57850b33f43309312fc863fb6aa3d276a754bb299839ef12
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "1.4.2"
 | 
			
		||||
  shelf_web_socket:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: shelf_web_socket
 | 
			
		||||
      sha256: "3632775c8e90d6c9712f883e633716432a27758216dfb61bd86a8321c0580925"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "3.0.0"
 | 
			
		||||
  sky_engine:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description: flutter
 | 
			
		||||
    source: sdk
 | 
			
		||||
    version: "0.0.0"
 | 
			
		||||
  source_gen:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: source_gen
 | 
			
		||||
      sha256: "35c8150ece9e8c8d263337a265153c3329667640850b9304861faea59fc98f6b"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.0.0"
 | 
			
		||||
  source_span:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
@@ -152,6 +709,14 @@ packages:
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "1.10.1"
 | 
			
		||||
  sprintf:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: sprintf
 | 
			
		||||
      sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "7.0.0"
 | 
			
		||||
  stack_trace:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
@@ -160,6 +725,14 @@ packages:
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "1.12.1"
 | 
			
		||||
  state_notifier:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: state_notifier
 | 
			
		||||
      sha256: b8677376aa54f2d7c58280d5a007f9e8774f1968d1fb1c096adcb4792fba29bb
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "1.0.0"
 | 
			
		||||
  stream_channel:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
@@ -168,6 +741,14 @@ packages:
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.1.4"
 | 
			
		||||
  stream_transform:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: stream_transform
 | 
			
		||||
      sha256: ad47125e588cfd37a9a7f86c7d6356dde8dfe89d071d293f80ca9e9273a33871
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.1.1"
 | 
			
		||||
  string_scanner:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
@@ -192,6 +773,38 @@ packages:
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "0.7.4"
 | 
			
		||||
  timing:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: timing
 | 
			
		||||
      sha256: "62ee18aca144e4a9f29d212f5a4c6a053be252b895ab14b5821996cff4ed90fe"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "1.0.2"
 | 
			
		||||
  typed_data:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: typed_data
 | 
			
		||||
      sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "1.4.0"
 | 
			
		||||
  universal_io:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: universal_io
 | 
			
		||||
      sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.2.2"
 | 
			
		||||
  uuid:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: uuid
 | 
			
		||||
      sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "4.5.1"
 | 
			
		||||
  vector_math:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
@@ -208,6 +821,62 @@ packages:
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "15.0.0"
 | 
			
		||||
  watcher:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: watcher
 | 
			
		||||
      sha256: "0b7fd4a0bbc4b92641dbf20adfd7e3fd1398fe17102d94b674234563e110088a"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "1.1.2"
 | 
			
		||||
  web:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: web
 | 
			
		||||
      sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "1.1.1"
 | 
			
		||||
  web_socket:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: web_socket
 | 
			
		||||
      sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "1.0.1"
 | 
			
		||||
  web_socket_channel:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: web_socket_channel
 | 
			
		||||
      sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "3.0.3"
 | 
			
		||||
  xdg_directories:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: xdg_directories
 | 
			
		||||
      sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "1.1.0"
 | 
			
		||||
  xml:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: xml
 | 
			
		||||
      sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "6.5.0"
 | 
			
		||||
  yaml:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: yaml
 | 
			
		||||
      sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "3.1.3"
 | 
			
		||||
sdks:
 | 
			
		||||
  dart: ">=3.8.1 <4.0.0"
 | 
			
		||||
  flutter: ">=3.18.0-18.0.pre.54"
 | 
			
		||||
  flutter: ">=3.27.0"
 | 
			
		||||
 
 | 
			
		||||
@@ -35,6 +35,22 @@ dependencies:
 | 
			
		||||
  # Use with the CupertinoIcons class for iOS style icons.
 | 
			
		||||
  cupertino_icons: ^1.0.8
 | 
			
		||||
 | 
			
		||||
  # Preferences management
 | 
			
		||||
  shared_preferences: ^2.5.3
 | 
			
		||||
 | 
			
		||||
  # Splash screen
 | 
			
		||||
  flutter_native_splash: ^2.4.6
 | 
			
		||||
 | 
			
		||||
  # A reactive caching and data-binding framework.
 | 
			
		||||
  hooks_riverpod: ^2.6.1
 | 
			
		||||
  riverpod_annotation: ^2.6.1
 | 
			
		||||
 | 
			
		||||
  # Implement React hooks in Flutter
 | 
			
		||||
  flutter_hooks: ^0.21.2
 | 
			
		||||
 | 
			
		||||
  # Router
 | 
			
		||||
  go_router: ^15.2.4
 | 
			
		||||
 | 
			
		||||
dev_dependencies:
 | 
			
		||||
  flutter_test:
 | 
			
		||||
    sdk: flutter
 | 
			
		||||
@@ -46,6 +62,12 @@ dev_dependencies:
 | 
			
		||||
  # rules and activating additional ones.
 | 
			
		||||
  flutter_lints: ^5.0.0
 | 
			
		||||
 | 
			
		||||
  # Generate source code
 | 
			
		||||
  build_runner: ^2.5.4
 | 
			
		||||
 | 
			
		||||
  # Riverpod code generation
 | 
			
		||||
  riverpod_generator: ^2.6.5
 | 
			
		||||
 | 
			
		||||
# For information on the generic Dart part of this file, see the
 | 
			
		||||
# following page: https://dart.dev/tools/pub/pubspec
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -5,14 +5,11 @@
 | 
			
		||||
// gestures. You can also use WidgetTester to find child widgets in the widget
 | 
			
		||||
// tree, read text, and verify that the values of widget properties are correct.
 | 
			
		||||
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
import 'package:flutter_test/flutter_test.dart';
 | 
			
		||||
 | 
			
		||||
import 'package:moneymgr_mobile/main.dart';
 | 
			
		||||
 | 
			
		||||
void main() {
 | 
			
		||||
  testWidgets('Counter increments smoke test', (WidgetTester tester) async {
 | 
			
		||||
    // Build our app and trigger a frame.
 | 
			
		||||
    /*// Build our app and trigger a frame.
 | 
			
		||||
    await tester.pumpWidget(const MyApp());
 | 
			
		||||
 | 
			
		||||
    // Verify that our counter starts at 0.
 | 
			
		||||
@@ -25,6 +22,6 @@ void main() {
 | 
			
		||||
 | 
			
		||||
    // Verify that our counter has incremented.
 | 
			
		||||
    expect(find.text('0'), findsNothing);
 | 
			
		||||
    expect(find.text('1'), findsOneWidget);
 | 
			
		||||
    expect(find.text('1'), findsOneWidget);*/
 | 
			
		||||
  });
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,4 @@
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html>
 | 
			
		||||
<head>
 | 
			
		||||
<!DOCTYPE html><html><head>
 | 
			
		||||
  <!--
 | 
			
		||||
    If you are serving your web app in a path other than the root, change the
 | 
			
		||||
    href value below to reflect the base path you are serving from.
 | 
			
		||||
@@ -27,12 +25,79 @@
 | 
			
		||||
  <link rel="apple-touch-icon" href="icons/Icon-192.png">
 | 
			
		||||
 | 
			
		||||
  <!-- Favicon -->
 | 
			
		||||
  <link rel="icon" type="image/png" href="favicon.png"/>
 | 
			
		||||
  <link rel="icon" type="image/png" href="favicon.png">
 | 
			
		||||
 | 
			
		||||
  <title>moneymgr_mobile</title>
 | 
			
		||||
  <link rel="manifest" href="manifest.json">
 | 
			
		||||
  <style id="splash-screen-style">
 | 
			
		||||
    html {
 | 
			
		||||
      height: 100%
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    body {
 | 
			
		||||
      margin: 0;
 | 
			
		||||
      min-height: 100%;
 | 
			
		||||
      background-color: #42a5f5;
 | 
			
		||||
          background-size: 100% 100%;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .center {
 | 
			
		||||
      margin: 0;
 | 
			
		||||
      position: absolute;
 | 
			
		||||
      top: 50%;
 | 
			
		||||
      left: 50%;
 | 
			
		||||
      -ms-transform: translate(-50%, -50%);
 | 
			
		||||
      transform: translate(-50%, -50%);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .contain {
 | 
			
		||||
      display:block;
 | 
			
		||||
      width:100%; height:100%;
 | 
			
		||||
      object-fit: contain;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .stretch {
 | 
			
		||||
      display:block;
 | 
			
		||||
      width:100%; height:100%;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .cover {
 | 
			
		||||
      display:block;
 | 
			
		||||
      width:100%; height:100%;
 | 
			
		||||
      object-fit: cover;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .bottom {
 | 
			
		||||
      position: absolute;
 | 
			
		||||
      bottom: 0;
 | 
			
		||||
      left: 50%;
 | 
			
		||||
      -ms-transform: translate(-50%, 0);
 | 
			
		||||
      transform: translate(-50%, 0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .bottomLeft {
 | 
			
		||||
      position: absolute;
 | 
			
		||||
      bottom: 0;
 | 
			
		||||
      left: 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .bottomRight {
 | 
			
		||||
      position: absolute;
 | 
			
		||||
      bottom: 0;
 | 
			
		||||
      right: 0;
 | 
			
		||||
    }
 | 
			
		||||
  </style>
 | 
			
		||||
  <script id="splash-screen-script">
 | 
			
		||||
    function removeSplashFromWeb() {
 | 
			
		||||
      document.getElementById("splash")?.remove();
 | 
			
		||||
      document.getElementById("splash-branding")?.remove();
 | 
			
		||||
      document.body.style.background = "transparent";
 | 
			
		||||
    }
 | 
			
		||||
  </script>
 | 
			
		||||
  <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" name="viewport">
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
  <script src="flutter_bootstrap.js" async></script>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
  <script src="flutter_bootstrap.js" async=""></script>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
</body></html>
 | 
			
		||||