Showing
100 changed files
with
140 additions
and
776 deletions
Too many changes to show.
To preserve performance only 100 of 100+ files are displayed.
1 | -# Benchmarks | 1 | +# benchmarks |
2 | +A repository to benchmark Flutter libs. | ||
3 | +Creators of the tested libs can suggest improvements, as long as they follow the same design structure. | ||
2 | 4 | ||
3 | -Start the project, compile in PROFILE MODE (the debug mode is inconsistent for checking benchmarks), open the Dart inspector, and check the amount of ram used. | 5 | +# 1- State Managers |
4 | 6 | ||
5 | -To be fair, the test was done twice: after the state changes, and after Dart's garbage collection (by manually pressing the garbage collector on the dart inspect). | 7 | + |
6 | 8 | ||
7 | -Start testing and see for yourself. | 9 | +The idle application consumes 4.288k of ram. |
10 | +Items were added dynamically to a ListView. | ||
11 | +The amount of RAM was measured after the test, and the following calculation was made: | ||
12 | +Number of RAM consumed by the app after testing with the state manager - RAM in idle state without any state manager. | ||
8 | 13 | ||
9 | -The test measures RAM consumption, so the lower the better. | ||
10 | - | ||
11 | -## No GC | ||
12 | - | ||
13 | -Mobx = 4.58 | ||
14 | - | ||
15 | -Bloc = 4.56 | ||
16 | - | ||
17 | -Redux = 4.56 | ||
18 | - | ||
19 | -Bloc-Lib = 4.55 | ||
20 | - | ||
21 | -Provider = 4.55 | ||
22 | - | ||
23 | -GetX = 4.53 | ||
24 | - | ||
25 | -Get = 4.53 | ||
26 | - | ||
27 | -## GC | ||
28 | - | ||
29 | -Bloc-lib = 4.22 | ||
30 | - | ||
31 | -Mobx = 4.18 | ||
32 | - | ||
33 | -Bloc = 4.16 | ||
34 | - | ||
35 | -Redux = 4.16 | ||
36 | - | ||
37 | -Provider = 4.15 | ||
38 | - | ||
39 | -Get = 4.14 | ||
40 | - | ||
41 | -GetX = 4.13 | 14 | +In addition to the RAM calculation, the size of the apk was also observed after compilation. And we had the following results: |
42 | 15 | ||
16 | +- flutter_bloc: 8.3mb | ||
17 | +- mobx: 8.3mb | ||
18 | +- provider: 8.3mb | ||
19 | +- redux: 8.2mb | ||
20 | +- get: 8.2mb | ||
21 | +- getx: 8.2mb | ||
43 | 22 | ||
23 | +The creators of flutter_bloc and provider made changes to use their library. If you want to make changes (within the scope of the project, without eliminating classes), you can do so by offering a PR. |
1 | -<?xml version="1.0" encoding="UTF-8"?> | ||
2 | -<module type="JAVA_MODULE" version="4"> | ||
3 | - <component name="FacetManager"> | ||
4 | - <facet type="android" name="Android"> | ||
5 | - <configuration> | ||
6 | - <option name="ALLOW_USER_CONFIGURATION" value="false" /> | ||
7 | - <option name="MANIFEST_FILE_RELATIVE_PATH" value="/app/src/main/AndroidManifest.xml" /> | ||
8 | - <option name="RES_FOLDER_RELATIVE_PATH" value="/app/src/main/res" /> | ||
9 | - <option name="ASSETS_FOLDER_RELATIVE_PATH" value="/app/src/main/assets" /> | ||
10 | - <option name="LIBS_FOLDER_RELATIVE_PATH" value="/app/src/main/libs" /> | ||
11 | - <option name="PROGUARD_LOGS_FOLDER_RELATIVE_PATH" value="/app/src/main/proguard_logs" /> | ||
12 | - </configuration> | ||
13 | - </facet> | ||
14 | - </component> | ||
15 | - <component name="NewModuleRootManager" inherit-compiler-output="true"> | ||
16 | - <exclude-output /> | ||
17 | - <content url="file://$MODULE_DIR$"> | ||
18 | - <sourceFolder url="file://$MODULE_DIR$/app/src/main/java" isTestSource="false" /> | ||
19 | - <sourceFolder url="file://$MODULE_DIR$/app/src/main/kotlin" isTestSource="false" /> | ||
20 | - <sourceFolder url="file://$MODULE_DIR$/gen" isTestSource="false" generated="true" /> | ||
21 | - </content> | ||
22 | - <orderEntry type="jdk" jdkName="Android API 25 Platform" jdkType="Android SDK" /> | ||
23 | - <orderEntry type="sourceFolder" forTests="false" /> | ||
24 | - <orderEntry type="library" name="Flutter for Android" level="project" /> | ||
25 | - <orderEntry type="library" name="KotlinJavaRuntime" level="project" /> | ||
26 | - </component> | ||
27 | -</module> |
benchmark/android/benchs_android.iml
deleted
100644 → 0
1 | -<?xml version="1.0" encoding="UTF-8"?> | ||
2 | -<module type="JAVA_MODULE" version="4"> | ||
3 | - <component name="FacetManager"> | ||
4 | - <facet type="android" name="Android"> | ||
5 | - <configuration> | ||
6 | - <option name="ALLOW_USER_CONFIGURATION" value="false" /> | ||
7 | - <option name="GEN_FOLDER_RELATIVE_PATH_APT" value="/gen" /> | ||
8 | - <option name="GEN_FOLDER_RELATIVE_PATH_AIDL" value="/gen" /> | ||
9 | - <option name="MANIFEST_FILE_RELATIVE_PATH" value="/app/src/main/AndroidManifest.xml" /> | ||
10 | - <option name="RES_FOLDER_RELATIVE_PATH" value="/app/src/main/res" /> | ||
11 | - <option name="ASSETS_FOLDER_RELATIVE_PATH" value="/app/src/main/assets" /> | ||
12 | - <option name="LIBS_FOLDER_RELATIVE_PATH" value="/app/src/main/libs" /> | ||
13 | - <option name="PROGUARD_LOGS_FOLDER_RELATIVE_PATH" value="/app/src/main/proguard_logs" /> | ||
14 | - </configuration> | ||
15 | - </facet> | ||
16 | - </component> | ||
17 | - <component name="NewModuleRootManager" inherit-compiler-output="true"> | ||
18 | - <exclude-output /> | ||
19 | - <content url="file://$MODULE_DIR$"> | ||
20 | - <sourceFolder url="file://$MODULE_DIR$/app/src/main/java" isTestSource="false" /> | ||
21 | - <sourceFolder url="file://$MODULE_DIR$/app/src/main/kotlin" isTestSource="false" /> | ||
22 | - <sourceFolder url="file://$MODULE_DIR$/gen" isTestSource="false" generated="true" /> | ||
23 | - </content> | ||
24 | - <orderEntry type="jdk" jdkName="Android API 25 Platform" jdkType="Android SDK" /> | ||
25 | - <orderEntry type="sourceFolder" forTests="false" /> | ||
26 | - <orderEntry type="library" name="Flutter for Android" level="project" /> | ||
27 | - <orderEntry type="library" name="KotlinJavaRuntime" level="project" /> | ||
28 | - </component> | ||
29 | -</module> |
benchmark/benchmark.png
0 → 100644

32.5 KB
benchmark/benchmarks.iml
deleted
100644 → 0
1 | -<?xml version="1.0" encoding="UTF-8"?> | ||
2 | -<module type="JAVA_MODULE" version="4"> | ||
3 | - <component name="NewModuleRootManager" inherit-compiler-output="true"> | ||
4 | - <exclude-output /> | ||
5 | - <content url="file://$MODULE_DIR$"> | ||
6 | - <sourceFolder url="file://$MODULE_DIR$/lib" isTestSource="false" /> | ||
7 | - <sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" /> | ||
8 | - <excludeFolder url="file://$MODULE_DIR$/.dart_tool" /> | ||
9 | - <excludeFolder url="file://$MODULE_DIR$/.idea" /> | ||
10 | - <excludeFolder url="file://$MODULE_DIR$/.pub" /> | ||
11 | - <excludeFolder url="file://$MODULE_DIR$/build" /> | ||
12 | - </content> | ||
13 | - <orderEntry type="sourceFolder" forTests="false" /> | ||
14 | - <orderEntry type="library" name="Dart SDK" level="project" /> | ||
15 | - <orderEntry type="library" name="Flutter Plugins" level="project" /> | ||
16 | - <orderEntry type="library" name="Dart Packages" level="project" /> | ||
17 | - </component> | ||
18 | -</module> |
benchmark/benchs.iml
deleted
100644 → 0
1 | -<?xml version="1.0" encoding="UTF-8"?> | ||
2 | -<module type="JAVA_MODULE" version="4"> | ||
3 | - <component name="NewModuleRootManager" inherit-compiler-output="true"> | ||
4 | - <exclude-output /> | ||
5 | - <content url="file://$MODULE_DIR$"> | ||
6 | - <sourceFolder url="file://$MODULE_DIR$/lib" isTestSource="false" /> | ||
7 | - <sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" /> | ||
8 | - <excludeFolder url="file://$MODULE_DIR$/.dart_tool" /> | ||
9 | - <excludeFolder url="file://$MODULE_DIR$/.idea" /> | ||
10 | - <excludeFolder url="file://$MODULE_DIR$/.pub" /> | ||
11 | - <excludeFolder url="file://$MODULE_DIR$/build" /> | ||
12 | - </content> | ||
13 | - <orderEntry type="sourceFolder" forTests="false" /> | ||
14 | - <orderEntry type="library" name="Dart SDK" level="project" /> | ||
15 | - <orderEntry type="library" name="Flutter Plugins" level="project" /> | ||
16 | - <orderEntry type="library" name="Dart Packages" level="project" /> | ||
17 | - </component> | ||
18 | -</module> |
benchmark/bloc-lib-GC-4.22.png
deleted
100644 → 0

165 KB
benchmark/bloc-lib-noGC-455.png
deleted
100644 → 0

168 KB
benchmark/bloc-nolib -noGC 4.56.png
deleted
100644 → 0

172 KB
benchmark/bloc-nolib-GC-4.16.png
deleted
100644 → 0

167 KB
benchmark/get-GC-4.14.png
deleted
100644 → 0

166 KB
benchmark/get-noGC-4.53.png
deleted
100644 → 0

167 KB
benchmark/getx-GC-4.13.png
deleted
100644 → 0

168 KB
benchmark/getx-noGC-4.53.png
deleted
100644 → 0

167 KB
1 | -// !$*UTF8*$! | ||
2 | -{ | ||
3 | - archiveVersion = 1; | ||
4 | - classes = { | ||
5 | - }; | ||
6 | - objectVersion = 46; | ||
7 | - objects = { | ||
8 | - | ||
9 | -/* Begin PBXBuildFile section */ | ||
10 | - 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; | ||
11 | - 2D5378261FAA1A9400D5DBA9 /* flutter_assets in Resources */ = {isa = PBXBuildFile; fileRef = 2D5378251FAA1A9400D5DBA9 /* flutter_assets */; }; | ||
12 | - 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; | ||
13 | - 3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; }; | ||
14 | - 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; | ||
15 | - 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; }; | ||
16 | - 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; | ||
17 | - 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 9740EEB21CF90195004384FC /* Debug.xcconfig */; }; | ||
18 | - 9740EEB51CF90195004384FC /* Generated.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 9740EEB31CF90195004384FC /* Generated.xcconfig */; }; | ||
19 | - 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; }; | ||
20 | - 97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; }; | ||
21 | - 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; | ||
22 | - 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; | ||
23 | - 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; | ||
24 | -/* End PBXBuildFile section */ | ||
25 | - | ||
26 | -/* Begin PBXCopyFilesBuildPhase section */ | ||
27 | - 9705A1C41CF9048500538489 /* Embed Frameworks */ = { | ||
28 | - isa = PBXCopyFilesBuildPhase; | ||
29 | - buildActionMask = 2147483647; | ||
30 | - dstPath = ""; | ||
31 | - dstSubfolderSpec = 10; | ||
32 | - files = ( | ||
33 | - 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */, | ||
34 | - 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */, | ||
35 | - ); | ||
36 | - name = "Embed Frameworks"; | ||
37 | - runOnlyForDeploymentPostprocessing = 0; | ||
38 | - }; | ||
39 | -/* End PBXCopyFilesBuildPhase section */ | ||
40 | - | ||
41 | -/* Begin PBXFileReference section */ | ||
42 | - 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; }; | ||
43 | - 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; }; | ||
44 | - 2D5378251FAA1A9400D5DBA9 /* flutter_assets */ = {isa = PBXFileReference; lastKnownFileType = folder; name = flutter_assets; path = Flutter/flutter_assets; sourceTree = SOURCE_ROOT; }; | ||
45 | - 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; }; | ||
46 | - 3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = "<group>"; }; | ||
47 | - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; }; | ||
48 | - 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; }; | ||
49 | - 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; }; | ||
50 | - 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; }; | ||
51 | - 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; }; | ||
52 | - 9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = "<group>"; }; | ||
53 | - 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; | ||
54 | - 97C146F21CF9000F007C117D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; }; | ||
55 | - 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; }; | ||
56 | - 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; }; | ||
57 | - 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; }; | ||
58 | - 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; | ||
59 | -/* End PBXFileReference section */ | ||
60 | - | ||
61 | -/* Begin PBXFrameworksBuildPhase section */ | ||
62 | - 97C146EB1CF9000F007C117D /* Frameworks */ = { | ||
63 | - isa = PBXFrameworksBuildPhase; | ||
64 | - buildActionMask = 2147483647; | ||
65 | - files = ( | ||
66 | - 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */, | ||
67 | - 3B80C3941E831B6300D905FE /* App.framework in Frameworks */, | ||
68 | - ); | ||
69 | - runOnlyForDeploymentPostprocessing = 0; | ||
70 | - }; | ||
71 | -/* End PBXFrameworksBuildPhase section */ | ||
72 | - | ||
73 | -/* Begin PBXGroup section */ | ||
74 | - 9740EEB11CF90186004384FC /* Flutter */ = { | ||
75 | - isa = PBXGroup; | ||
76 | - children = ( | ||
77 | - 2D5378251FAA1A9400D5DBA9 /* flutter_assets */, | ||
78 | - 3B80C3931E831B6300D905FE /* App.framework */, | ||
79 | - 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, | ||
80 | - 9740EEBA1CF902C7004384FC /* Flutter.framework */, | ||
81 | - 9740EEB21CF90195004384FC /* Debug.xcconfig */, | ||
82 | - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, | ||
83 | - 9740EEB31CF90195004384FC /* Generated.xcconfig */, | ||
84 | - ); | ||
85 | - name = Flutter; | ||
86 | - sourceTree = "<group>"; | ||
87 | - }; | ||
88 | - 97C146E51CF9000F007C117D = { | ||
89 | - isa = PBXGroup; | ||
90 | - children = ( | ||
91 | - 9740EEB11CF90186004384FC /* Flutter */, | ||
92 | - 97C146F01CF9000F007C117D /* Runner */, | ||
93 | - 97C146EF1CF9000F007C117D /* Products */, | ||
94 | - CF3B75C9A7D2FA2A4C99F110 /* Frameworks */, | ||
95 | - ); | ||
96 | - sourceTree = "<group>"; | ||
97 | - }; | ||
98 | - 97C146EF1CF9000F007C117D /* Products */ = { | ||
99 | - isa = PBXGroup; | ||
100 | - children = ( | ||
101 | - 97C146EE1CF9000F007C117D /* Runner.app */, | ||
102 | - ); | ||
103 | - name = Products; | ||
104 | - sourceTree = "<group>"; | ||
105 | - }; | ||
106 | - 97C146F01CF9000F007C117D /* Runner */ = { | ||
107 | - isa = PBXGroup; | ||
108 | - children = ( | ||
109 | - 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */, | ||
110 | - 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */, | ||
111 | - 97C146FA1CF9000F007C117D /* Main.storyboard */, | ||
112 | - 97C146FD1CF9000F007C117D /* Assets.xcassets */, | ||
113 | - 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, | ||
114 | - 97C147021CF9000F007C117D /* Info.plist */, | ||
115 | - 97C146F11CF9000F007C117D /* Supporting Files */, | ||
116 | - 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, | ||
117 | - 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, | ||
118 | - ); | ||
119 | - path = Runner; | ||
120 | - sourceTree = "<group>"; | ||
121 | - }; | ||
122 | - 97C146F11CF9000F007C117D /* Supporting Files */ = { | ||
123 | - isa = PBXGroup; | ||
124 | - children = ( | ||
125 | - 97C146F21CF9000F007C117D /* main.m */, | ||
126 | - ); | ||
127 | - name = "Supporting Files"; | ||
128 | - sourceTree = "<group>"; | ||
129 | - }; | ||
130 | -/* End PBXGroup section */ | ||
131 | - | ||
132 | -/* Begin PBXNativeTarget section */ | ||
133 | - 97C146ED1CF9000F007C117D /* Runner */ = { | ||
134 | - isa = PBXNativeTarget; | ||
135 | - buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; | ||
136 | - buildPhases = ( | ||
137 | - 9740EEB61CF901F6004384FC /* Run Script */, | ||
138 | - 97C146EA1CF9000F007C117D /* Sources */, | ||
139 | - 97C146EB1CF9000F007C117D /* Frameworks */, | ||
140 | - 97C146EC1CF9000F007C117D /* Resources */, | ||
141 | - 9705A1C41CF9048500538489 /* Embed Frameworks */, | ||
142 | - 3B06AD1E1E4923F5004D2608 /* Thin Binary */, | ||
143 | - ); | ||
144 | - buildRules = ( | ||
145 | - ); | ||
146 | - dependencies = ( | ||
147 | - ); | ||
148 | - name = Runner; | ||
149 | - productName = Runner; | ||
150 | - productReference = 97C146EE1CF9000F007C117D /* Runner.app */; | ||
151 | - productType = "com.apple.product-type.application"; | ||
152 | - }; | ||
153 | -/* End PBXNativeTarget section */ | ||
154 | - | ||
155 | -/* Begin PBXProject section */ | ||
156 | - 97C146E61CF9000F007C117D /* Project object */ = { | ||
157 | - isa = PBXProject; | ||
158 | - attributes = { | ||
159 | - LastUpgradeCheck = 0910; | ||
160 | - ORGANIZATIONNAME = "The Chromium Authors"; | ||
161 | - TargetAttributes = { | ||
162 | - 97C146ED1CF9000F007C117D = { | ||
163 | - CreatedOnToolsVersion = 7.3.1; | ||
164 | - }; | ||
165 | - }; | ||
166 | - }; | ||
167 | - buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; | ||
168 | - compatibilityVersion = "Xcode 3.2"; | ||
169 | - developmentRegion = English; | ||
170 | - hasScannedForEncodings = 0; | ||
171 | - knownRegions = ( | ||
172 | - en, | ||
173 | - Base, | ||
174 | - ); | ||
175 | - mainGroup = 97C146E51CF9000F007C117D; | ||
176 | - productRefGroup = 97C146EF1CF9000F007C117D /* Products */; | ||
177 | - projectDirPath = ""; | ||
178 | - projectRoot = ""; | ||
179 | - targets = ( | ||
180 | - 97C146ED1CF9000F007C117D /* Runner */, | ||
181 | - ); | ||
182 | - }; | ||
183 | -/* End PBXProject section */ | ||
184 | - | ||
185 | -/* Begin PBXResourcesBuildPhase section */ | ||
186 | - 97C146EC1CF9000F007C117D /* Resources */ = { | ||
187 | - isa = PBXResourcesBuildPhase; | ||
188 | - buildActionMask = 2147483647; | ||
189 | - files = ( | ||
190 | - 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, | ||
191 | - 9740EEB51CF90195004384FC /* Generated.xcconfig in Resources */, | ||
192 | - 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, | ||
193 | - 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */, | ||
194 | - 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, | ||
195 | - 2D5378261FAA1A9400D5DBA9 /* flutter_assets in Resources */, | ||
196 | - 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, | ||
197 | - ); | ||
198 | - runOnlyForDeploymentPostprocessing = 0; | ||
199 | - }; | ||
200 | -/* End PBXResourcesBuildPhase section */ | ||
201 | - | ||
202 | -/* Begin PBXShellScriptBuildPhase section */ | ||
203 | - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { | ||
204 | - isa = PBXShellScriptBuildPhase; | ||
205 | - buildActionMask = 2147483647; | ||
206 | - files = ( | ||
207 | - ); | ||
208 | - inputPaths = ( | ||
209 | - ); | ||
210 | - name = "Thin Binary"; | ||
211 | - outputPaths = ( | ||
212 | - ); | ||
213 | - runOnlyForDeploymentPostprocessing = 0; | ||
214 | - shellPath = /bin/sh; | ||
215 | - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" thin"; | ||
216 | - }; | ||
217 | - 9740EEB61CF901F6004384FC /* Run Script */ = { | ||
218 | - isa = PBXShellScriptBuildPhase; | ||
219 | - buildActionMask = 2147483647; | ||
220 | - files = ( | ||
221 | - ); | ||
222 | - inputPaths = ( | ||
223 | - ); | ||
224 | - name = "Run Script"; | ||
225 | - outputPaths = ( | ||
226 | - ); | ||
227 | - runOnlyForDeploymentPostprocessing = 0; | ||
228 | - shellPath = /bin/sh; | ||
229 | - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; | ||
230 | - }; | ||
231 | -/* End PBXShellScriptBuildPhase section */ | ||
232 | - | ||
233 | -/* Begin PBXSourcesBuildPhase section */ | ||
234 | - 97C146EA1CF9000F007C117D /* Sources */ = { | ||
235 | - isa = PBXSourcesBuildPhase; | ||
236 | - buildActionMask = 2147483647; | ||
237 | - files = ( | ||
238 | - 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */, | ||
239 | - 97C146F31CF9000F007C117D /* main.m in Sources */, | ||
240 | - 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, | ||
241 | - ); | ||
242 | - runOnlyForDeploymentPostprocessing = 0; | ||
243 | - }; | ||
244 | -/* End PBXSourcesBuildPhase section */ | ||
245 | - | ||
246 | -/* Begin PBXVariantGroup section */ | ||
247 | - 97C146FA1CF9000F007C117D /* Main.storyboard */ = { | ||
248 | - isa = PBXVariantGroup; | ||
249 | - children = ( | ||
250 | - 97C146FB1CF9000F007C117D /* Base */, | ||
251 | - ); | ||
252 | - name = Main.storyboard; | ||
253 | - sourceTree = "<group>"; | ||
254 | - }; | ||
255 | - 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { | ||
256 | - isa = PBXVariantGroup; | ||
257 | - children = ( | ||
258 | - 97C147001CF9000F007C117D /* Base */, | ||
259 | - ); | ||
260 | - name = LaunchScreen.storyboard; | ||
261 | - sourceTree = "<group>"; | ||
262 | - }; | ||
263 | -/* End PBXVariantGroup section */ | ||
264 | - | ||
265 | -/* Begin XCBuildConfiguration section */ | ||
266 | - 97C147031CF9000F007C117D /* Debug */ = { | ||
267 | - isa = XCBuildConfiguration; | ||
268 | - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; | ||
269 | - buildSettings = { | ||
270 | - ALWAYS_SEARCH_USER_PATHS = NO; | ||
271 | - CLANG_ANALYZER_NONNULL = YES; | ||
272 | - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; | ||
273 | - CLANG_CXX_LIBRARY = "libc++"; | ||
274 | - CLANG_ENABLE_MODULES = YES; | ||
275 | - CLANG_ENABLE_OBJC_ARC = YES; | ||
276 | - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; | ||
277 | - CLANG_WARN_BOOL_CONVERSION = YES; | ||
278 | - CLANG_WARN_COMMA = YES; | ||
279 | - CLANG_WARN_CONSTANT_CONVERSION = YES; | ||
280 | - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; | ||
281 | - CLANG_WARN_EMPTY_BODY = YES; | ||
282 | - CLANG_WARN_ENUM_CONVERSION = YES; | ||
283 | - CLANG_WARN_INFINITE_RECURSION = YES; | ||
284 | - CLANG_WARN_INT_CONVERSION = YES; | ||
285 | - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; | ||
286 | - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; | ||
287 | - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; | ||
288 | - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; | ||
289 | - CLANG_WARN_STRICT_PROTOTYPES = YES; | ||
290 | - CLANG_WARN_SUSPICIOUS_MOVE = YES; | ||
291 | - CLANG_WARN_UNREACHABLE_CODE = YES; | ||
292 | - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; | ||
293 | - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; | ||
294 | - COPY_PHASE_STRIP = NO; | ||
295 | - DEBUG_INFORMATION_FORMAT = dwarf; | ||
296 | - ENABLE_STRICT_OBJC_MSGSEND = YES; | ||
297 | - ENABLE_TESTABILITY = YES; | ||
298 | - GCC_C_LANGUAGE_STANDARD = gnu99; | ||
299 | - GCC_DYNAMIC_NO_PIC = NO; | ||
300 | - GCC_NO_COMMON_BLOCKS = YES; | ||
301 | - GCC_OPTIMIZATION_LEVEL = 0; | ||
302 | - GCC_PREPROCESSOR_DEFINITIONS = ( | ||
303 | - "DEBUG=1", | ||
304 | - "$(inherited)", | ||
305 | - ); | ||
306 | - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; | ||
307 | - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; | ||
308 | - GCC_WARN_UNDECLARED_SELECTOR = YES; | ||
309 | - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; | ||
310 | - GCC_WARN_UNUSED_FUNCTION = YES; | ||
311 | - GCC_WARN_UNUSED_VARIABLE = YES; | ||
312 | - IPHONEOS_DEPLOYMENT_TARGET = 8.0; | ||
313 | - MTL_ENABLE_DEBUG_INFO = YES; | ||
314 | - ONLY_ACTIVE_ARCH = YES; | ||
315 | - SDKROOT = iphoneos; | ||
316 | - TARGETED_DEVICE_FAMILY = "1,2"; | ||
317 | - }; | ||
318 | - name = Debug; | ||
319 | - }; | ||
320 | - 97C147041CF9000F007C117D /* Release */ = { | ||
321 | - isa = XCBuildConfiguration; | ||
322 | - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; | ||
323 | - buildSettings = { | ||
324 | - ALWAYS_SEARCH_USER_PATHS = NO; | ||
325 | - CLANG_ANALYZER_NONNULL = YES; | ||
326 | - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; | ||
327 | - CLANG_CXX_LIBRARY = "libc++"; | ||
328 | - CLANG_ENABLE_MODULES = YES; | ||
329 | - CLANG_ENABLE_OBJC_ARC = YES; | ||
330 | - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; | ||
331 | - CLANG_WARN_BOOL_CONVERSION = YES; | ||
332 | - CLANG_WARN_COMMA = YES; | ||
333 | - CLANG_WARN_CONSTANT_CONVERSION = YES; | ||
334 | - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; | ||
335 | - CLANG_WARN_EMPTY_BODY = YES; | ||
336 | - CLANG_WARN_ENUM_CONVERSION = YES; | ||
337 | - CLANG_WARN_INFINITE_RECURSION = YES; | ||
338 | - CLANG_WARN_INT_CONVERSION = YES; | ||
339 | - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; | ||
340 | - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; | ||
341 | - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; | ||
342 | - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; | ||
343 | - CLANG_WARN_STRICT_PROTOTYPES = YES; | ||
344 | - CLANG_WARN_SUSPICIOUS_MOVE = YES; | ||
345 | - CLANG_WARN_UNREACHABLE_CODE = YES; | ||
346 | - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; | ||
347 | - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; | ||
348 | - COPY_PHASE_STRIP = NO; | ||
349 | - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; | ||
350 | - ENABLE_NS_ASSERTIONS = NO; | ||
351 | - ENABLE_STRICT_OBJC_MSGSEND = YES; | ||
352 | - GCC_C_LANGUAGE_STANDARD = gnu99; | ||
353 | - GCC_NO_COMMON_BLOCKS = YES; | ||
354 | - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; | ||
355 | - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; | ||
356 | - GCC_WARN_UNDECLARED_SELECTOR = YES; | ||
357 | - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; | ||
358 | - GCC_WARN_UNUSED_FUNCTION = YES; | ||
359 | - GCC_WARN_UNUSED_VARIABLE = YES; | ||
360 | - IPHONEOS_DEPLOYMENT_TARGET = 8.0; | ||
361 | - MTL_ENABLE_DEBUG_INFO = NO; | ||
362 | - SDKROOT = iphoneos; | ||
363 | - TARGETED_DEVICE_FAMILY = "1,2"; | ||
364 | - VALIDATE_PRODUCT = YES; | ||
365 | - }; | ||
366 | - name = Release; | ||
367 | - }; | ||
368 | - 97C147061CF9000F007C117D /* Debug */ = { | ||
369 | - isa = XCBuildConfiguration; | ||
370 | - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; | ||
371 | - buildSettings = { | ||
372 | - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; | ||
373 | - CURRENT_PROJECT_VERSION = 1; | ||
374 | - ENABLE_BITCODE = NO; | ||
375 | - FRAMEWORK_SEARCH_PATHS = ( | ||
376 | - "$(inherited)", | ||
377 | - "$(PROJECT_DIR)/Flutter", | ||
378 | - ); | ||
379 | - INFOPLIST_FILE = Runner/Info.plist; | ||
380 | - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; | ||
381 | - LIBRARY_SEARCH_PATHS = ( | ||
382 | - "$(inherited)", | ||
383 | - "$(PROJECT_DIR)/Flutter", | ||
384 | - ); | ||
385 | - PRODUCT_BUNDLE_IDENTIFIER = de.udos.flutterStateManagement; | ||
386 | - PRODUCT_NAME = "$(TARGET_NAME)"; | ||
387 | - VERSIONING_SYSTEM = "apple-generic"; | ||
388 | - }; | ||
389 | - name = Debug; | ||
390 | - }; | ||
391 | - 97C147071CF9000F007C117D /* Release */ = { | ||
392 | - isa = XCBuildConfiguration; | ||
393 | - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; | ||
394 | - buildSettings = { | ||
395 | - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; | ||
396 | - CURRENT_PROJECT_VERSION = 1; | ||
397 | - ENABLE_BITCODE = NO; | ||
398 | - FRAMEWORK_SEARCH_PATHS = ( | ||
399 | - "$(inherited)", | ||
400 | - "$(PROJECT_DIR)/Flutter", | ||
401 | - ); | ||
402 | - INFOPLIST_FILE = Runner/Info.plist; | ||
403 | - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; | ||
404 | - LIBRARY_SEARCH_PATHS = ( | ||
405 | - "$(inherited)", | ||
406 | - "$(PROJECT_DIR)/Flutter", | ||
407 | - ); | ||
408 | - PRODUCT_BUNDLE_IDENTIFIER = de.udos.flutterStateManagement; | ||
409 | - PRODUCT_NAME = "$(TARGET_NAME)"; | ||
410 | - VERSIONING_SYSTEM = "apple-generic"; | ||
411 | - }; | ||
412 | - name = Release; | ||
413 | - }; | ||
414 | -/* End XCBuildConfiguration section */ | ||
415 | - | ||
416 | -/* Begin XCConfigurationList section */ | ||
417 | - 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { | ||
418 | - isa = XCConfigurationList; | ||
419 | - buildConfigurations = ( | ||
420 | - 97C147031CF9000F007C117D /* Debug */, | ||
421 | - 97C147041CF9000F007C117D /* Release */, | ||
422 | - ); | ||
423 | - defaultConfigurationIsVisible = 0; | ||
424 | - defaultConfigurationName = Release; | ||
425 | - }; | ||
426 | - 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { | ||
427 | - isa = XCConfigurationList; | ||
428 | - buildConfigurations = ( | ||
429 | - 97C147061CF9000F007C117D /* Debug */, | ||
430 | - 97C147071CF9000F007C117D /* Release */, | ||
431 | - ); | ||
432 | - defaultConfigurationIsVisible = 0; | ||
433 | - defaultConfigurationName = Release; | ||
434 | - }; | ||
435 | -/* End XCConfigurationList section */ | ||
436 | - }; | ||
437 | - rootObject = 97C146E61CF9000F007C117D /* Project object */; | ||
438 | -} |
1 | -import 'package:benckmark/_bloc_lib/_shared/entitity.dart'; | ||
2 | -import 'package:benckmark/_bloc_lib/_shared/item.entity.dart'; | ||
3 | - | ||
4 | -import 'items.events.dart'; | ||
5 | -import 'items.state.dart'; | ||
6 | - | ||
7 | -class ItemsBloc extends EntityBloc<EntityEvent, ItemsState> { | ||
8 | - @override | ||
9 | - ItemsState get initialState => ItemsState(sampleItems); | ||
10 | - | ||
11 | - @override | ||
12 | - Stream<ItemsState> mapEventToState(EntityEvent event) async* { | ||
13 | - if (event is AddItemEvent) { | ||
14 | - final List<Item> items = List.from(state.entities)..add(event.item); | ||
15 | - | ||
16 | - yield ItemsState(items); | ||
17 | - } else if (event is AddItemsEvent) { | ||
18 | - final List<Item> items = List.from(state.entities)..addAll(event.items); | ||
19 | - | ||
20 | - yield ItemsState(items); | ||
21 | - } else if (event is RemoveItemsEvent) { | ||
22 | - final List<Item> items = List.from(state.entities); | ||
23 | - | ||
24 | - items.removeWhere((item) => event.itemIds.contains(item.id)); | ||
25 | - | ||
26 | - yield ItemsState(items); | ||
27 | - } | ||
28 | - } | ||
29 | -} |
1 | -import 'package:benckmark/_bloc_lib/_shared/entitity.dart'; | ||
2 | -import 'package:benckmark/_bloc_lib/_shared/item.entity.dart'; | ||
3 | - | ||
4 | -class AddItemEvent extends EntityEvent<Item> { | ||
5 | - final Item item; | ||
6 | - | ||
7 | - AddItemEvent(this.item); | ||
8 | - | ||
9 | - @override | ||
10 | - List<Object> get props => [item]; | ||
11 | -} | ||
12 | - | ||
13 | -class AddItemsEvent extends EntityEvent<Item> { | ||
14 | - final List<Item> items; | ||
15 | - | ||
16 | - AddItemsEvent(this.items); | ||
17 | - | ||
18 | - @override | ||
19 | - List<Object> get props => [items]; | ||
20 | -} | ||
21 | - | ||
22 | -class RemoveItemsEvent extends EntityEvent<Item> { | ||
23 | - final List<String> itemIds; | ||
24 | - | ||
25 | - RemoveItemsEvent(this.itemIds); | ||
26 | - | ||
27 | - @override | ||
28 | - List<Object> get props => [itemIds]; | ||
29 | -} |
1 | -import 'package:bloc/bloc.dart'; | ||
2 | -import 'package:equatable/equatable.dart'; | ||
3 | -import 'package:meta/meta.dart'; | ||
4 | -import 'package:uuid/uuid.dart'; | ||
5 | - | ||
6 | -@immutable | ||
7 | -class Entity extends Equatable { | ||
8 | - final String id; | ||
9 | - | ||
10 | - Entity([String id]) : this.id = id ?? Uuid().v4(); | ||
11 | - | ||
12 | - @override | ||
13 | - List<Object> get props => [id]; | ||
14 | -} | ||
15 | - | ||
16 | -@immutable | ||
17 | -abstract class EntityEvent<E extends Entity> extends Equatable {} | ||
18 | - | ||
19 | -@immutable | ||
20 | -class EntityState<E extends Entity> extends Equatable { | ||
21 | - final Map<String, E> dictionary; | ||
22 | - final List<String> ids; | ||
23 | - final List<E> entities; | ||
24 | - | ||
25 | - EntityState([this.entities = const []]) | ||
26 | - : dictionary = Map.fromIterable(entities, | ||
27 | - key: (entity) => entity.id, value: (entity) => entity), | ||
28 | - ids = List.from(entities.map((entity) => entity.id)); | ||
29 | - | ||
30 | - @override | ||
31 | - List<Object> get props => [dictionary, ids, entities]; | ||
32 | -} | ||
33 | - | ||
34 | -abstract class EntityBloc<Event extends EntityEvent, State extends EntityState> | ||
35 | - extends Bloc<Event, State> {} |
1 | -import 'package:meta/meta.dart'; | ||
2 | - | ||
3 | -import 'entitity.dart'; | ||
4 | - | ||
5 | -@immutable | ||
6 | -class Item extends Entity { | ||
7 | - final String title; | ||
8 | - | ||
9 | - Item({String id, this.title}) : super(); | ||
10 | - | ||
11 | - @override | ||
12 | - List<Object> get props => super.props..addAll([id, title]); | ||
13 | -} | ||
14 | - | ||
15 | -final List<Item> sampleItems = [ | ||
16 | - Item(title: 'Item 1'), | ||
17 | - Item(title: 'Item 2'), | ||
18 | - Item(title: 'Item 3') | ||
19 | -]; |
benchmark/lib/_bloc_lib/app.dart
deleted
100644 → 0
1 | -import 'package:flutter/material.dart'; | ||
2 | -import 'package:flutter_bloc/flutter_bloc.dart'; | ||
3 | -import 'package:benckmark/_bloc_lib/_blocs/items/items.bloc.dart'; | ||
4 | -import 'package:benckmark/_bloc_lib/_blocs/items/items.events.dart'; | ||
5 | -import 'package:benckmark/_bloc_lib/_blocs/items/items.state.dart'; | ||
6 | -import 'package:benckmark/_bloc_lib/_shared/item.entity.dart'; | ||
7 | - | ||
8 | -class App extends StatelessWidget { | ||
9 | - Widget build(BuildContext context) { | ||
10 | - return MultiBlocProvider( | ||
11 | - providers: [ | ||
12 | - BlocProvider<ItemsBloc>( | ||
13 | - create: (context) => ItemsBloc(), | ||
14 | - ), | ||
15 | - ], | ||
16 | - child: MaterialApp( | ||
17 | - title: 'BLoC Lib Sample', | ||
18 | - theme: ThemeData( | ||
19 | - primarySwatch: Colors.blue, | ||
20 | - ), | ||
21 | - home: Page( | ||
22 | - title: 'BLoC Lib Sample', | ||
23 | - ), | ||
24 | - ), | ||
25 | - ); | ||
26 | - } | ||
27 | -} | ||
28 | - | ||
29 | -class Page extends StatefulWidget { | ||
30 | - Page({ | ||
31 | - Key key, | ||
32 | - this.title, | ||
33 | - }) : super(key: key); | ||
34 | - | ||
35 | - final String title; | ||
36 | - | ||
37 | - @override | ||
38 | - _PageState createState() => _PageState(); | ||
39 | -} | ||
40 | - | ||
41 | -class _PageState extends State<Page> { | ||
42 | - @override | ||
43 | - void initState() { | ||
44 | - fill(); | ||
45 | - super.initState(); | ||
46 | - } | ||
47 | - | ||
48 | - fill() async { | ||
49 | - for (int i = 0; i < 10; i++) { | ||
50 | - await Future.delayed(Duration(milliseconds: 500)); | ||
51 | - BlocProvider.of<ItemsBloc>(context) | ||
52 | - .add(AddItemEvent(Item(title: DateTime.now().toString()))); | ||
53 | - } | ||
54 | - print("It's done. Print now!"); | ||
55 | - } | ||
56 | - | ||
57 | - @override | ||
58 | - Widget build(BuildContext context) { | ||
59 | - return Scaffold( | ||
60 | - appBar: AppBar( | ||
61 | - title: Text(widget.title), | ||
62 | - ), | ||
63 | - body: ListViewWidget(), | ||
64 | - ); | ||
65 | - } | ||
66 | -} | ||
67 | - | ||
68 | -class ListViewWidget extends StatelessWidget { | ||
69 | - @override | ||
70 | - Widget build(BuildContext context) { | ||
71 | - // ignore: close_sinks | ||
72 | - final _itemsBloc = BlocProvider.of<ItemsBloc>(context); | ||
73 | - | ||
74 | - return BlocBuilder<ItemsBloc, ItemsState>( | ||
75 | - bloc: _itemsBloc, | ||
76 | - builder: (context, entityState) { | ||
77 | - return ListView.builder( | ||
78 | - padding: EdgeInsets.fromLTRB(0.0, 8.0, 0.0, 8.0), | ||
79 | - itemCount: entityState.entities.length, | ||
80 | - itemBuilder: (context, index) { | ||
81 | - final item = entityState.entities[index]; | ||
82 | - | ||
83 | - return ListTile( | ||
84 | - title: Text(item.title), | ||
85 | - ); | ||
86 | - }, | ||
87 | - ); | ||
88 | - }, | ||
89 | - ); | ||
90 | - } | ||
91 | -} |
benchmark/mobx-GC-4.18.png
deleted
100644 → 0

165 KB
benchmark/mobx-noGC-4.58.png
deleted
100644 → 0

168 KB
benchmark/provider-GC-4.15.png
deleted
100644 → 0

164 KB
benchmark/provider-noGC-4.55.png
deleted
100644 → 0

166 KB
benchmark/redux-GC-4.16.png
deleted
100644 → 0

165 KB
benchmark/redux-noGC-4.56.png
deleted
100644 → 0

168 KB
benchmark/state_managers/.gitignore
0 → 100644
1 | +# Miscellaneous | ||
2 | +*.class | ||
3 | +*.log | ||
4 | +*.pyc | ||
5 | +*.swp | ||
6 | +.DS_Store | ||
7 | +.atom/ | ||
8 | +.buildlog/ | ||
9 | +.history | ||
10 | +.svn/ | ||
11 | + | ||
12 | +# IntelliJ related | ||
13 | +*.iml | ||
14 | +*.ipr | ||
15 | +*.iws | ||
16 | +.idea/ | ||
17 | + | ||
18 | +# The .vscode folder contains launch configuration and tasks you configure in | ||
19 | +# VS Code which you may wish to be included in version control, so this line | ||
20 | +# is commented out by default. | ||
21 | +#.vscode/ | ||
22 | + | ||
23 | +# Flutter/Dart/Pub related | ||
24 | +**/doc/api/ | ||
25 | +**/ios/Flutter/.last_build_id | ||
26 | +.dart_tool/ | ||
27 | +.flutter-plugins | ||
28 | +.flutter-plugins-dependencies | ||
29 | +.packages | ||
30 | +.pub-cache/ | ||
31 | +.pub/ | ||
32 | +/build/ | ||
33 | + | ||
34 | +# Web related | ||
35 | +lib/generated_plugin_registrant.dart | ||
36 | + | ||
37 | +# Symbolication related | ||
38 | +app.*.symbols | ||
39 | + | ||
40 | +# Obfuscation related | ||
41 | +app.*.map.json | ||
42 | + | ||
43 | +# Exceptions to above rules. | ||
44 | +!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages |
benchmark/state_managers/README.md
0 → 100644
1 | +# Flutter State Management |
No preview for this file type
1 | +import 'dart:async'; | ||
2 | + | ||
3 | +import 'package:bloc/bloc.dart'; | ||
4 | +import 'package:benckmark/item.dart'; | ||
5 | + | ||
6 | +part 'items_event.dart'; | ||
7 | + | ||
8 | +class ItemsBloc extends Bloc<ItemsEvent, List<Item>> { | ||
9 | + ItemsBloc() { | ||
10 | + Timer.periodic(const Duration(milliseconds: 500), (timer) { | ||
11 | + add(AddItemEvent(Item(title: DateTime.now().toString()))); | ||
12 | + if (state.length == 10) { | ||
13 | + timer.cancel(); | ||
14 | + print("It's done. Print now!"); | ||
15 | + } | ||
16 | + }); | ||
17 | + } | ||
18 | + | ||
19 | + @override | ||
20 | + List<Item> get initialState => sampleItems; | ||
21 | + | ||
22 | + @override | ||
23 | + Stream<List<Item>> mapEventToState(ItemsEvent event) async* { | ||
24 | + if (event is AddItemEvent) { | ||
25 | + yield List.from(state)..add(event.item); | ||
26 | + } | ||
27 | + } | ||
28 | +} |
1 | +import 'package:flutter/material.dart'; | ||
2 | +import 'package:flutter_bloc/flutter_bloc.dart'; | ||
3 | +import 'package:benckmark/item.dart'; | ||
4 | +import 'package:benckmark/_bloc_lib/_blocs/items/items_bloc.dart'; | ||
5 | + | ||
6 | +class App extends StatelessWidget { | ||
7 | + Widget build(BuildContext context) { | ||
8 | + return MaterialApp( | ||
9 | + title: 'BLoC Lib Sample', | ||
10 | + theme: ThemeData(primarySwatch: Colors.blue), | ||
11 | + home: BlocProvider( | ||
12 | + create: (_) => ItemsBloc(), | ||
13 | + child: Page(title: 'BLoC Lib Sample'), | ||
14 | + ), | ||
15 | + ); | ||
16 | + } | ||
17 | +} | ||
18 | + | ||
19 | +class Page extends StatelessWidget { | ||
20 | + const Page({Key key, this.title}) : super(key: key); | ||
21 | + | ||
22 | + final String title; | ||
23 | + | ||
24 | + @override | ||
25 | + Widget build(BuildContext context) { | ||
26 | + return Scaffold( | ||
27 | + appBar: AppBar(title: Text(title)), | ||
28 | + body: BlocBuilder<ItemsBloc, List<Item>>( | ||
29 | + builder: (context, items) { | ||
30 | + return ListView.builder( | ||
31 | + padding: EdgeInsets.fromLTRB(0.0, 8.0, 0.0, 8.0), | ||
32 | + itemCount: items.length, | ||
33 | + itemBuilder: (context, index) { | ||
34 | + return ListTile(title: Text(items[index].title)); | ||
35 | + }, | ||
36 | + ); | ||
37 | + }, | ||
38 | + ), | ||
39 | + ); | ||
40 | + } | ||
41 | +} |
-
Please register or login to post a comment