🍱 Add app icon
✨ Multiple pages
			
			
| @@ -2,7 +2,7 @@ | |||||||
|     <application |     <application | ||||||
|         android:label="simple_math_calc" |         android:label="simple_math_calc" | ||||||
|         android:name="${applicationName}" |         android:name="${applicationName}" | ||||||
|         android:icon="@mipmap/ic_launcher"> |         android:icon="@mipmap/launcher_icon"> | ||||||
|         <activity |         <activity | ||||||
|             android:name=".MainActivity" |             android:name=".MainActivity" | ||||||
|             android:exported="true" |             android:exported="true" | ||||||
|   | |||||||
							
								
								
									
										
											BIN
										
									
								
								android/app/src/main/res/drawable-hdpi/splash.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 9.6 KiB | 
							
								
								
									
										
											BIN
										
									
								
								android/app/src/main/res/drawable-mdpi/splash.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 5.7 KiB | 
							
								
								
									
										
											BIN
										
									
								
								android/app/src/main/res/drawable-v21/background.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 69 B | 
| @@ -1,12 +1,9 @@ | |||||||
| <?xml version="1.0" encoding="utf-8"?> | <?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"> | <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> | ||||||
|     <item android:drawable="?android:colorBackground" /> |     <item> | ||||||
|  |         <bitmap android:gravity="fill" android:src="@drawable/background"/> | ||||||
|     <!-- You can insert your own image assets here --> |     </item> | ||||||
|     <!-- <item> |     <item> | ||||||
|         <bitmap |         <bitmap android:gravity="center" android:src="@drawable/splash"/> | ||||||
|             android:gravity="center" |     </item> | ||||||
|             android:src="@mipmap/launch_image" /> |  | ||||||
|     </item> --> |  | ||||||
| </layer-list> | </layer-list> | ||||||
|   | |||||||
							
								
								
									
										
											BIN
										
									
								
								android/app/src/main/res/drawable-xhdpi/splash.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 14 KiB | 
							
								
								
									
										
											BIN
										
									
								
								android/app/src/main/res/drawable-xxhdpi/splash.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 26 KiB | 
							
								
								
									
										
											BIN
										
									
								
								android/app/src/main/res/drawable-xxxhdpi/splash.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 40 KiB | 
							
								
								
									
										
											BIN
										
									
								
								android/app/src/main/res/drawable/background.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 69 B | 
| @@ -1,12 +1,9 @@ | |||||||
| <?xml version="1.0" encoding="utf-8"?> | <?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"> | <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> | ||||||
|     <item android:drawable="@android:color/white" /> |     <item> | ||||||
|  |         <bitmap android:gravity="fill" android:src="@drawable/background"/> | ||||||
|     <!-- You can insert your own image assets here --> |     </item> | ||||||
|     <!-- <item> |     <item> | ||||||
|         <bitmap |         <bitmap android:gravity="center" android:src="@drawable/splash"/> | ||||||
|             android:gravity="center" |     </item> | ||||||
|             android:src="@mipmap/launch_image" /> |  | ||||||
|     </item> --> |  | ||||||
| </layer-list> | </layer-list> | ||||||
|   | |||||||
							
								
								
									
										
											BIN
										
									
								
								android/app/src/main/res/mipmap-hdpi/launcher_icon.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 1.5 KiB | 
							
								
								
									
										
											BIN
										
									
								
								android/app/src/main/res/mipmap-mdpi/launcher_icon.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 995 B | 
							
								
								
									
										
											BIN
										
									
								
								android/app/src/main/res/mipmap-xhdpi/launcher_icon.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 2.1 KiB | 
							
								
								
									
										
											BIN
										
									
								
								android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 3.2 KiB | 
							
								
								
									
										
											BIN
										
									
								
								android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 4.3 KiB | 
							
								
								
									
										19
									
								
								android/app/src/main/res/values-night-v31/styles.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -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 |         <!-- Show a splash screen on the activity. Automatically removed when | ||||||
|              the Flutter engine draws its first frame --> |              the Flutter engine draws its first frame --> | ||||||
|         <item name="android:windowBackground">@drawable/launch_background</item> |         <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> |     </style> | ||||||
|     <!-- Theme applied to the Android Window as soon as the process has started. |     <!-- Theme applied to the Android Window as soon as the process has started. | ||||||
|          This theme determines the color of the Android Window while your |          This theme determines the color of the Android Window while your | ||||||
|   | |||||||
							
								
								
									
										19
									
								
								android/app/src/main/res/values-v31/styles.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -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 |         <!-- Show a splash screen on the activity. Automatically removed when | ||||||
|              the Flutter engine draws its first frame --> |              the Flutter engine draws its first frame --> | ||||||
|         <item name="android:windowBackground">@drawable/launch_background</item> |         <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> |     </style> | ||||||
|     <!-- Theme applied to the Android Window as soon as the process has started. |     <!-- Theme applied to the Android Window as soon as the process has started. | ||||||
|          This theme determines the color of the Android Window while your |          This theme determines the color of the Android Window while your | ||||||
|   | |||||||
							
								
								
									
										
											BIN
										
									
								
								assets/icon.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 74 KiB | 
							
								
								
									
										29
									
								
								ios/Podfile.lock
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,29 @@ | |||||||
|  | PODS: | ||||||
|  |   - Flutter (1.0.0) | ||||||
|  |   - flutter_native_splash (2.4.3): | ||||||
|  |     - Flutter | ||||||
|  |   - path_provider_foundation (0.0.1): | ||||||
|  |     - Flutter | ||||||
|  |     - FlutterMacOS | ||||||
|  |  | ||||||
|  | DEPENDENCIES: | ||||||
|  |   - Flutter (from `Flutter`) | ||||||
|  |   - flutter_native_splash (from `.symlinks/plugins/flutter_native_splash/ios`) | ||||||
|  |   - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) | ||||||
|  |  | ||||||
|  | EXTERNAL SOURCES: | ||||||
|  |   Flutter: | ||||||
|  |     :path: Flutter | ||||||
|  |   flutter_native_splash: | ||||||
|  |     :path: ".symlinks/plugins/flutter_native_splash/ios" | ||||||
|  |   path_provider_foundation: | ||||||
|  |     :path: ".symlinks/plugins/path_provider_foundation/darwin" | ||||||
|  |  | ||||||
|  | SPEC CHECKSUMS: | ||||||
|  |   Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467 | ||||||
|  |   flutter_native_splash: c32d145d68aeda5502d5f543ee38c192065986cf | ||||||
|  |   path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564 | ||||||
|  |  | ||||||
|  | PODFILE CHECKSUM: 3c63482e143d1b91d2d2560aee9fb04ecc74ac7e | ||||||
|  |  | ||||||
|  | COCOAPODS: 1.16.2 | ||||||
| @@ -8,12 +8,14 @@ | |||||||
|  |  | ||||||
| /* Begin PBXBuildFile section */ | /* Begin PBXBuildFile section */ | ||||||
| 		1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; | 		1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; | ||||||
|  | 		192251534B553BDFE245A7A6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 62F0BECE6836CAFF14202A0F /* Pods_Runner.framework */; }; | ||||||
| 		331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; | 		331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; | ||||||
| 		3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; | 		3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; | ||||||
| 		74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; | 		74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; | ||||||
| 		97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; | 		97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; | ||||||
| 		97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; | 		97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; | ||||||
| 		97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; | 		97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; | ||||||
|  | 		F397DB814CC59F7F60396679 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D569FF139660C03C66DAF3F /* Pods_RunnerTests.framework */; }; | ||||||
| /* End PBXBuildFile section */ | /* End PBXBuildFile section */ | ||||||
|  |  | ||||||
| /* Begin PBXContainerItemProxy section */ | /* Begin PBXContainerItemProxy section */ | ||||||
| @@ -42,9 +44,14 @@ | |||||||
| /* Begin PBXFileReference section */ | /* Begin PBXFileReference section */ | ||||||
| 		1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; }; | 		1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; }; | ||||||
| 		1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; }; | 		1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; }; | ||||||
|  | 		14EA99134C948AD659698B12 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; }; | ||||||
| 		331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = "<group>"; }; | 		331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = "<group>"; }; | ||||||
| 		331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; | 		331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; | ||||||
| 		3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; }; | 		3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; }; | ||||||
|  | 		4766296653CC7F86E4FDF96E /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; }; | ||||||
|  | 		4C1CC5F96EC4EED144160B64 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; }; | ||||||
|  | 		62F0BECE6836CAFF14202A0F /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; | ||||||
|  | 		6D569FF139660C03C66DAF3F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; | ||||||
| 		74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; }; | 		74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; }; | ||||||
| 		74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; }; | 		74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; }; | ||||||
| 		7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; }; | 		7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; }; | ||||||
| @@ -55,6 +62,9 @@ | |||||||
| 		97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; }; | 		97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; }; | ||||||
| 		97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; }; | 		97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; }; | ||||||
| 		97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; | 		97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; | ||||||
|  | 		BAC0E182EE058A579F8BAF8B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = "<group>"; }; | ||||||
|  | 		D2325C3115042CB4C1A30C20 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = "<group>"; }; | ||||||
|  | 		EA2DD3AF98ED146A30B33E80 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = "<group>"; }; | ||||||
| /* End PBXFileReference section */ | /* End PBXFileReference section */ | ||||||
|  |  | ||||||
| /* Begin PBXFrameworksBuildPhase section */ | /* Begin PBXFrameworksBuildPhase section */ | ||||||
| @@ -62,12 +72,35 @@ | |||||||
| 			isa = PBXFrameworksBuildPhase; | 			isa = PBXFrameworksBuildPhase; | ||||||
| 			buildActionMask = 2147483647; | 			buildActionMask = 2147483647; | ||||||
| 			files = ( | 			files = ( | ||||||
|  | 				192251534B553BDFE245A7A6 /* Pods_Runner.framework in Frameworks */, | ||||||
|  | 			); | ||||||
|  | 			runOnlyForDeploymentPostprocessing = 0; | ||||||
|  | 		}; | ||||||
|  | 		C67D59264A6B91E04EE0D429 /* Frameworks */ = { | ||||||
|  | 			isa = PBXFrameworksBuildPhase; | ||||||
|  | 			buildActionMask = 2147483647; | ||||||
|  | 			files = ( | ||||||
|  | 				F397DB814CC59F7F60396679 /* Pods_RunnerTests.framework in Frameworks */, | ||||||
| 			); | 			); | ||||||
| 			runOnlyForDeploymentPostprocessing = 0; | 			runOnlyForDeploymentPostprocessing = 0; | ||||||
| 		}; | 		}; | ||||||
| /* End PBXFrameworksBuildPhase section */ | /* End PBXFrameworksBuildPhase section */ | ||||||
|  |  | ||||||
| /* Begin PBXGroup section */ | /* Begin PBXGroup section */ | ||||||
|  | 		0D5FE6B3751F204B53864ADD /* Pods */ = { | ||||||
|  | 			isa = PBXGroup; | ||||||
|  | 			children = ( | ||||||
|  | 				4C1CC5F96EC4EED144160B64 /* Pods-Runner.debug.xcconfig */, | ||||||
|  | 				4766296653CC7F86E4FDF96E /* Pods-Runner.release.xcconfig */, | ||||||
|  | 				14EA99134C948AD659698B12 /* Pods-Runner.profile.xcconfig */, | ||||||
|  | 				D2325C3115042CB4C1A30C20 /* Pods-RunnerTests.debug.xcconfig */, | ||||||
|  | 				EA2DD3AF98ED146A30B33E80 /* Pods-RunnerTests.release.xcconfig */, | ||||||
|  | 				BAC0E182EE058A579F8BAF8B /* Pods-RunnerTests.profile.xcconfig */, | ||||||
|  | 			); | ||||||
|  | 			name = Pods; | ||||||
|  | 			path = Pods; | ||||||
|  | 			sourceTree = "<group>"; | ||||||
|  | 		}; | ||||||
| 		331C8082294A63A400263BE5 /* RunnerTests */ = { | 		331C8082294A63A400263BE5 /* RunnerTests */ = { | ||||||
| 			isa = PBXGroup; | 			isa = PBXGroup; | ||||||
| 			children = ( | 			children = ( | ||||||
| @@ -76,6 +109,15 @@ | |||||||
| 			path = RunnerTests; | 			path = RunnerTests; | ||||||
| 			sourceTree = "<group>"; | 			sourceTree = "<group>"; | ||||||
| 		}; | 		}; | ||||||
|  | 		7DB90303BBE910826075E857 /* Frameworks */ = { | ||||||
|  | 			isa = PBXGroup; | ||||||
|  | 			children = ( | ||||||
|  | 				62F0BECE6836CAFF14202A0F /* Pods_Runner.framework */, | ||||||
|  | 				6D569FF139660C03C66DAF3F /* Pods_RunnerTests.framework */, | ||||||
|  | 			); | ||||||
|  | 			name = Frameworks; | ||||||
|  | 			sourceTree = "<group>"; | ||||||
|  | 		}; | ||||||
| 		9740EEB11CF90186004384FC /* Flutter */ = { | 		9740EEB11CF90186004384FC /* Flutter */ = { | ||||||
| 			isa = PBXGroup; | 			isa = PBXGroup; | ||||||
| 			children = ( | 			children = ( | ||||||
| @@ -94,6 +136,8 @@ | |||||||
| 				97C146F01CF9000F007C117D /* Runner */, | 				97C146F01CF9000F007C117D /* Runner */, | ||||||
| 				97C146EF1CF9000F007C117D /* Products */, | 				97C146EF1CF9000F007C117D /* Products */, | ||||||
| 				331C8082294A63A400263BE5 /* RunnerTests */, | 				331C8082294A63A400263BE5 /* RunnerTests */, | ||||||
|  | 				0D5FE6B3751F204B53864ADD /* Pods */, | ||||||
|  | 				7DB90303BBE910826075E857 /* Frameworks */, | ||||||
| 			); | 			); | ||||||
| 			sourceTree = "<group>"; | 			sourceTree = "<group>"; | ||||||
| 		}; | 		}; | ||||||
| @@ -128,8 +172,10 @@ | |||||||
| 			isa = PBXNativeTarget; | 			isa = PBXNativeTarget; | ||||||
| 			buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; | 			buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; | ||||||
| 			buildPhases = ( | 			buildPhases = ( | ||||||
|  | 				AA03816EC30BB68E2A727AC7 /* [CP] Check Pods Manifest.lock */, | ||||||
| 				331C807D294A63A400263BE5 /* Sources */, | 				331C807D294A63A400263BE5 /* Sources */, | ||||||
| 				331C807F294A63A400263BE5 /* Resources */, | 				331C807F294A63A400263BE5 /* Resources */, | ||||||
|  | 				C67D59264A6B91E04EE0D429 /* Frameworks */, | ||||||
| 			); | 			); | ||||||
| 			buildRules = ( | 			buildRules = ( | ||||||
| 			); | 			); | ||||||
| @@ -145,12 +191,14 @@ | |||||||
| 			isa = PBXNativeTarget; | 			isa = PBXNativeTarget; | ||||||
| 			buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; | 			buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; | ||||||
| 			buildPhases = ( | 			buildPhases = ( | ||||||
|  | 				9A125E927908EE0DB6561956 /* [CP] Check Pods Manifest.lock */, | ||||||
| 				9740EEB61CF901F6004384FC /* Run Script */, | 				9740EEB61CF901F6004384FC /* Run Script */, | ||||||
| 				97C146EA1CF9000F007C117D /* Sources */, | 				97C146EA1CF9000F007C117D /* Sources */, | ||||||
| 				97C146EB1CF9000F007C117D /* Frameworks */, | 				97C146EB1CF9000F007C117D /* Frameworks */, | ||||||
| 				97C146EC1CF9000F007C117D /* Resources */, | 				97C146EC1CF9000F007C117D /* Resources */, | ||||||
| 				9705A1C41CF9048500538489 /* Embed Frameworks */, | 				9705A1C41CF9048500538489 /* Embed Frameworks */, | ||||||
| 				3B06AD1E1E4923F5004D2608 /* Thin Binary */, | 				3B06AD1E1E4923F5004D2608 /* Thin Binary */, | ||||||
|  | 				837BB4DB550AC6AACB7F8212 /* [CP] Embed Pods Frameworks */, | ||||||
| 			); | 			); | ||||||
| 			buildRules = ( | 			buildRules = ( | ||||||
| 			); | 			); | ||||||
| @@ -238,6 +286,23 @@ | |||||||
| 			shellPath = /bin/sh; | 			shellPath = /bin/sh; | ||||||
| 			shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; | 			shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; | ||||||
| 		}; | 		}; | ||||||
|  | 		837BB4DB550AC6AACB7F8212 /* [CP] Embed Pods Frameworks */ = { | ||||||
|  | 			isa = PBXShellScriptBuildPhase; | ||||||
|  | 			buildActionMask = 2147483647; | ||||||
|  | 			files = ( | ||||||
|  | 			); | ||||||
|  | 			inputFileListPaths = ( | ||||||
|  | 				"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", | ||||||
|  | 			); | ||||||
|  | 			name = "[CP] Embed Pods Frameworks"; | ||||||
|  | 			outputFileListPaths = ( | ||||||
|  | 				"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", | ||||||
|  | 			); | ||||||
|  | 			runOnlyForDeploymentPostprocessing = 0; | ||||||
|  | 			shellPath = /bin/sh; | ||||||
|  | 			shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; | ||||||
|  | 			showEnvVarsInLog = 0; | ||||||
|  | 		}; | ||||||
| 		9740EEB61CF901F6004384FC /* Run Script */ = { | 		9740EEB61CF901F6004384FC /* Run Script */ = { | ||||||
| 			isa = PBXShellScriptBuildPhase; | 			isa = PBXShellScriptBuildPhase; | ||||||
| 			alwaysOutOfDate = 1; | 			alwaysOutOfDate = 1; | ||||||
| @@ -253,6 +318,50 @@ | |||||||
| 			shellPath = /bin/sh; | 			shellPath = /bin/sh; | ||||||
| 			shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; | 			shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; | ||||||
| 		}; | 		}; | ||||||
|  | 		9A125E927908EE0DB6561956 /* [CP] Check Pods Manifest.lock */ = { | ||||||
|  | 			isa = PBXShellScriptBuildPhase; | ||||||
|  | 			buildActionMask = 2147483647; | ||||||
|  | 			files = ( | ||||||
|  | 			); | ||||||
|  | 			inputFileListPaths = ( | ||||||
|  | 			); | ||||||
|  | 			inputPaths = ( | ||||||
|  | 				"${PODS_PODFILE_DIR_PATH}/Podfile.lock", | ||||||
|  | 				"${PODS_ROOT}/Manifest.lock", | ||||||
|  | 			); | ||||||
|  | 			name = "[CP] Check Pods Manifest.lock"; | ||||||
|  | 			outputFileListPaths = ( | ||||||
|  | 			); | ||||||
|  | 			outputPaths = ( | ||||||
|  | 				"$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", | ||||||
|  | 			); | ||||||
|  | 			runOnlyForDeploymentPostprocessing = 0; | ||||||
|  | 			shellPath = /bin/sh; | ||||||
|  | 			shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n    # print error to STDERR\n    echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n    exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; | ||||||
|  | 			showEnvVarsInLog = 0; | ||||||
|  | 		}; | ||||||
|  | 		AA03816EC30BB68E2A727AC7 /* [CP] Check Pods Manifest.lock */ = { | ||||||
|  | 			isa = PBXShellScriptBuildPhase; | ||||||
|  | 			buildActionMask = 2147483647; | ||||||
|  | 			files = ( | ||||||
|  | 			); | ||||||
|  | 			inputFileListPaths = ( | ||||||
|  | 			); | ||||||
|  | 			inputPaths = ( | ||||||
|  | 				"${PODS_PODFILE_DIR_PATH}/Podfile.lock", | ||||||
|  | 				"${PODS_ROOT}/Manifest.lock", | ||||||
|  | 			); | ||||||
|  | 			name = "[CP] Check Pods Manifest.lock"; | ||||||
|  | 			outputFileListPaths = ( | ||||||
|  | 			); | ||||||
|  | 			outputPaths = ( | ||||||
|  | 				"$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", | ||||||
|  | 			); | ||||||
|  | 			runOnlyForDeploymentPostprocessing = 0; | ||||||
|  | 			shellPath = /bin/sh; | ||||||
|  | 			shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n    # print error to STDERR\n    echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n    exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; | ||||||
|  | 			showEnvVarsInLog = 0; | ||||||
|  | 		}; | ||||||
| /* End PBXShellScriptBuildPhase section */ | /* End PBXShellScriptBuildPhase section */ | ||||||
|  |  | ||||||
| /* Begin PBXSourcesBuildPhase section */ | /* Begin PBXSourcesBuildPhase section */ | ||||||
| @@ -379,6 +488,7 @@ | |||||||
| 		}; | 		}; | ||||||
| 		331C8088294A63A400263BE5 /* Debug */ = { | 		331C8088294A63A400263BE5 /* Debug */ = { | ||||||
| 			isa = XCBuildConfiguration; | 			isa = XCBuildConfiguration; | ||||||
|  | 			baseConfigurationReference = D2325C3115042CB4C1A30C20 /* Pods-RunnerTests.debug.xcconfig */; | ||||||
| 			buildSettings = { | 			buildSettings = { | ||||||
| 				BUNDLE_LOADER = "$(TEST_HOST)"; | 				BUNDLE_LOADER = "$(TEST_HOST)"; | ||||||
| 				CODE_SIGN_STYLE = Automatic; | 				CODE_SIGN_STYLE = Automatic; | ||||||
| @@ -396,6 +506,7 @@ | |||||||
| 		}; | 		}; | ||||||
| 		331C8089294A63A400263BE5 /* Release */ = { | 		331C8089294A63A400263BE5 /* Release */ = { | ||||||
| 			isa = XCBuildConfiguration; | 			isa = XCBuildConfiguration; | ||||||
|  | 			baseConfigurationReference = EA2DD3AF98ED146A30B33E80 /* Pods-RunnerTests.release.xcconfig */; | ||||||
| 			buildSettings = { | 			buildSettings = { | ||||||
| 				BUNDLE_LOADER = "$(TEST_HOST)"; | 				BUNDLE_LOADER = "$(TEST_HOST)"; | ||||||
| 				CODE_SIGN_STYLE = Automatic; | 				CODE_SIGN_STYLE = Automatic; | ||||||
| @@ -411,6 +522,7 @@ | |||||||
| 		}; | 		}; | ||||||
| 		331C808A294A63A400263BE5 /* Profile */ = { | 		331C808A294A63A400263BE5 /* Profile */ = { | ||||||
| 			isa = XCBuildConfiguration; | 			isa = XCBuildConfiguration; | ||||||
|  | 			baseConfigurationReference = BAC0E182EE058A579F8BAF8B /* Pods-RunnerTests.profile.xcconfig */; | ||||||
| 			buildSettings = { | 			buildSettings = { | ||||||
| 				BUNDLE_LOADER = "$(TEST_HOST)"; | 				BUNDLE_LOADER = "$(TEST_HOST)"; | ||||||
| 				CODE_SIGN_STYLE = Automatic; | 				CODE_SIGN_STYLE = Automatic; | ||||||
| @@ -428,7 +540,7 @@ | |||||||
| 			isa = XCBuildConfiguration; | 			isa = XCBuildConfiguration; | ||||||
| 			buildSettings = { | 			buildSettings = { | ||||||
| 				ALWAYS_SEARCH_USER_PATHS = NO; | 				ALWAYS_SEARCH_USER_PATHS = NO; | ||||||
| 				ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; | 				ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon; | ||||||
| 				CLANG_ANALYZER_NONNULL = YES; | 				CLANG_ANALYZER_NONNULL = YES; | ||||||
| 				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; | 				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; | ||||||
| 				CLANG_CXX_LIBRARY = "libc++"; | 				CLANG_CXX_LIBRARY = "libc++"; | ||||||
| @@ -485,7 +597,7 @@ | |||||||
| 			isa = XCBuildConfiguration; | 			isa = XCBuildConfiguration; | ||||||
| 			buildSettings = { | 			buildSettings = { | ||||||
| 				ALWAYS_SEARCH_USER_PATHS = NO; | 				ALWAYS_SEARCH_USER_PATHS = NO; | ||||||
| 				ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; | 				ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon; | ||||||
| 				CLANG_ANALYZER_NONNULL = YES; | 				CLANG_ANALYZER_NONNULL = YES; | ||||||
| 				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; | 				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; | ||||||
| 				CLANG_CXX_LIBRARY = "libc++"; | 				CLANG_CXX_LIBRARY = "libc++"; | ||||||
|   | |||||||
							
								
								
									
										3
									
								
								ios/Runner.xcworkspace/contents.xcworkspacedata
									
									
									
										generated
									
									
									
								
							
							
						
						| @@ -4,4 +4,7 @@ | |||||||
|    <FileRef |    <FileRef | ||||||
|       location = "group:Runner.xcodeproj"> |       location = "group:Runner.xcodeproj"> | ||||||
|    </FileRef> |    </FileRef> | ||||||
|  |    <FileRef | ||||||
|  |       location = "group:Pods/Pods.xcodeproj"> | ||||||
|  |    </FileRef> | ||||||
| </Workspace> | </Workspace> | ||||||
|   | |||||||
| @@ -1,122 +1 @@ | |||||||
| { | {"images":[{"size":"20x20","idiom":"iphone","filename":"Icon-App-20x20@2x.png","scale":"2x"},{"size":"20x20","idiom":"iphone","filename":"Icon-App-20x20@3x.png","scale":"3x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@2x.png","scale":"2x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@3x.png","scale":"3x"},{"size":"40x40","idiom":"iphone","filename":"Icon-App-40x40@2x.png","scale":"2x"},{"size":"40x40","idiom":"iphone","filename":"Icon-App-40x40@3x.png","scale":"3x"},{"size":"57x57","idiom":"iphone","filename":"Icon-App-57x57@1x.png","scale":"1x"},{"size":"57x57","idiom":"iphone","filename":"Icon-App-57x57@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"Icon-App-60x60@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"Icon-App-60x60@3x.png","scale":"3x"},{"size":"20x20","idiom":"ipad","filename":"Icon-App-20x20@1x.png","scale":"1x"},{"size":"20x20","idiom":"ipad","filename":"Icon-App-20x20@2x.png","scale":"2x"},{"size":"29x29","idiom":"ipad","filename":"Icon-App-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"ipad","filename":"Icon-App-29x29@2x.png","scale":"2x"},{"size":"40x40","idiom":"ipad","filename":"Icon-App-40x40@1x.png","scale":"1x"},{"size":"40x40","idiom":"ipad","filename":"Icon-App-40x40@2x.png","scale":"2x"},{"size":"50x50","idiom":"ipad","filename":"Icon-App-50x50@1x.png","scale":"1x"},{"size":"50x50","idiom":"ipad","filename":"Icon-App-50x50@2x.png","scale":"2x"},{"size":"72x72","idiom":"ipad","filename":"Icon-App-72x72@1x.png","scale":"1x"},{"size":"72x72","idiom":"ipad","filename":"Icon-App-72x72@2x.png","scale":"2x"},{"size":"76x76","idiom":"ipad","filename":"Icon-App-76x76@1x.png","scale":"1x"},{"size":"76x76","idiom":"ipad","filename":"Icon-App-76x76@2x.png","scale":"2x"},{"size":"83.5x83.5","idiom":"ipad","filename":"Icon-App-83.5x83.5@2x.png","scale":"2x"},{"size":"1024x1024","idiom":"ios-marketing","filename":"Icon-App-1024x1024@1x.png","scale":"1x"}],"info":{"version":1,"author":"xcode"}} | ||||||
|   "images" : [ |  | ||||||
|     { |  | ||||||
|       "size" : "20x20", |  | ||||||
|       "idiom" : "iphone", |  | ||||||
|       "filename" : "Icon-App-20x20@2x.png", |  | ||||||
|       "scale" : "2x" |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|       "size" : "20x20", |  | ||||||
|       "idiom" : "iphone", |  | ||||||
|       "filename" : "Icon-App-20x20@3x.png", |  | ||||||
|       "scale" : "3x" |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|       "size" : "29x29", |  | ||||||
|       "idiom" : "iphone", |  | ||||||
|       "filename" : "Icon-App-29x29@1x.png", |  | ||||||
|       "scale" : "1x" |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|       "size" : "29x29", |  | ||||||
|       "idiom" : "iphone", |  | ||||||
|       "filename" : "Icon-App-29x29@2x.png", |  | ||||||
|       "scale" : "2x" |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|       "size" : "29x29", |  | ||||||
|       "idiom" : "iphone", |  | ||||||
|       "filename" : "Icon-App-29x29@3x.png", |  | ||||||
|       "scale" : "3x" |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|       "size" : "40x40", |  | ||||||
|       "idiom" : "iphone", |  | ||||||
|       "filename" : "Icon-App-40x40@2x.png", |  | ||||||
|       "scale" : "2x" |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|       "size" : "40x40", |  | ||||||
|       "idiom" : "iphone", |  | ||||||
|       "filename" : "Icon-App-40x40@3x.png", |  | ||||||
|       "scale" : "3x" |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|       "size" : "60x60", |  | ||||||
|       "idiom" : "iphone", |  | ||||||
|       "filename" : "Icon-App-60x60@2x.png", |  | ||||||
|       "scale" : "2x" |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|       "size" : "60x60", |  | ||||||
|       "idiom" : "iphone", |  | ||||||
|       "filename" : "Icon-App-60x60@3x.png", |  | ||||||
|       "scale" : "3x" |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|       "size" : "20x20", |  | ||||||
|       "idiom" : "ipad", |  | ||||||
|       "filename" : "Icon-App-20x20@1x.png", |  | ||||||
|       "scale" : "1x" |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|       "size" : "20x20", |  | ||||||
|       "idiom" : "ipad", |  | ||||||
|       "filename" : "Icon-App-20x20@2x.png", |  | ||||||
|       "scale" : "2x" |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|       "size" : "29x29", |  | ||||||
|       "idiom" : "ipad", |  | ||||||
|       "filename" : "Icon-App-29x29@1x.png", |  | ||||||
|       "scale" : "1x" |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|       "size" : "29x29", |  | ||||||
|       "idiom" : "ipad", |  | ||||||
|       "filename" : "Icon-App-29x29@2x.png", |  | ||||||
|       "scale" : "2x" |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|       "size" : "40x40", |  | ||||||
|       "idiom" : "ipad", |  | ||||||
|       "filename" : "Icon-App-40x40@1x.png", |  | ||||||
|       "scale" : "1x" |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|       "size" : "40x40", |  | ||||||
|       "idiom" : "ipad", |  | ||||||
|       "filename" : "Icon-App-40x40@2x.png", |  | ||||||
|       "scale" : "2x" |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|       "size" : "76x76", |  | ||||||
|       "idiom" : "ipad", |  | ||||||
|       "filename" : "Icon-App-76x76@1x.png", |  | ||||||
|       "scale" : "1x" |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|       "size" : "76x76", |  | ||||||
|       "idiom" : "ipad", |  | ||||||
|       "filename" : "Icon-App-76x76@2x.png", |  | ||||||
|       "scale" : "2x" |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|       "size" : "83.5x83.5", |  | ||||||
|       "idiom" : "ipad", |  | ||||||
|       "filename" : "Icon-App-83.5x83.5@2x.png", |  | ||||||
|       "scale" : "2x" |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|       "size" : "1024x1024", |  | ||||||
|       "idiom" : "ios-marketing", |  | ||||||
|       "filename" : "Icon-App-1024x1024@1x.png", |  | ||||||
|       "scale" : "1x" |  | ||||||
|     } |  | ||||||
|   ], |  | ||||||
|   "info" : { |  | ||||||
|     "version" : 1, |  | ||||||
|     "author" : "xcode" |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 40 KiB | 
| Before Width: | Height: | Size: 295 B After Width: | Height: | Size: 354 B | 
| Before Width: | Height: | Size: 406 B After Width: | Height: | Size: 804 B | 
| Before Width: | Height: | Size: 450 B After Width: | Height: | Size: 1.3 KiB | 
| Before Width: | Height: | Size: 282 B After Width: | Height: | Size: 568 B | 
| Before Width: | Height: | Size: 462 B After Width: | Height: | Size: 1.2 KiB | 
| Before Width: | Height: | Size: 704 B After Width: | Height: | Size: 1.9 KiB | 
| Before Width: | Height: | Size: 406 B After Width: | Height: | Size: 804 B | 
| Before Width: | Height: | Size: 586 B After Width: | Height: | Size: 1.7 KiB | 
| Before Width: | Height: | Size: 862 B After Width: | Height: | Size: 2.7 KiB | 
| After Width: | Height: | Size: 1.0 KiB | 
| After Width: | Height: | Size: 2.2 KiB | 
| After Width: | Height: | Size: 1.2 KiB | 
| After Width: | Height: | Size: 2.5 KiB | 
| Before Width: | Height: | Size: 862 B After Width: | Height: | Size: 2.7 KiB | 
| Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 4.1 KiB | 
| After Width: | Height: | Size: 1.5 KiB | 
| After Width: | Height: | Size: 3.2 KiB | 
| Before Width: | Height: | Size: 762 B After Width: | Height: | Size: 1.6 KiB | 
| Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 3.3 KiB | 
| Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 3.7 KiB | 
							
								
								
									
										21
									
								
								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
										
									
								
								ios/Runner/Assets.xcassets/LaunchBackground.imageset/background.png
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 69 B | 
| @@ -1,23 +1,23 @@ | |||||||
| { | { | ||||||
|   "images" : [ |   "images" : [ | ||||||
|     { |     { | ||||||
|       "idiom" : "universal", |  | ||||||
|       "filename" : "LaunchImage.png", |       "filename" : "LaunchImage.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|       "scale" : "1x" |       "scale" : "1x" | ||||||
|     }, |     }, | ||||||
|     { |     { | ||||||
|       "idiom" : "universal", |  | ||||||
|       "filename" : "LaunchImage@2x.png", |       "filename" : "LaunchImage@2x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|       "scale" : "2x" |       "scale" : "2x" | ||||||
|     }, |     }, | ||||||
|     { |     { | ||||||
|       "idiom" : "universal", |  | ||||||
|       "filename" : "LaunchImage@3x.png", |       "filename" : "LaunchImage@3x.png", | ||||||
|  |       "idiom" : "universal", | ||||||
|       "scale" : "3x" |       "scale" : "3x" | ||||||
|     } |     } | ||||||
|   ], |   ], | ||||||
|   "info" : { |   "info" : { | ||||||
|     "version" : 1, |     "author" : "xcode", | ||||||
|     "author" : "xcode" |     "version" : 1 | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
| Before Width: | Height: | Size: 68 B After Width: | Height: | Size: 5.7 KiB | 
| Before Width: | Height: | Size: 68 B After Width: | Height: | Size: 14 KiB | 
| Before Width: | Height: | Size: 68 B After Width: | Height: | Size: 26 KiB | 
| @@ -16,13 +16,19 @@ | |||||||
|                     <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3"> |                     <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3"> | ||||||
|                         <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> |                         <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> | ||||||
|                         <subviews> |                         <subviews> | ||||||
|                             <imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" image="LaunchImage" translatesAutoresizingMaskIntoConstraints="NO" id="YRO-k0-Ey4"> |                             <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" image="LaunchBackground" translatesAutoresizingMaskIntoConstraints="NO" id="tWc-Dq-wcI"/> | ||||||
|                             </imageView> |                             <imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" image="LaunchImage" translatesAutoresizingMaskIntoConstraints="NO" id="YRO-k0-Ey4"></imageView> | ||||||
|                         </subviews> |                         </subviews> | ||||||
|                         <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |                         <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> | ||||||
|                         <constraints> |                         <constraints> | ||||||
|                             <constraint firstItem="YRO-k0-Ey4" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="1a2-6s-vTC"/> |                             <constraint firstItem="YRO-k0-Ey4" firstAttribute="leading" secondItem="Ze5-6b-2t3" secondAttribute="leading" id="3T2-ad-Qdv"/> | ||||||
|                             <constraint firstItem="YRO-k0-Ey4" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" id="4X2-HB-R7a"/> |                             <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> |                         </constraints> | ||||||
|                     </view> |                     </view> | ||||||
|                 </viewController> |                 </viewController> | ||||||
| @@ -32,6 +38,7 @@ | |||||||
|         </scene> |         </scene> | ||||||
|     </scenes> |     </scenes> | ||||||
|     <resources> |     <resources> | ||||||
|         <image name="LaunchImage" width="168" height="185"/> |         <image name="LaunchImage" width="1024" height="1024"/> | ||||||
|  |         <image name="LaunchBackground" width="1" height="1"/> | ||||||
|     </resources> |     </resources> | ||||||
| </document> | </document> | ||||||
|   | |||||||
| @@ -1,49 +1,51 @@ | |||||||
| <?xml version="1.0" encoding="UTF-8"?> | <?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"> | <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||||||
| <plist version="1.0"> | <plist version="1.0"> | ||||||
| <dict> | 	<dict> | ||||||
| 	<key>CFBundleDevelopmentRegion</key> | 		<key>CFBundleDevelopmentRegion</key> | ||||||
| 	<string>$(DEVELOPMENT_LANGUAGE)</string> | 		<string>$(DEVELOPMENT_LANGUAGE)</string> | ||||||
| 	<key>CFBundleDisplayName</key> | 		<key>CFBundleDisplayName</key> | ||||||
| 	<string>Simple Math Calc</string> | 		<string>Simple Math Calc</string> | ||||||
| 	<key>CFBundleExecutable</key> | 		<key>CFBundleExecutable</key> | ||||||
| 	<string>$(EXECUTABLE_NAME)</string> | 		<string>$(EXECUTABLE_NAME)</string> | ||||||
| 	<key>CFBundleIdentifier</key> | 		<key>CFBundleIdentifier</key> | ||||||
| 	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> | 		<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> | ||||||
| 	<key>CFBundleInfoDictionaryVersion</key> | 		<key>CFBundleInfoDictionaryVersion</key> | ||||||
| 	<string>6.0</string> | 		<string>6.0</string> | ||||||
| 	<key>CFBundleName</key> | 		<key>CFBundleName</key> | ||||||
| 	<string>simple_math_calc</string> | 		<string>simple_math_calc</string> | ||||||
| 	<key>CFBundlePackageType</key> | 		<key>CFBundlePackageType</key> | ||||||
| 	<string>APPL</string> | 		<string>APPL</string> | ||||||
| 	<key>CFBundleShortVersionString</key> | 		<key>CFBundleShortVersionString</key> | ||||||
| 	<string>$(FLUTTER_BUILD_NAME)</string> | 		<string>$(FLUTTER_BUILD_NAME)</string> | ||||||
| 	<key>CFBundleSignature</key> | 		<key>CFBundleSignature</key> | ||||||
| 	<string>????</string> | 		<string>????</string> | ||||||
| 	<key>CFBundleVersion</key> | 		<key>CFBundleVersion</key> | ||||||
| 	<string>$(FLUTTER_BUILD_NUMBER)</string> | 		<string>$(FLUTTER_BUILD_NUMBER)</string> | ||||||
| 	<key>LSRequiresIPhoneOS</key> | 		<key>LSRequiresIPhoneOS</key> | ||||||
| 	<true/> | 		<true/> | ||||||
| 	<key>UILaunchStoryboardName</key> | 		<key>UILaunchStoryboardName</key> | ||||||
| 	<string>LaunchScreen</string> | 		<string>LaunchScreen</string> | ||||||
| 	<key>UIMainStoryboardFile</key> | 		<key>UIMainStoryboardFile</key> | ||||||
| 	<string>Main</string> | 		<string>Main</string> | ||||||
| 	<key>UISupportedInterfaceOrientations</key> | 		<key>UISupportedInterfaceOrientations</key> | ||||||
| 	<array> | 		<array> | ||||||
| 		<string>UIInterfaceOrientationPortrait</string> | 			<string>UIInterfaceOrientationPortrait</string> | ||||||
| 		<string>UIInterfaceOrientationLandscapeLeft</string> | 			<string>UIInterfaceOrientationLandscapeLeft</string> | ||||||
| 		<string>UIInterfaceOrientationLandscapeRight</string> | 			<string>UIInterfaceOrientationLandscapeRight</string> | ||||||
| 	</array> | 		</array> | ||||||
| 	<key>UISupportedInterfaceOrientations~ipad</key> | 		<key>UISupportedInterfaceOrientations~ipad</key> | ||||||
| 	<array> | 		<array> | ||||||
| 		<string>UIInterfaceOrientationPortrait</string> | 			<string>UIInterfaceOrientationPortrait</string> | ||||||
| 		<string>UIInterfaceOrientationPortraitUpsideDown</string> | 			<string>UIInterfaceOrientationPortraitUpsideDown</string> | ||||||
| 		<string>UIInterfaceOrientationLandscapeLeft</string> | 			<string>UIInterfaceOrientationLandscapeLeft</string> | ||||||
| 		<string>UIInterfaceOrientationLandscapeRight</string> | 			<string>UIInterfaceOrientationLandscapeRight</string> | ||||||
| 	</array> | 		</array> | ||||||
| 	<key>CADisableMinimumFrameDurationOnPhone</key> | 		<key>CADisableMinimumFrameDurationOnPhone</key> | ||||||
| 	<true/> | 		<true/> | ||||||
| 	<key>UIApplicationSupportsIndirectInputEvents</key> | 		<key>UIApplicationSupportsIndirectInputEvents</key> | ||||||
| 	<true/> | 		<true/> | ||||||
| </dict> | 		<key>UIStatusBarHidden</key> | ||||||
|  | 		<false/> | ||||||
|  | 	</dict> | ||||||
| </plist> | </plist> | ||||||
|   | |||||||
							
								
								
									
										209
									
								
								lib/main.dart
									
									
									
									
									
								
							
							
						
						| @@ -1,9 +1,11 @@ | |||||||
| import 'package:flutter/material.dart'; | import 'package:flutter/material.dart'; | ||||||
| import 'package:google_fonts/google_fonts.dart'; | import 'package:google_fonts/google_fonts.dart'; | ||||||
| import 'package:latext/latext.dart'; | import 'package:go_router/go_router.dart'; | ||||||
| import 'package:simple_math_calc/models/calculation_step.dart'; | import 'screens/home_screen.dart'; | ||||||
| import 'package:simple_math_calc/solver.dart'; |  | ||||||
| import 'dart:math'; | final GoRouter _router = GoRouter( | ||||||
|  |   routes: [GoRoute(path: '/', builder: (context, state) => const HomeScreen())], | ||||||
|  | ); | ||||||
|  |  | ||||||
| void main() async { | void main() async { | ||||||
|   runApp(const CalcApp()); |   runApp(const CalcApp()); | ||||||
| @@ -14,7 +16,7 @@ class CalcApp extends StatelessWidget { | |||||||
|  |  | ||||||
|   @override |   @override | ||||||
|   Widget build(BuildContext context) { |   Widget build(BuildContext context) { | ||||||
|     return MaterialApp( |     return MaterialApp.router( | ||||||
|       title: '方程计算器', |       title: '方程计算器', | ||||||
|       theme: ThemeData( |       theme: ThemeData( | ||||||
|         primarySwatch: Colors.blue, |         primarySwatch: Colors.blue, | ||||||
| @@ -23,197 +25,14 @@ class CalcApp extends StatelessWidget { | |||||||
|           Theme.of(context).textTheme, // Inherit existing text theme |           Theme.of(context).textTheme, // Inherit existing text theme | ||||||
|         ), |         ), | ||||||
|       ), |       ), | ||||||
|       home: const CalculatorHomePage(), |       darkTheme: ThemeData.dark().copyWith( | ||||||
|     ); |         primaryColor: Colors.blue, | ||||||
|   } |         textTheme: GoogleFonts.notoSerifScTextTheme( | ||||||
| } |           Theme.of(context).textTheme, | ||||||
|  |  | ||||||
| class CalculatorHomePage extends StatefulWidget { |  | ||||||
|   const CalculatorHomePage({super.key}); |  | ||||||
|  |  | ||||||
|   @override |  | ||||||
|   State<CalculatorHomePage> createState() => _CalculatorHomePageState(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| class _CalculatorHomePageState extends State<CalculatorHomePage> { |  | ||||||
|   final TextEditingController _controller = TextEditingController(); |  | ||||||
|   final SolverService _solverService = SolverService(); |  | ||||||
|  |  | ||||||
|   CalculationResult? _result; |  | ||||||
|   bool _isLoading = false; |  | ||||||
|  |  | ||||||
|   void _solveEquation() { |  | ||||||
|     if (_controller.text.isEmpty) { |  | ||||||
|       return; |  | ||||||
|     } |  | ||||||
|     setState(() { |  | ||||||
|       _isLoading = true; |  | ||||||
|       _result = null; // 清除上次结果 |  | ||||||
|     }); |  | ||||||
|  |  | ||||||
|     try { |  | ||||||
|       // 调用核心服务来解决问题 |  | ||||||
|       final result = _solverService.solve(_controller.text); |  | ||||||
|       setState(() { |  | ||||||
|         _result = result; |  | ||||||
|       }); |  | ||||||
|     } catch (e) { |  | ||||||
|       // 错误处理 |  | ||||||
|       setState(() { |  | ||||||
|         _result = CalculationResult( |  | ||||||
|           steps: [], |  | ||||||
|           finalAnswer: "错误: ${e.toString()}", |  | ||||||
|         ); |  | ||||||
|       }); |  | ||||||
|     } finally { |  | ||||||
|       setState(() { |  | ||||||
|         _isLoading = false; |  | ||||||
|       }); |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   @override |  | ||||||
|   Widget build(BuildContext context) { |  | ||||||
|     return Scaffold( |  | ||||||
|       appBar: AppBar( |  | ||||||
|         title: const Text('方程与表达式计算器'), |  | ||||||
|         centerTitle: false, |  | ||||||
|         leading: const Icon(Icons.calculate_outlined), |  | ||||||
|       ), |  | ||||||
|       body: Column( |  | ||||||
|         children: [ |  | ||||||
|           Padding( |  | ||||||
|             padding: const EdgeInsets.only(left: 16.0, right: 16.0, top: 16.0), |  | ||||||
|             child: Row( |  | ||||||
|               spacing: 8, |  | ||||||
|               children: [ |  | ||||||
|                 Expanded( |  | ||||||
|                   child: TextField( |  | ||||||
|                     controller: _controller, |  | ||||||
|                     textAlign: TextAlign.center, |  | ||||||
|                     decoration: InputDecoration( |  | ||||||
|                       border: const OutlineInputBorder(), |  | ||||||
|                       labelText: '输入方程或表达式', |  | ||||||
|                       floatingLabelAlignment: FloatingLabelAlignment.center, |  | ||||||
|                       hintText: '例如: 2x^2 - 8x + 6 = 0', |  | ||||||
|                     ), |  | ||||||
|                     onSubmitted: (_) => _solveEquation(), |  | ||||||
|                   ), |  | ||||||
|                 ), |  | ||||||
|                 IconButton( |  | ||||||
|                   onPressed: _solveEquation, |  | ||||||
|                   icon: Icon(Icons.play_arrow), |  | ||||||
|                 ), |  | ||||||
|               ], |  | ||||||
|             ), |  | ||||||
|           ), |  | ||||||
|           Expanded( |  | ||||||
|             child: _isLoading |  | ||||||
|                 ? const Center(child: CircularProgressIndicator()) |  | ||||||
|                 : _result == null |  | ||||||
|                 ? const Center(child: Text('请输入方程开始计算')) |  | ||||||
|                 : buildResultView(_result!), |  | ||||||
|           ), |  | ||||||
|         ], |  | ||||||
|       ), |  | ||||||
|     ); |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   // 构建结果展示视图 |  | ||||||
|   Widget buildResultView(CalculationResult result) { |  | ||||||
|     return ListView( |  | ||||||
|       padding: EdgeInsets.only( |  | ||||||
|         left: 16, |  | ||||||
|         right: 16, |  | ||||||
|         bottom: MediaQuery.of(context).padding.bottom + 16, |  | ||||||
|         top: 16, |  | ||||||
|       ), |  | ||||||
|       children: [ |  | ||||||
|         ...result.steps.map( |  | ||||||
|           (step) => Card( |  | ||||||
|             margin: const EdgeInsets.symmetric(vertical: 8), |  | ||||||
|             child: ClipRRect( |  | ||||||
|               borderRadius: const BorderRadius.all(Radius.circular(8)), |  | ||||||
|               child: Stack( |  | ||||||
|                 children: [ |  | ||||||
|                   Padding( |  | ||||||
|                     padding: const EdgeInsets.only( |  | ||||||
|                       left: 12, |  | ||||||
|                       right: 12, |  | ||||||
|                       bottom: 4, |  | ||||||
|                       top: 16, |  | ||||||
|                     ), |  | ||||||
|                     child: Column( |  | ||||||
|                       crossAxisAlignment: CrossAxisAlignment.center, |  | ||||||
|                       children: [ |  | ||||||
|                         Text( |  | ||||||
|                           step.title, |  | ||||||
|                           style: Theme.of(context).textTheme.titleMedium, |  | ||||||
|                         ), |  | ||||||
|                         const SizedBox(height: 4), |  | ||||||
|                         SelectableText(step.explanation), |  | ||||||
|                         Center( |  | ||||||
|                           child: LaTexT( |  | ||||||
|                             laTeXCode: Text( |  | ||||||
|                               step.formula, |  | ||||||
|                               style: Theme.of(context).textTheme.titleMedium, |  | ||||||
|                             ), |  | ||||||
|                           ), |  | ||||||
|                         ), |  | ||||||
|                       ], |  | ||||||
|                     ), |  | ||||||
|                   ), |  | ||||||
|                   Positioned( |  | ||||||
|                     left: -8, |  | ||||||
|                     top: -8, |  | ||||||
|                     child: Transform.rotate( |  | ||||||
|                       angle: pi / -5, |  | ||||||
|                       child: Opacity( |  | ||||||
|                         opacity: 0.8, |  | ||||||
|                         child: Badge( |  | ||||||
|                           backgroundColor: Theme.of( |  | ||||||
|                             context, |  | ||||||
|                           ).colorScheme.primary, |  | ||||||
|                           label: Text( |  | ||||||
|                             step.stepNumber.toString(), |  | ||||||
|                             style: TextStyle(fontSize: 32), |  | ||||||
|                           ), |  | ||||||
|                         ), |  | ||||||
|                       ), |  | ||||||
|                     ), |  | ||||||
|                   ), |  | ||||||
|                 ], |  | ||||||
|               ), |  | ||||||
|             ), |  | ||||||
|           ), |  | ||||||
|         ), |         ), | ||||||
|         const SizedBox(height: 10), |       ), | ||||||
|         Card( |       themeMode: ThemeMode.system, | ||||||
|           color: Theme.of(context).colorScheme.primaryContainer, |       routerConfig: _router, | ||||||
|           child: Padding( |  | ||||||
|             padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), |  | ||||||
|             child: Column( |  | ||||||
|               children: [ |  | ||||||
|                 const SizedBox(height: 16), |  | ||||||
|                 Text( |  | ||||||
|                   "最终答案", |  | ||||||
|                   style: Theme.of(context).textTheme.titleLarge?.copyWith( |  | ||||||
|                     color: Theme.of(context).colorScheme.onPrimaryContainer, |  | ||||||
|                   ), |  | ||||||
|                 ), |  | ||||||
|                 LaTexT( |  | ||||||
|                   laTeXCode: Text( |  | ||||||
|                     result.finalAnswer, |  | ||||||
|                     style: Theme.of(context).textTheme.titleMedium?.copyWith( |  | ||||||
|                       color: Theme.of(context).colorScheme.onPrimaryContainer, |  | ||||||
|                     ), |  | ||||||
|                   ), |  | ||||||
|                 ), |  | ||||||
|               ], |  | ||||||
|             ), |  | ||||||
|           ), |  | ||||||
|         ), |  | ||||||
|       ], |  | ||||||
|     ); |     ); | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										50
									
								
								lib/screens/about_page.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,50 @@ | |||||||
|  | import 'package:flutter/material.dart'; | ||||||
|  |  | ||||||
|  | class AboutPage extends StatelessWidget { | ||||||
|  |   const AboutPage({super.key}); | ||||||
|  |  | ||||||
|  |   @override | ||||||
|  |   Widget build(BuildContext context) { | ||||||
|  |     return Scaffold( | ||||||
|  |       appBar: AppBar(title: const Text('About')), | ||||||
|  |       body: Padding( | ||||||
|  |         padding: const EdgeInsets.all(16.0), | ||||||
|  |         child: Column( | ||||||
|  |           crossAxisAlignment: CrossAxisAlignment.center, | ||||||
|  |           children: [ | ||||||
|  |             const SizedBox(height: 20), | ||||||
|  |             Icon( | ||||||
|  |               Icons.calculate, | ||||||
|  |               size: 80, | ||||||
|  |               color: Theme.of(context).colorScheme.primary, | ||||||
|  |             ), | ||||||
|  |             const SizedBox(height: 20), | ||||||
|  |             Text( | ||||||
|  |               '方程计算器', | ||||||
|  |               style: Theme.of(context).textTheme.headlineMedium, | ||||||
|  |               textAlign: TextAlign.center, | ||||||
|  |             ), | ||||||
|  |             const SizedBox(height: 10), | ||||||
|  |             Text( | ||||||
|  |               'Version 1.0.0', | ||||||
|  |               style: Theme.of(context).textTheme.bodyLarge, | ||||||
|  |               textAlign: TextAlign.center, | ||||||
|  |             ), | ||||||
|  |             const SizedBox(height: 20), | ||||||
|  |             Text( | ||||||
|  |               '这是一个用于求解方程和表达式的计算器应用。\n\n支持多种类型的数学计算,包括代数方程、表达式求值等。', | ||||||
|  |               style: Theme.of(context).textTheme.bodyMedium, | ||||||
|  |               textAlign: TextAlign.center, | ||||||
|  |             ), | ||||||
|  |             const SizedBox(height: 30), | ||||||
|  |             Text( | ||||||
|  |               '© 2025 Simple Math Calculator', | ||||||
|  |               style: Theme.of(context).textTheme.bodySmall, | ||||||
|  |               textAlign: TextAlign.center, | ||||||
|  |             ), | ||||||
|  |           ], | ||||||
|  |         ), | ||||||
|  |       ), | ||||||
|  |     ); | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										195
									
								
								lib/screens/calculator_home_page.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,195 @@ | |||||||
|  | import 'package:flutter/material.dart'; | ||||||
|  | import 'package:latext/latext.dart'; | ||||||
|  | import 'package:simple_math_calc/models/calculation_step.dart'; | ||||||
|  | import 'package:simple_math_calc/solver.dart'; | ||||||
|  | import 'dart:math'; | ||||||
|  |  | ||||||
|  | class CalculatorHomePage extends StatefulWidget { | ||||||
|  |   const CalculatorHomePage({super.key}); | ||||||
|  |  | ||||||
|  |   @override | ||||||
|  |   State<CalculatorHomePage> createState() => _CalculatorHomePageState(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | class _CalculatorHomePageState extends State<CalculatorHomePage> { | ||||||
|  |   final TextEditingController _controller = TextEditingController(); | ||||||
|  |   final SolverService _solverService = SolverService(); | ||||||
|  |  | ||||||
|  |   CalculationResult? _result; | ||||||
|  |   bool _isLoading = false; | ||||||
|  |  | ||||||
|  |   void _solveEquation() { | ||||||
|  |     if (_controller.text.isEmpty) { | ||||||
|  |       return; | ||||||
|  |     } | ||||||
|  |     setState(() { | ||||||
|  |       _isLoading = true; | ||||||
|  |       _result = null; // 清除上次结果 | ||||||
|  |     }); | ||||||
|  |  | ||||||
|  |     try { | ||||||
|  |       // 调用核心服务来解决问题 | ||||||
|  |       final result = _solverService.solve(_controller.text); | ||||||
|  |       setState(() { | ||||||
|  |         _result = result; | ||||||
|  |       }); | ||||||
|  |     } catch (e) { | ||||||
|  |       // 错误处理 | ||||||
|  |       setState(() { | ||||||
|  |         _result = CalculationResult( | ||||||
|  |           steps: [], | ||||||
|  |           finalAnswer: "错误: ${e.toString()}", | ||||||
|  |         ); | ||||||
|  |       }); | ||||||
|  |     } finally { | ||||||
|  |       setState(() { | ||||||
|  |         _isLoading = false; | ||||||
|  |       }); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   @override | ||||||
|  |   Widget build(BuildContext context) { | ||||||
|  |     return Scaffold( | ||||||
|  |       appBar: AppBar( | ||||||
|  |         title: const Text('方程与表达式计算器'), | ||||||
|  |         centerTitle: false, | ||||||
|  |         leading: const Icon(Icons.calculate_outlined), | ||||||
|  |       ), | ||||||
|  |       body: Column( | ||||||
|  |         children: [ | ||||||
|  |           Padding( | ||||||
|  |             padding: const EdgeInsets.only(left: 16.0, right: 16.0, top: 16.0), | ||||||
|  |             child: Row( | ||||||
|  |               spacing: 8, | ||||||
|  |               children: [ | ||||||
|  |                 Expanded( | ||||||
|  |                   child: TextField( | ||||||
|  |                     controller: _controller, | ||||||
|  |                     textAlign: TextAlign.center, | ||||||
|  |                     decoration: InputDecoration( | ||||||
|  |                       border: const OutlineInputBorder(), | ||||||
|  |                       labelText: '输入方程或表达式', | ||||||
|  |                       floatingLabelAlignment: FloatingLabelAlignment.center, | ||||||
|  |                       hintText: '例如: 2x^2 - 8x + 6 = 0', | ||||||
|  |                     ), | ||||||
|  |                     onSubmitted: (_) => _solveEquation(), | ||||||
|  |                   ), | ||||||
|  |                 ), | ||||||
|  |                 IconButton( | ||||||
|  |                   onPressed: _solveEquation, | ||||||
|  |                   icon: Icon(Icons.play_arrow), | ||||||
|  |                 ), | ||||||
|  |               ], | ||||||
|  |             ), | ||||||
|  |           ), | ||||||
|  |           Expanded( | ||||||
|  |             child: _isLoading | ||||||
|  |                 ? const Center(child: CircularProgressIndicator()) | ||||||
|  |                 : _result == null | ||||||
|  |                 ? const Center(child: Text('请输入方程开始计算')) | ||||||
|  |                 : buildResultView(_result!), | ||||||
|  |           ), | ||||||
|  |         ], | ||||||
|  |       ), | ||||||
|  |     ); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   // 构建结果展示视图 | ||||||
|  |   Widget buildResultView(CalculationResult result) { | ||||||
|  |     return ListView( | ||||||
|  |       padding: EdgeInsets.only( | ||||||
|  |         left: 16, | ||||||
|  |         right: 16, | ||||||
|  |         bottom: MediaQuery.of(context).padding.bottom + 16, | ||||||
|  |         top: 16, | ||||||
|  |       ), | ||||||
|  |       children: [ | ||||||
|  |         ...result.steps.map( | ||||||
|  |           (step) => Card( | ||||||
|  |             margin: const EdgeInsets.symmetric(vertical: 8), | ||||||
|  |             child: ClipRRect( | ||||||
|  |               borderRadius: const BorderRadius.all(Radius.circular(8)), | ||||||
|  |               child: Stack( | ||||||
|  |                 children: [ | ||||||
|  |                   Padding( | ||||||
|  |                     padding: const EdgeInsets.only( | ||||||
|  |                       left: 12, | ||||||
|  |                       right: 12, | ||||||
|  |                       bottom: 4, | ||||||
|  |                       top: 16, | ||||||
|  |                     ), | ||||||
|  |                     child: Column( | ||||||
|  |                       crossAxisAlignment: CrossAxisAlignment.center, | ||||||
|  |                       children: [ | ||||||
|  |                         Text( | ||||||
|  |                           step.title, | ||||||
|  |                           style: Theme.of(context).textTheme.titleMedium, | ||||||
|  |                         ), | ||||||
|  |                         const SizedBox(height: 4), | ||||||
|  |                         SelectableText(step.explanation), | ||||||
|  |                         Center( | ||||||
|  |                           child: LaTexT( | ||||||
|  |                             laTeXCode: Text( | ||||||
|  |                               step.formula, | ||||||
|  |                               style: Theme.of(context).textTheme.titleMedium, | ||||||
|  |                             ), | ||||||
|  |                           ), | ||||||
|  |                         ), | ||||||
|  |                       ], | ||||||
|  |                     ), | ||||||
|  |                   ), | ||||||
|  |                   Positioned( | ||||||
|  |                     left: -8, | ||||||
|  |                     top: -8, | ||||||
|  |                     child: Transform.rotate( | ||||||
|  |                       angle: pi / -5, | ||||||
|  |                       child: Opacity( | ||||||
|  |                         opacity: 0.8, | ||||||
|  |                         child: Badge( | ||||||
|  |                           backgroundColor: Theme.of( | ||||||
|  |                             context, | ||||||
|  |                           ).colorScheme.primary, | ||||||
|  |                           label: Text( | ||||||
|  |                             step.stepNumber.toString(), | ||||||
|  |                             style: TextStyle(fontSize: 32), | ||||||
|  |                           ), | ||||||
|  |                         ), | ||||||
|  |                       ), | ||||||
|  |                     ), | ||||||
|  |                   ), | ||||||
|  |                 ], | ||||||
|  |               ), | ||||||
|  |             ), | ||||||
|  |           ), | ||||||
|  |         ), | ||||||
|  |         const SizedBox(height: 10), | ||||||
|  |         Card( | ||||||
|  |           color: Theme.of(context).colorScheme.primaryContainer, | ||||||
|  |           child: Padding( | ||||||
|  |             padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), | ||||||
|  |             child: Column( | ||||||
|  |               children: [ | ||||||
|  |                 const SizedBox(height: 16), | ||||||
|  |                 Text( | ||||||
|  |                   "最终答案", | ||||||
|  |                   style: Theme.of(context).textTheme.titleLarge?.copyWith( | ||||||
|  |                     color: Theme.of(context).colorScheme.onPrimaryContainer, | ||||||
|  |                   ), | ||||||
|  |                 ), | ||||||
|  |                 LaTexT( | ||||||
|  |                   laTeXCode: Text( | ||||||
|  |                     result.finalAnswer, | ||||||
|  |                     style: Theme.of(context).textTheme.titleMedium?.copyWith( | ||||||
|  |                       color: Theme.of(context).colorScheme.onPrimaryContainer, | ||||||
|  |                     ), | ||||||
|  |                   ), | ||||||
|  |                 ), | ||||||
|  |               ], | ||||||
|  |             ), | ||||||
|  |           ), | ||||||
|  |         ), | ||||||
|  |       ], | ||||||
|  |     ); | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										43
									
								
								lib/screens/home_screen.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,43 @@ | |||||||
|  | import 'package:flutter/material.dart'; | ||||||
|  | import 'calculator_home_page.dart'; | ||||||
|  | import 'about_page.dart'; | ||||||
|  |  | ||||||
|  | class HomeScreen extends StatefulWidget { | ||||||
|  |   const HomeScreen({super.key}); | ||||||
|  |  | ||||||
|  |   @override | ||||||
|  |   State<HomeScreen> createState() => _HomeScreenState(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | class _HomeScreenState extends State<HomeScreen> { | ||||||
|  |   int _selectedIndex = 0; | ||||||
|  |  | ||||||
|  |   static const List<Widget> _widgetOptions = <Widget>[ | ||||||
|  |     CalculatorHomePage(), | ||||||
|  |     AboutPage(), | ||||||
|  |   ]; | ||||||
|  |  | ||||||
|  |   void _onItemTapped(int index) { | ||||||
|  |     setState(() { | ||||||
|  |       _selectedIndex = index; | ||||||
|  |     }); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   @override | ||||||
|  |   Widget build(BuildContext context) { | ||||||
|  |     return Scaffold( | ||||||
|  |       body: _widgetOptions.elementAt(_selectedIndex), | ||||||
|  |       bottomNavigationBar: BottomNavigationBar( | ||||||
|  |         items: const <BottomNavigationBarItem>[ | ||||||
|  |           BottomNavigationBarItem( | ||||||
|  |             icon: Icon(Icons.calculate), | ||||||
|  |             label: 'Calculator', | ||||||
|  |           ), | ||||||
|  |           BottomNavigationBarItem(icon: Icon(Icons.info), label: 'About'), | ||||||
|  |         ], | ||||||
|  |         currentIndex: _selectedIndex, | ||||||
|  |         onTap: _onItemTapped, | ||||||
|  |       ), | ||||||
|  |     ); | ||||||
|  |   } | ||||||
|  | } | ||||||
| @@ -1,68 +1,68 @@ | |||||||
| { | { | ||||||
|   "images" : [ |     "info": { | ||||||
|     { |         "version": 1, | ||||||
|       "size" : "16x16", |         "author": "xcode" | ||||||
|       "idiom" : "mac", |  | ||||||
|       "filename" : "app_icon_16.png", |  | ||||||
|       "scale" : "1x" |  | ||||||
|     }, |     }, | ||||||
|     { |     "images": [ | ||||||
|       "size" : "16x16", |         { | ||||||
|       "idiom" : "mac", |             "size": "16x16", | ||||||
|       "filename" : "app_icon_32.png", |             "idiom": "mac", | ||||||
|       "scale" : "2x" |             "filename": "app_icon_16.png", | ||||||
|     }, |             "scale": "1x" | ||||||
|     { |         }, | ||||||
|       "size" : "32x32", |         { | ||||||
|       "idiom" : "mac", |             "size": "16x16", | ||||||
|       "filename" : "app_icon_32.png", |             "idiom": "mac", | ||||||
|       "scale" : "1x" |             "filename": "app_icon_32.png", | ||||||
|     }, |             "scale": "2x" | ||||||
|     { |         }, | ||||||
|       "size" : "32x32", |         { | ||||||
|       "idiom" : "mac", |             "size": "32x32", | ||||||
|       "filename" : "app_icon_64.png", |             "idiom": "mac", | ||||||
|       "scale" : "2x" |             "filename": "app_icon_32.png", | ||||||
|     }, |             "scale": "1x" | ||||||
|     { |         }, | ||||||
|       "size" : "128x128", |         { | ||||||
|       "idiom" : "mac", |             "size": "32x32", | ||||||
|       "filename" : "app_icon_128.png", |             "idiom": "mac", | ||||||
|       "scale" : "1x" |             "filename": "app_icon_64.png", | ||||||
|     }, |             "scale": "2x" | ||||||
|     { |         }, | ||||||
|       "size" : "128x128", |         { | ||||||
|       "idiom" : "mac", |             "size": "128x128", | ||||||
|       "filename" : "app_icon_256.png", |             "idiom": "mac", | ||||||
|       "scale" : "2x" |             "filename": "app_icon_128.png", | ||||||
|     }, |             "scale": "1x" | ||||||
|     { |         }, | ||||||
|       "size" : "256x256", |         { | ||||||
|       "idiom" : "mac", |             "size": "128x128", | ||||||
|       "filename" : "app_icon_256.png", |             "idiom": "mac", | ||||||
|       "scale" : "1x" |             "filename": "app_icon_256.png", | ||||||
|     }, |             "scale": "2x" | ||||||
|     { |         }, | ||||||
|       "size" : "256x256", |         { | ||||||
|       "idiom" : "mac", |             "size": "256x256", | ||||||
|       "filename" : "app_icon_512.png", |             "idiom": "mac", | ||||||
|       "scale" : "2x" |             "filename": "app_icon_256.png", | ||||||
|     }, |             "scale": "1x" | ||||||
|     { |         }, | ||||||
|       "size" : "512x512", |         { | ||||||
|       "idiom" : "mac", |             "size": "256x256", | ||||||
|       "filename" : "app_icon_512.png", |             "idiom": "mac", | ||||||
|       "scale" : "1x" |             "filename": "app_icon_512.png", | ||||||
|     }, |             "scale": "2x" | ||||||
|     { |         }, | ||||||
|       "size" : "512x512", |         { | ||||||
|       "idiom" : "mac", |             "size": "512x512", | ||||||
|       "filename" : "app_icon_1024.png", |             "idiom": "mac", | ||||||
|       "scale" : "2x" |             "filename": "app_icon_512.png", | ||||||
|     } |             "scale": "1x" | ||||||
|   ], |         }, | ||||||
|   "info" : { |         { | ||||||
|     "version" : 1, |             "size": "512x512", | ||||||
|     "author" : "xcode" |             "idiom": "mac", | ||||||
|   } |             "filename": "app_icon_1024.png", | ||||||
|  |             "scale": "2x" | ||||||
|  |         } | ||||||
|  |     ] | ||||||
| } | } | ||||||
| Before Width: | Height: | Size: 101 KiB After Width: | Height: | Size: 40 KiB | 
| Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 2.5 KiB | 
| Before Width: | Height: | Size: 520 B After Width: | Height: | Size: 264 B | 
| Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 5.7 KiB | 
| Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 628 B | 
| Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 14 KiB | 
| Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 1.3 KiB | 
							
								
								
									
										145
									
								
								pubspec.lock
									
									
									
									
									
								
							
							
						
						| @@ -1,6 +1,22 @@ | |||||||
| # Generated by pub | # Generated by pub | ||||||
| # See https://dart.dev/tools/pub/glossary#lockfile | # See https://dart.dev/tools/pub/glossary#lockfile | ||||||
| packages: | packages: | ||||||
|  |   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: |   args: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
| @@ -33,6 +49,22 @@ packages: | |||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "1.4.0" |     version: "1.4.0" | ||||||
|  |   checked_yaml: | ||||||
|  |     dependency: transitive | ||||||
|  |     description: | ||||||
|  |       name: checked_yaml | ||||||
|  |       sha256: "959525d3162f249993882720d52b7e0c833978df229be20702b33d48d91de70f" | ||||||
|  |       url: "https://pub.dev" | ||||||
|  |     source: hosted | ||||||
|  |     version: "2.0.4" | ||||||
|  |   cli_util: | ||||||
|  |     dependency: transitive | ||||||
|  |     description: | ||||||
|  |       name: cli_util | ||||||
|  |       sha256: ff6785f7e9e3c38ac98b2fb035701789de90154024a75b6cb926445e83197d1c | ||||||
|  |       url: "https://pub.dev" | ||||||
|  |     source: hosted | ||||||
|  |     version: "0.4.2" | ||||||
|   clock: |   clock: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
| @@ -57,6 +89,14 @@ packages: | |||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "3.0.6" |     version: "3.0.6" | ||||||
|  |   csslib: | ||||||
|  |     dependency: transitive | ||||||
|  |     description: | ||||||
|  |       name: csslib | ||||||
|  |       sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e" | ||||||
|  |       url: "https://pub.dev" | ||||||
|  |     source: hosted | ||||||
|  |     version: "1.0.2" | ||||||
|   cupertino_icons: |   cupertino_icons: | ||||||
|     dependency: "direct main" |     dependency: "direct main" | ||||||
|     description: |     description: | ||||||
| @@ -86,14 +126,22 @@ packages: | |||||||
|     description: flutter |     description: flutter | ||||||
|     source: sdk |     source: sdk | ||||||
|     version: "0.0.0" |     version: "0.0.0" | ||||||
|  |   flutter_launcher_icons: | ||||||
|  |     dependency: "direct dev" | ||||||
|  |     description: | ||||||
|  |       name: flutter_launcher_icons | ||||||
|  |       sha256: "10f13781741a2e3972126fae08393d3c4e01fa4cd7473326b94b72cf594195e7" | ||||||
|  |       url: "https://pub.dev" | ||||||
|  |     source: hosted | ||||||
|  |     version: "0.14.4" | ||||||
|   flutter_lints: |   flutter_lints: | ||||||
|     dependency: "direct dev" |     dependency: "direct dev" | ||||||
|     description: |     description: | ||||||
|       name: flutter_lints |       name: flutter_lints | ||||||
|       sha256: "5398f14efa795ffb7a33e9b6a08798b26a180edac4ad7db3f231e40f82ce11e1" |       sha256: "3105dc8492f6183fb076ccf1f351ac3d60564bff92e20bfc4af9cc1651f4e7e1" | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "5.0.0" |     version: "6.0.0" | ||||||
|   flutter_math_fork: |   flutter_math_fork: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
| @@ -102,6 +150,14 @@ packages: | |||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "0.7.4" |     version: "0.7.4" | ||||||
|  |   flutter_native_splash: | ||||||
|  |     dependency: "direct dev" | ||||||
|  |     description: | ||||||
|  |       name: flutter_native_splash | ||||||
|  |       sha256: "8321a6d11a8d13977fa780c89de8d257cce3d841eecfb7a4cadffcc4f12d82dc" | ||||||
|  |       url: "https://pub.dev" | ||||||
|  |     source: hosted | ||||||
|  |     version: "2.4.6" | ||||||
|   flutter_svg: |   flutter_svg: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
| @@ -115,6 +171,19 @@ packages: | |||||||
|     description: flutter |     description: flutter | ||||||
|     source: sdk |     source: sdk | ||||||
|     version: "0.0.0" |     version: "0.0.0" | ||||||
|  |   flutter_web_plugins: | ||||||
|  |     dependency: transitive | ||||||
|  |     description: flutter | ||||||
|  |     source: sdk | ||||||
|  |     version: "0.0.0" | ||||||
|  |   go_router: | ||||||
|  |     dependency: "direct main" | ||||||
|  |     description: | ||||||
|  |       name: go_router | ||||||
|  |       sha256: f02fd7d2a4dc512fec615529824fdd217fecb3a3d3de68360293a551f21634b3 | ||||||
|  |       url: "https://pub.dev" | ||||||
|  |     source: hosted | ||||||
|  |     version: "14.8.1" | ||||||
|   google_fonts: |   google_fonts: | ||||||
|     dependency: "direct main" |     dependency: "direct main" | ||||||
|     description: |     description: | ||||||
| @@ -123,6 +192,14 @@ packages: | |||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "6.3.1" |     version: "6.3.1" | ||||||
|  |   html: | ||||||
|  |     dependency: transitive | ||||||
|  |     description: | ||||||
|  |       name: html | ||||||
|  |       sha256: "6d1264f2dffa1b1101c25a91dff0dc2daee4c18e87cd8538729773c073dbf602" | ||||||
|  |       url: "https://pub.dev" | ||||||
|  |     source: hosted | ||||||
|  |     version: "0.15.6" | ||||||
|   http: |   http: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
| @@ -139,6 +216,22 @@ packages: | |||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "4.1.2" |     version: "4.1.2" | ||||||
|  |   image: | ||||||
|  |     dependency: transitive | ||||||
|  |     description: | ||||||
|  |       name: image | ||||||
|  |       sha256: "4e973fcf4caae1a4be2fa0a13157aa38a8f9cb049db6529aa00b4d71abc4d928" | ||||||
|  |       url: "https://pub.dev" | ||||||
|  |     source: hosted | ||||||
|  |     version: "4.5.4" | ||||||
|  |   json_annotation: | ||||||
|  |     dependency: transitive | ||||||
|  |     description: | ||||||
|  |       name: json_annotation | ||||||
|  |       sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" | ||||||
|  |       url: "https://pub.dev" | ||||||
|  |     source: hosted | ||||||
|  |     version: "4.9.0" | ||||||
|   latext: |   latext: | ||||||
|     dependency: "direct main" |     dependency: "direct main" | ||||||
|     description: |     description: | ||||||
| @@ -175,10 +268,18 @@ packages: | |||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
|       name: lints |       name: lints | ||||||
|       sha256: c35bb79562d980e9a453fc715854e1ed39e24e7d0297a880ef54e17f9874a9d7 |       sha256: a5e2b223cb7c9c8efdc663ef484fdd95bb243bff242ef5b13e26883547fce9a0 | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "5.1.1" |     version: "6.0.0" | ||||||
|  |   logging: | ||||||
|  |     dependency: transitive | ||||||
|  |     description: | ||||||
|  |       name: logging | ||||||
|  |       sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61 | ||||||
|  |       url: "https://pub.dev" | ||||||
|  |     source: hosted | ||||||
|  |     version: "1.3.0" | ||||||
|   matcher: |   matcher: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
| @@ -199,10 +300,10 @@ packages: | |||||||
|     dependency: "direct main" |     dependency: "direct main" | ||||||
|     description: |     description: | ||||||
|       name: math_expressions |       name: math_expressions | ||||||
|       sha256: b5f6ffb67a558d564ff6fd433661640d13c7582ac80efbe6fc89c54e0a6ed580 |       sha256: "2e1ceb974c2b1893c809a68c7005f1b63f7324db0add800a0e792b1ac8ff9f03" | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "3.0.0" |     version: "3.1.0" | ||||||
|   meta: |   meta: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
| @@ -287,10 +388,10 @@ packages: | |||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
|       name: petitparser |       name: petitparser | ||||||
|       sha256: "07c8f0b1913bcde1ff0d26e57ace2f3012ccbf2b204e070290dad3bb22797646" |       sha256: "1a97266a94f7350d30ae522c0af07890c70b8e62c71e8e3920d1db4d23c057d1" | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "6.1.0" |     version: "7.0.1" | ||||||
|   platform: |   platform: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
| @@ -307,6 +408,14 @@ packages: | |||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "2.1.8" |     version: "2.1.8" | ||||||
|  |   posix: | ||||||
|  |     dependency: transitive | ||||||
|  |     description: | ||||||
|  |       name: posix | ||||||
|  |       sha256: "6323a5b0fa688b6a010df4905a56b00181479e6d10534cecfecede2aa55add61" | ||||||
|  |       url: "https://pub.dev" | ||||||
|  |     source: hosted | ||||||
|  |     version: "6.0.3" | ||||||
|   provider: |   provider: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
| @@ -384,6 +493,14 @@ packages: | |||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "1.4.0" |     version: "1.4.0" | ||||||
|  |   universal_io: | ||||||
|  |     dependency: transitive | ||||||
|  |     description: | ||||||
|  |       name: universal_io | ||||||
|  |       sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad" | ||||||
|  |       url: "https://pub.dev" | ||||||
|  |     source: hosted | ||||||
|  |     version: "2.2.2" | ||||||
|   vector_graphics: |   vector_graphics: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
| @@ -444,10 +561,18 @@ packages: | |||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
|       name: xml |       name: xml | ||||||
|       sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 |       sha256: "971043b3a0d3da28727e40ed3e0b5d18b742fa5a68665cca88e74b7876d5e025" | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "6.5.0" |     version: "6.6.1" | ||||||
|  |   yaml: | ||||||
|  |     dependency: transitive | ||||||
|  |     description: | ||||||
|  |       name: yaml | ||||||
|  |       sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce | ||||||
|  |       url: "https://pub.dev" | ||||||
|  |     source: hosted | ||||||
|  |     version: "3.1.3" | ||||||
| sdks: | sdks: | ||||||
|   dart: ">=3.9.2 <4.0.0" |   dart: ">=3.9.2 <4.0.0" | ||||||
|   flutter: ">=3.29.0" |   flutter: ">=3.29.0" | ||||||
|   | |||||||
							
								
								
									
										34
									
								
								pubspec.yaml
									
									
									
									
									
								
							
							
						
						| @@ -1,8 +1,8 @@ | |||||||
| name: simple_math_calc | name: simple_math_calc | ||||||
| description: "A new Flutter project." | description: "A simple math calculator." | ||||||
| # The following line prevents the package from being accidentally published to | # The following line prevents the package from being accidentally published to | ||||||
| # pub.dev using `flutter pub publish`. This is preferred for private packages. | # pub.dev using `flutter pub publish`. This is preferred for private packages. | ||||||
| publish_to: 'none' # Remove this line if you wish to publish to pub.dev | publish_to: "none" # Remove this line if you wish to publish to pub.dev | ||||||
|  |  | ||||||
| # The following defines the version and build number for your application. | # The following defines the version and build number for your application. | ||||||
| # A version number is three numbers separated by dots, like 1.2.43 | # A version number is three numbers separated by dots, like 1.2.43 | ||||||
| @@ -34,9 +34,10 @@ dependencies: | |||||||
|   # The following adds the Cupertino Icons font to your application. |   # The following adds the Cupertino Icons font to your application. | ||||||
|   # Use with the CupertinoIcons class for iOS style icons. |   # Use with the CupertinoIcons class for iOS style icons. | ||||||
|   cupertino_icons: ^1.0.8 |   cupertino_icons: ^1.0.8 | ||||||
|   math_expressions: ^3.0.0 |   math_expressions: ^3.1.0 | ||||||
|   latext: ^0.5.1 |   latext: ^0.5.1 | ||||||
|   google_fonts: ^6.3.1 |   google_fonts: ^6.3.1 | ||||||
|  |   go_router: ^14.2.0 | ||||||
|  |  | ||||||
| dev_dependencies: | dev_dependencies: | ||||||
|   flutter_test: |   flutter_test: | ||||||
| @@ -47,14 +48,15 @@ dev_dependencies: | |||||||
|   # activated in the `analysis_options.yaml` file located at the root of your |   # activated in the `analysis_options.yaml` file located at the root of your | ||||||
|   # package. See that file for information about deactivating specific lint |   # package. See that file for information about deactivating specific lint | ||||||
|   # rules and activating additional ones. |   # rules and activating additional ones. | ||||||
|   flutter_lints: ^5.0.0 |   flutter_lints: ^6.0.0 | ||||||
|  |   flutter_native_splash: ^2.4.6 | ||||||
|  |   flutter_launcher_icons: ^0.14.4 | ||||||
|  |  | ||||||
| # For information on the generic Dart part of this file, see the | # For information on the generic Dart part of this file, see the | ||||||
| # following page: https://dart.dev/tools/pub/pubspec | # following page: https://dart.dev/tools/pub/pubspec | ||||||
|  |  | ||||||
| # The following section is specific to Flutter packages. | # The following section is specific to Flutter packages. | ||||||
| flutter: | flutter: | ||||||
|  |  | ||||||
|   # The following line ensures that the Material Icons font is |   # The following line ensures that the Material Icons font is | ||||||
|   # included with your application, so that you can use the icons in |   # included with your application, so that you can use the icons in | ||||||
|   # the material Icons class. |   # the material Icons class. | ||||||
| @@ -90,3 +92,25 @@ flutter: | |||||||
|   # |   # | ||||||
|   # For details regarding fonts from package dependencies, |   # For details regarding fonts from package dependencies, | ||||||
|   # see https://flutter.dev/to/font-from-package |   # see https://flutter.dev/to/font-from-package | ||||||
|  |  | ||||||
|  | flutter_native_splash: | ||||||
|  |   color: "#8470b5" | ||||||
|  |   image: assets/icon.jpg | ||||||
|  |  | ||||||
|  | flutter_launcher_icons: | ||||||
|  |   android: "launcher_icon" | ||||||
|  |   ios: true | ||||||
|  |   image_path: "assets/icon.jpg" | ||||||
|  |   min_sdk_android: 21 # android min sdk min:16, default 21 | ||||||
|  |   web: | ||||||
|  |     generate: true | ||||||
|  |     image_path: "assets/icon.jpg" | ||||||
|  |     background_color: "#8470b5" | ||||||
|  |     theme_color: "#8470b5" | ||||||
|  |   windows: | ||||||
|  |     generate: true | ||||||
|  |     image_path: "assets/icon.jpg" | ||||||
|  |     icon_size: 48 # min:48, max:256, default: 48 | ||||||
|  |   macos: | ||||||
|  |     generate: true | ||||||
|  |     image_path: "assets/icon.jpg" | ||||||
|   | |||||||
							
								
								
									
										
											BIN
										
									
								
								web/favicon.png
									
									
									
									
									
								
							
							
						
						| Before Width: | Height: | Size: 917 B After Width: | Height: | Size: 264 B | 
| Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 4.3 KiB | 
| Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 14 KiB | 
| Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 4.3 KiB | 
| Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 14 KiB | 
| @@ -1,6 +1,4 @@ | |||||||
| <!DOCTYPE html> | <!DOCTYPE html><html><head> | ||||||
| <html> |  | ||||||
| <head> |  | ||||||
|   <!-- |   <!-- | ||||||
|     If you are serving your web app in a path other than the root, change the |     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. |     href value below to reflect the base path you are serving from. | ||||||
| @@ -27,12 +25,84 @@ | |||||||
|   <link rel="apple-touch-icon" href="icons/Icon-192.png"> |   <link rel="apple-touch-icon" href="icons/Icon-192.png"> | ||||||
|  |  | ||||||
|   <!-- Favicon --> |   <!-- Favicon --> | ||||||
|   <link rel="icon" type="image/png" href="favicon.png"/> |   <link rel="icon" type="image/png" href="favicon.png"> | ||||||
|  |  | ||||||
|   <title>simple_math_calc</title> |   <title>simple_math_calc</title> | ||||||
|   <link rel="manifest" href="manifest.json"> |   <link rel="manifest" href="manifest.json"> | ||||||
|  |   <style id="splash-screen-style"> | ||||||
|  |     html { | ||||||
|  |       height: 100% | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     body { | ||||||
|  |       margin: 0; | ||||||
|  |       min-height: 100%; | ||||||
|  |       background-color: #8470b5; | ||||||
|  |           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> | </head> | ||||||
| <body> | <body> | ||||||
|   <script src="flutter_bootstrap.js" async></script> |   <picture id="splash"> | ||||||
| </body> |       <source srcset="splash/img/light-1x.png 1x, splash/img/light-2x.png 2x, splash/img/light-3x.png 3x, splash/img/light-4x.png 4x" media="(prefers-color-scheme: light)"> | ||||||
| </html> |       <source srcset="splash/img/dark-1x.png 1x, splash/img/dark-2x.png 2x, splash/img/dark-3x.png 3x, splash/img/dark-4x.png 4x" media="(prefers-color-scheme: dark)"> | ||||||
|  |       <img class="center" aria-hidden="true" src="splash/img/light-1x.png" alt=""> | ||||||
|  |   </picture> | ||||||
|  |   <script src="flutter_bootstrap.js" async=""></script> | ||||||
|  |  | ||||||
|  |  | ||||||
|  | </body></html> | ||||||
| @@ -3,8 +3,8 @@ | |||||||
|     "short_name": "simple_math_calc", |     "short_name": "simple_math_calc", | ||||||
|     "start_url": ".", |     "start_url": ".", | ||||||
|     "display": "standalone", |     "display": "standalone", | ||||||
|     "background_color": "#0175C2", |     "background_color": "#8470b5", | ||||||
|     "theme_color": "#0175C2", |     "theme_color": "#8470b5", | ||||||
|     "description": "A new Flutter project.", |     "description": "A new Flutter project.", | ||||||
|     "orientation": "portrait-primary", |     "orientation": "portrait-primary", | ||||||
|     "prefer_related_applications": false, |     "prefer_related_applications": false, | ||||||
|   | |||||||
							
								
								
									
										
											BIN
										
									
								
								web/splash/img/dark-1x.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 5.7 KiB | 
							
								
								
									
										
											BIN
										
									
								
								web/splash/img/dark-2x.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 14 KiB | 
							
								
								
									
										
											BIN
										
									
								
								web/splash/img/dark-3x.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 26 KiB | 
							
								
								
									
										
											BIN
										
									
								
								web/splash/img/dark-4x.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 40 KiB | 
							
								
								
									
										
											BIN
										
									
								
								web/splash/img/light-1x.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 5.7 KiB | 
							
								
								
									
										
											BIN
										
									
								
								web/splash/img/light-2x.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 14 KiB | 
							
								
								
									
										
											BIN
										
									
								
								web/splash/img/light-3x.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 26 KiB | 
							
								
								
									
										
											BIN
										
									
								
								web/splash/img/light-4x.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 40 KiB | 
| Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 1017 B |