├── ui
├── preview.png
└── attachment.png
├── web
├── assets
│ ├── ide.png
│ ├── Unisa.png
│ ├── group.png
│ ├── Pinterest.png
│ ├── Statusdark.png
│ ├── iPhoneXxc.png
│ ├── crystal-shaw-515211-unsplash.png
│ ├── joshua-rawson-harris-495411-unsplash.png
│ └── FontManifest.json
├── index.html
└── main.dart
├── lib
├── helper
│ └── ui_helper.dart
├── main.dart
└── view
│ ├── profile.dart
│ └── about.dart
├── pubspec.yaml
├── LICENSE.txt
├── test
└── widget_test.dart
├── README_CN.md
├── .gitignore
├── README.md
└── pubspec.lock
/ui/preview.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/flutter-ui-challenges/flutter_web_challenge_profile/HEAD/ui/preview.png
--------------------------------------------------------------------------------
/ui/attachment.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/flutter-ui-challenges/flutter_web_challenge_profile/HEAD/ui/attachment.png
--------------------------------------------------------------------------------
/web/assets/ide.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/flutter-ui-challenges/flutter_web_challenge_profile/HEAD/web/assets/ide.png
--------------------------------------------------------------------------------
/web/assets/Unisa.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/flutter-ui-challenges/flutter_web_challenge_profile/HEAD/web/assets/Unisa.png
--------------------------------------------------------------------------------
/web/assets/group.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/flutter-ui-challenges/flutter_web_challenge_profile/HEAD/web/assets/group.png
--------------------------------------------------------------------------------
/web/assets/Pinterest.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/flutter-ui-challenges/flutter_web_challenge_profile/HEAD/web/assets/Pinterest.png
--------------------------------------------------------------------------------
/web/assets/Statusdark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/flutter-ui-challenges/flutter_web_challenge_profile/HEAD/web/assets/Statusdark.png
--------------------------------------------------------------------------------
/web/assets/iPhoneXxc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/flutter-ui-challenges/flutter_web_challenge_profile/HEAD/web/assets/iPhoneXxc.png
--------------------------------------------------------------------------------
/web/assets/crystal-shaw-515211-unsplash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/flutter-ui-challenges/flutter_web_challenge_profile/HEAD/web/assets/crystal-shaw-515211-unsplash.png
--------------------------------------------------------------------------------
/web/assets/joshua-rawson-harris-495411-unsplash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/flutter-ui-challenges/flutter_web_challenge_profile/HEAD/web/assets/joshua-rawson-harris-495411-unsplash.png
--------------------------------------------------------------------------------
/web/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/web/assets/FontManifest.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "family": "MaterialIcons",
4 | "fonts": [
5 | {
6 | "asset": "https://fonts.gstatic.com/s/materialicons/v42/flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ.woff2"
7 | }
8 | ]
9 | }
10 |
11 | ]
12 |
--------------------------------------------------------------------------------
/web/main.dart:
--------------------------------------------------------------------------------
1 | // Copyright 2019 The Chromium Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style license that can be
3 | // found in the LICENSE file.
4 | import 'package:flutter_web_ui/ui.dart' as ui;
5 | import 'package:flutter_web_challenge_profile/main.dart' as app;
6 | main() async {
7 | await ui.webOnlyInitializePlatform();
8 | app.main();
9 | }
10 |
--------------------------------------------------------------------------------
/lib/helper/ui_helper.dart:
--------------------------------------------------------------------------------
1 | import 'dart:core';
2 |
3 | /// ui standard
4 | final standardWidth = 1400.0;
5 | final standardHeight = 900.0;
6 | int index = 0;
7 | /// late init
8 | double screenWidth;
9 | double screenHeight;
10 |
11 | /// scale [height] by [standardHeight]
12 | double realH(double height) {
13 | assert(screenHeight != 0.0);
14 | return height / standardHeight * screenHeight;
15 | }
16 |
17 | // scale [width] by [ standardWidth ]
18 | double realW(double width) {
19 | assert(screenWidth != 0.0);
20 | return width / standardWidth * screenWidth;
21 | }
22 |
--------------------------------------------------------------------------------
/pubspec.yaml:
--------------------------------------------------------------------------------
1 | name: flutter_web_challenge_profile
2 |
3 | environment:
4 | # You must be using Flutter >=1.5.0 or Dart >=2.3.0
5 | sdk: '>=2.3.0-dev.0.1 <3.0.0'
6 |
7 | dependencies:
8 | flutter_web: any
9 | flutter_web_ui: any
10 |
11 |
12 | dev_dependencies:
13 | build_runner: ^1.4.0
14 | build_web_compilers: ^2.0.0
15 |
16 | dependency_overrides:
17 | flutter_web:
18 | git:
19 | url: https://github.com/flutter/flutter_web
20 | path: packages/flutter_web
21 | flutter_web_ui:
22 | git:
23 | url: https://github.com/flutter/flutter_web
24 | path: packages/flutter_web_ui
25 | flutter_web_test:
26 | git:
27 | url: https://github.com/flutter/flutter_web
28 | path: packages/flutter_web_test
--------------------------------------------------------------------------------
/lib/main.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter_web/material.dart';
2 | import 'package:flutter_web_challenge_profile/view/about.dart';
3 |
4 | void main() => runApp(MyApp());
5 |
6 | class MyApp extends StatelessWidget {
7 | // This widget is the root of your application.
8 | @override
9 | Widget build(BuildContext context) {
10 | return MaterialApp(
11 | title: 'Flutter Demo',
12 | theme: ThemeData(
13 | // This is the theme of your application.
14 | //
15 | // Try running your application with "flutter run". You'll see the
16 | // application has a blue toolbar. Then, without quitting the app, try
17 | // changing the primarySwatch below to Colors.green and then invoke
18 | // "hot reload" (press "r" in the console where you ran "flutter run",
19 | // or simply save your changes to "hot reload" in a Flutter IDE).
20 | // Notice that the counter didn't reset back to zero; the application
21 | // is not restarted.
22 | primarySwatch: Colors.blue,
23 | ),
24 | home: AboutPage(),
25 | );
26 | }
27 | }
--------------------------------------------------------------------------------
/LICENSE.txt:
--------------------------------------------------------------------------------
1 | Copyright (c) 2019git commit -m "first commit" ditclear
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy
4 | of this software and associated documentation files (the "Software"), to deal
5 | in the Software without restriction, including without limitation the rights
6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | copies of the Software, and to permit persons to whom the Software is
8 | furnished to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in
11 | all copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 | THE SOFTWARE.
--------------------------------------------------------------------------------
/test/widget_test.dart:
--------------------------------------------------------------------------------
1 | // This is a basic Flutter widget test.
2 | //
3 | // To perform an interaction with a widget in your test, use the WidgetTester
4 | // utility that Flutter provides. For example, you can send tap and scroll
5 | // gestures. You can also use WidgetTester to find child widgets in the widget
6 | // tree, read text, and verify that the values of widget properties are correct.
7 |
8 | import 'package:flutter/material.dart';
9 | import 'package:flutter_test/flutter_test.dart';
10 |
11 | import 'package:flutter_web_challenge_profile/main.dart';
12 |
13 | void main() {
14 | testWidgets('Counter increments smoke test', (WidgetTester tester) async {
15 | // Build our app and trigger a frame.
16 | await tester.pumpWidget(MyApp());
17 |
18 | // Verify that our counter starts at 0.
19 | expect(find.text('0'), findsOneWidget);
20 | expect(find.text('1'), findsNothing);
21 |
22 | // Tap the '+' icon and trigger a frame.
23 | await tester.tap(find.byIcon(Icons.add));
24 | await tester.pump();
25 |
26 | // Verify that our counter has incremented.
27 | expect(find.text('0'), findsNothing);
28 | expect(find.text('1'), findsOneWidget);
29 | });
30 | }
31 |
--------------------------------------------------------------------------------
/README_CN.md:
--------------------------------------------------------------------------------
1 | # flutter_web_challenge_profile
2 |
3 | 使用Flutter_web实现[uplabs](https://www.uplabs.com/posts/google-maps-redesign-919dd0d6-0883-4378-b5b2-f77e36adb6b5)上Google Maps的UI挑战
4 |
5 | > 设计师 : [cassian.design](https://www.uplabs.com/cassian)
6 | >
7 | > Uplabs :
8 | >
9 | > 开发者 : [ditclear](https://github.com/ditclear)
10 |
11 | #### 体验一下
12 |
13 | 首先,确保安装了相关的环境,请参考[Flutter-web](https://github.com/flutter/flutter_web).
14 |
15 | 然后克隆
16 |
17 | > git clone https://github.com/flutter-ui-challenges/flutter_web_challenge_googlemaps.git
18 |
19 | 你可以使用Android Studio 、IntelliJ或者Visual Studio Code打开项目,然后运行`main.dart`文件
20 |
21 | #### 效果图
22 |
23 | 
24 |
25 | 
26 |
27 |
28 |
29 | ### License
30 |
31 | ```
32 | Copyright 2019 ditclear
33 |
34 | Licensed under the Apache License, Version 2.0 (the "License");
35 | you may not use this file except in compliance with the License.
36 | You may obtain a copy of the License at
37 |
38 | http://www.apache.org/licenses/LICENSE-2.0
39 |
40 | Unless required by applicable law or agreed to in writing, software
41 | distributed under the License is distributed on an "AS IS" BASIS,
42 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
43 | See the License for the specific language governing permissions and
44 | limitations under the License.
45 | ```
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
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 | # Visual Studio Code related
19 | .vscode/
20 |
21 | # Flutter/Dart/Pub related
22 | **/doc/api/
23 | .dart_tool/
24 | .flutter-plugins
25 | .packages
26 | .pub-cache/
27 | .pub/
28 | /build/
29 |
30 | # Android related
31 | **/android/**/gradle-wrapper.jar
32 | **/android/.gradle
33 | **/android/captures/
34 | **/android/gradlew
35 | **/android/gradlew.bat
36 | **/android/local.properties
37 | **/android/**/GeneratedPluginRegistrant.java
38 |
39 | # iOS/XCode related
40 | **/ios/**/*.mode1v3
41 | **/ios/**/*.mode2v3
42 | **/ios/**/*.moved-aside
43 | **/ios/**/*.pbxuser
44 | **/ios/**/*.perspectivev3
45 | **/ios/**/*sync/
46 | **/ios/**/.sconsign.dblite
47 | **/ios/**/.tags*
48 | **/ios/**/.vagrant/
49 | **/ios/**/DerivedData/
50 | **/ios/**/Icon?
51 | **/ios/**/Pods/
52 | **/ios/**/.symlinks/
53 | **/ios/**/profile
54 | **/ios/**/xcuserdata
55 | **/ios/.generated/
56 | **/ios/Flutter/App.framework
57 | **/ios/Flutter/Flutter.framework
58 | **/ios/Flutter/Generated.xcconfig
59 | **/ios/Flutter/app.flx
60 | **/ios/Flutter/app.zip
61 | **/ios/Flutter/flutter_assets/
62 | **/ios/ServiceDefinitions.json
63 | **/ios/Runner/GeneratedPluginRegistrant.*
64 |
65 | # Exceptions to above rules.
66 | !**/ios/**/default.mode1v3
67 | !**/ios/**/default.mode2v3
68 | !**/ios/**/default.pbxuser
69 | !**/ios/**/default.perspectivev3
70 | !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
71 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # flutter_web_challenge_profile
2 |
3 | Use Flutter_web💪 to implement the UI challenge of Google Maps on [uplabs](https://www.uplabs.com/posts/google-maps-redesign-919dd0d6-0883-4378-b5b2-f77e36adb6b5) .
4 |
5 | [中文版本](README_CN.md)
6 |
7 | > Designer : [cassian.design](https://www.uplabs.com/cassian)
8 | >
9 | > Uplabs :
10 | >
11 | > Developer : [ditclear](https://github.com/ditclear)
12 |
13 | ### Run
14 |
15 | First, make sure the relevant environment is installed, please refer to [Flutter-web](https://github.com/flutter/flutter_web).
16 |
17 | Then clone
18 |
19 | > git clone https://github.com/flutter-ui-challenges/flutter_web_challenge_googlemaps.git
20 |
21 | You can open the project with Android Studio, IntelliJ or Visual Studio Code and run the `main.dart` file.
22 |
23 | ### Challenge
24 |
25 |
26 |
27 | 
28 |
29 | 
30 |
31 | ### License
32 |
33 | ```
34 | Copyright 2019 ditclear
35 |
36 | Licensed under the Apache License, Version 2.0 (the "License");
37 | you may not use this file except in compliance with the License.
38 | You may obtain a copy of the License at
39 |
40 | http://www.apache.org/licenses/LICENSE-2.0
41 |
42 | Unless required by applicable law or agreed to in writing, software
43 | distributed under the License is distributed on an "AS IS" BASIS,
44 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
45 | See the License for the specific language governing permissions and
46 | limitations under the License.
47 | ```
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/lib/view/profile.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter_web/material.dart';
2 | import 'package:flutter_web_challenge_profile/helper/ui_helper.dart';
3 |
4 | class ProfilePage extends StatefulWidget {
5 | @override
6 | State createState() {
7 | return _ProfileState();
8 | }
9 | }
10 |
11 | class _ProfileState extends State {
12 | @override
13 | Widget build(BuildContext context) {
14 | screenWidth = MediaQuery.of(context).size.width;
15 | screenHeight = MediaQuery.of(context).size.height;
16 | return Material(
17 | child: Scaffold(
18 | body: DefaultTextStyle(
19 | style: TextStyle(
20 | fontFamily: 'Poppins', color: Colors.black, fontSize: realW(13)),
21 | child: Container(
22 | width: screenWidth,
23 | height: screenHeight,
24 | child: Row(
25 | children: [
26 | Container(
27 | width: realW(314),
28 | height: double.infinity,
29 | child: Column(
30 | crossAxisAlignment: CrossAxisAlignment.start,
31 | children: [
32 | Padding(
33 | padding: EdgeInsets.fromLTRB(
34 | realW(93), realH(35), 0, realH(110)),
35 | child: Icon(
36 | Icons.menu,
37 | size: realW(24),
38 | color: Colors.grey,
39 | ),
40 | ),
41 | Padding(
42 | padding:
43 | EdgeInsets.only(left: realW(93), bottom: realH(34)),
44 | child: GestureDetector(
45 | onTap: () {
46 | Navigator.of(context).pop();
47 | },
48 | child: Text(
49 | "ABOUT ME",
50 | ),
51 | ),
52 | ),
53 | Padding(
54 | padding:
55 | EdgeInsets.only(left: realW(93), bottom: realH(34)),
56 | child: Text(
57 | "PORTFOLIO",
58 | style:
59 | TextStyle(decoration: TextDecoration.underline),
60 | ),
61 | ),
62 | Padding(
63 | padding:
64 | EdgeInsets.only(left: realW(93), bottom: realH(34)),
65 | child: Text(
66 | "MEMBERS",
67 | ),
68 | ),
69 | Padding(
70 | padding:
71 | EdgeInsets.only(left: realW(93), bottom: realH(34)),
72 | child: Text(
73 | "CONTACT",
74 | ),
75 | ),
76 | ],
77 | ),
78 | ),
79 | Container(
80 | width: realW(315),
81 | height: double.infinity,
82 | child: SingleChildScrollView(
83 | child: Column(
84 | mainAxisSize: MainAxisSize.max,
85 | crossAxisAlignment: CrossAxisAlignment.start,
86 | children: [
87 | Padding(
88 | padding: EdgeInsets.only(
89 | top: realH(166), bottom: realH(13)),
90 | child: Text(
91 | 'JAMES CHARLETON',
92 | style: TextStyle(fontSize: realW(15)),
93 | ),
94 | ),
95 | Hero(
96 | tag: "tag",
97 | child: Padding(
98 | padding: EdgeInsets.only(bottom: realH(13)),
99 | child: Text(
100 | 'PORTFILIO',
101 | style: TextStyle(fontSize: realW(50)),
102 | ),
103 | ),
104 | ),
105 | Padding(
106 | padding: EdgeInsets.only(bottom: realH(10)),
107 | child: Hero(
108 | tag: 'image',
109 | child: Image.asset(
110 | index % 2 == 0
111 | ? 'crystal-shaw-515211-unsplash.png'
112 | : 'joshua-rawson-harris-495411-unsplash.png',
113 | width: realW(232),
114 | height: realH(287),
115 | fit: BoxFit.fill,
116 | alignment: Alignment.topLeft,
117 | ))),
118 | Hero(
119 | tag: 'desc',
120 | child: Material(
121 | child: Container(
122 | width: realW(263),
123 | color: Colors.transparent,
124 | padding: EdgeInsets.only(bottom: realH(10)),
125 | child: Text(
126 | """
127 | Hi my name is cassian I'm a UI/UX designer
128 | I've beem designing for about 3 years now
129 | I love working with creative individuals that
130 | can bring strong critique as well as laugh at
131 | latest meme
132 | """,
133 | style: TextStyle(
134 | fontSize: realW(12),
135 | height: realH(2),
136 | ),
137 | ),
138 | ),
139 | ),
140 | ),
141 | Padding(
142 | padding: EdgeInsets.only(top: realH(12.0)),
143 | child: Hero(
144 | tag: 'hire',
145 | child: FlatButton(
146 | color: const Color(0xff03E691),
147 | onPressed: () {},
148 | child: Container(
149 | width: realW(214),
150 | height: realH(43),
151 | alignment: Alignment.center,
152 | child: Text(
153 | 'HIRE ME',
154 | style: TextStyle(
155 | fontFamily: 'Montserrat',
156 | color: Colors.white,
157 | fontSize: realW(13)),
158 | )),
159 | ),
160 | ),
161 | )
162 | ],
163 | ),
164 | ),
165 | ),
166 | Container(
167 | width: realW(461),
168 | child: SingleChildScrollView(
169 | child: Column(
170 | crossAxisAlignment: CrossAxisAlignment.start,
171 | children: [
172 | Padding(
173 | padding: EdgeInsets.only(top: realH(176), bottom: realH(57)),
174 | child: Image.asset(
175 | 'iPhoneXxc.png',
176 | width: double.infinity,
177 | height: realH(445),
178 | fit: BoxFit.fill,
179 | ),
180 | ),
181 | Image.asset(
182 | 'Statusdark.png',
183 | height: realH(222),
184 | width: double.infinity,
185 | fit: BoxFit.fitWidth,
186 | ),
187 | ],
188 | ),
189 | ),
190 | ),
191 | Container(
192 | width: realW(310),
193 | height: double.infinity,
194 | padding: EdgeInsets.only(left: realW(28)),
195 | child: SingleChildScrollView(
196 | child: Column(
197 | crossAxisAlignment: CrossAxisAlignment.start,
198 | children: [
199 | Padding(
200 | padding: EdgeInsets.only(
201 | left: realW(200),
202 | top: realH(43),
203 | bottom: realH(80)),
204 | child: Hero(
205 | tag: 'search',
206 | child: Material(
207 | child: IconButton(
208 | onPressed: null,
209 | icon: Icon(
210 | Icons.search,
211 | size: realW(24),
212 | ),
213 | ),
214 | ),
215 | ),
216 | ),
217 | Padding(
218 | padding: EdgeInsets.only(bottom: realH(34)),
219 | child: Text(
220 | """DRIBBLE REDESIGN
221 |
222 | made much more easier to use with
223 | more features, the ui is do good you
224 | can take your eye off the app layout
225 | can be changed from grid to list, 2
226 | different accounts business account
227 | or just a normal one...….read more
228 |
229 | Colors
230 | """,
231 | style: TextStyle(
232 | fontSize: realW(11),
233 | height: 1.75,
234 | letterSpacing: 1.5),
235 | ),
236 | ),
237 | Padding(
238 | padding: EdgeInsets.only(bottom: realH(34)),
239 | child: Image.asset(
240 | "group.png",
241 | ),
242 | ),
243 | Padding(
244 | padding: EdgeInsets.only(bottom: realH(13)),
245 | child: Image.asset('ide.png'),
246 | ),
247 | Padding(
248 | padding: EdgeInsets.only(bottom: realH(34)),
249 | child: Text(
250 | """DRIBBLE REDESIGN
251 |
252 | user profile, dark mode an light mode
253 | the ui is simple and easy to use, attractive
254 | colors to win the users attention the
255 | inspiration of this design drawn from the
256 | new Facebook messenger ui…...read more
257 |
258 |
259 | Colors
260 | """,
261 | style: TextStyle(
262 | fontSize: realW(11),
263 | height: 1.75,
264 | letterSpacing: 1.5),
265 | ),
266 | ),
267 | Padding(
268 | padding: EdgeInsets.only(bottom: realH(34)),
269 | child: Image.asset(
270 | "group.png",
271 | ),
272 | ),
273 | Padding(
274 | padding: EdgeInsets.only(bottom: realH(13)),
275 | child: Image.asset('ide.png'),
276 | ),
277 | ],
278 | ),
279 | ),
280 | ),
281 | ],
282 | ),
283 | ),
284 | ),
285 | ),
286 | );
287 | }
288 | }
289 |
--------------------------------------------------------------------------------
/pubspec.lock:
--------------------------------------------------------------------------------
1 | # Generated by pub
2 | # See https://www.dartlang.org/tools/pub/glossary#lockfile
3 | packages:
4 | analyzer:
5 | dependency: transitive
6 | description:
7 | name: analyzer
8 | url: "https://pub.flutter-io.cn"
9 | source: hosted
10 | version: "0.36.3"
11 | archive:
12 | dependency: transitive
13 | description:
14 | name: archive
15 | url: "https://pub.flutter-io.cn"
16 | source: hosted
17 | version: "2.0.9"
18 | args:
19 | dependency: transitive
20 | description:
21 | name: args
22 | url: "https://pub.flutter-io.cn"
23 | source: hosted
24 | version: "1.5.2"
25 | async:
26 | dependency: transitive
27 | description:
28 | name: async
29 | url: "https://pub.flutter-io.cn"
30 | source: hosted
31 | version: "2.1.0"
32 | bazel_worker:
33 | dependency: transitive
34 | description:
35 | name: bazel_worker
36 | url: "https://pub.flutter-io.cn"
37 | source: hosted
38 | version: "0.1.21"
39 | boolean_selector:
40 | dependency: transitive
41 | description:
42 | name: boolean_selector
43 | url: "https://pub.flutter-io.cn"
44 | source: hosted
45 | version: "1.0.4"
46 | build:
47 | dependency: transitive
48 | description:
49 | name: build
50 | url: "https://pub.flutter-io.cn"
51 | source: hosted
52 | version: "1.1.4"
53 | build_config:
54 | dependency: transitive
55 | description:
56 | name: build_config
57 | url: "https://pub.flutter-io.cn"
58 | source: hosted
59 | version: "0.4.0"
60 | build_daemon:
61 | dependency: transitive
62 | description:
63 | name: build_daemon
64 | url: "https://pub.flutter-io.cn"
65 | source: hosted
66 | version: "1.0.0"
67 | build_modules:
68 | dependency: transitive
69 | description:
70 | name: build_modules
71 | url: "https://pub.flutter-io.cn"
72 | source: hosted
73 | version: "2.3.0"
74 | build_resolvers:
75 | dependency: transitive
76 | description:
77 | name: build_resolvers
78 | url: "https://pub.flutter-io.cn"
79 | source: hosted
80 | version: "1.0.5"
81 | build_runner:
82 | dependency: "direct dev"
83 | description:
84 | name: build_runner
85 | url: "https://pub.flutter-io.cn"
86 | source: hosted
87 | version: "1.5.1"
88 | build_runner_core:
89 | dependency: transitive
90 | description:
91 | name: build_runner_core
92 | url: "https://pub.flutter-io.cn"
93 | source: hosted
94 | version: "3.0.6"
95 | build_web_compilers:
96 | dependency: "direct dev"
97 | description:
98 | name: build_web_compilers
99 | url: "https://pub.flutter-io.cn"
100 | source: hosted
101 | version: "2.1.0"
102 | built_collection:
103 | dependency: transitive
104 | description:
105 | name: built_collection
106 | url: "https://pub.flutter-io.cn"
107 | source: hosted
108 | version: "4.2.2"
109 | built_value:
110 | dependency: transitive
111 | description:
112 | name: built_value
113 | url: "https://pub.flutter-io.cn"
114 | source: hosted
115 | version: "6.6.0"
116 | charcode:
117 | dependency: transitive
118 | description:
119 | name: charcode
120 | url: "https://pub.flutter-io.cn"
121 | source: hosted
122 | version: "1.1.2"
123 | code_builder:
124 | dependency: transitive
125 | description:
126 | name: code_builder
127 | url: "https://pub.flutter-io.cn"
128 | source: hosted
129 | version: "3.2.0"
130 | collection:
131 | dependency: transitive
132 | description:
133 | name: collection
134 | url: "https://pub.flutter-io.cn"
135 | source: hosted
136 | version: "1.14.11"
137 | convert:
138 | dependency: transitive
139 | description:
140 | name: convert
141 | url: "https://pub.flutter-io.cn"
142 | source: hosted
143 | version: "2.1.1"
144 | crypto:
145 | dependency: transitive
146 | description:
147 | name: crypto
148 | url: "https://pub.flutter-io.cn"
149 | source: hosted
150 | version: "2.0.6"
151 | csslib:
152 | dependency: transitive
153 | description:
154 | name: csslib
155 | url: "https://pub.flutter-io.cn"
156 | source: hosted
157 | version: "0.16.0"
158 | dart_style:
159 | dependency: transitive
160 | description:
161 | name: dart_style
162 | url: "https://pub.flutter-io.cn"
163 | source: hosted
164 | version: "1.2.7"
165 | fixnum:
166 | dependency: transitive
167 | description:
168 | name: fixnum
169 | url: "https://pub.flutter-io.cn"
170 | source: hosted
171 | version: "0.10.9"
172 | flutter_web:
173 | dependency: "direct main"
174 | description:
175 | path: "packages/flutter_web"
176 | ref: HEAD
177 | resolved-ref: "69acfd97c5a7bf0605e9a01df7749716ceb1707f"
178 | url: "https://github.com/flutter/flutter_web"
179 | source: git
180 | version: "0.0.0"
181 | flutter_web_test:
182 | dependency: "direct overridden"
183 | description:
184 | path: "packages/flutter_web_test"
185 | ref: HEAD
186 | resolved-ref: "69acfd97c5a7bf0605e9a01df7749716ceb1707f"
187 | url: "https://github.com/flutter/flutter_web"
188 | source: git
189 | version: "0.0.0"
190 | flutter_web_ui:
191 | dependency: "direct main"
192 | description:
193 | path: "packages/flutter_web_ui"
194 | ref: HEAD
195 | resolved-ref: "69acfd97c5a7bf0605e9a01df7749716ceb1707f"
196 | url: "https://github.com/flutter/flutter_web"
197 | source: git
198 | version: "0.0.0"
199 | front_end:
200 | dependency: transitive
201 | description:
202 | name: front_end
203 | url: "https://pub.flutter-io.cn"
204 | source: hosted
205 | version: "0.1.18"
206 | glob:
207 | dependency: transitive
208 | description:
209 | name: glob
210 | url: "https://pub.flutter-io.cn"
211 | source: hosted
212 | version: "1.1.7"
213 | graphs:
214 | dependency: transitive
215 | description:
216 | name: graphs
217 | url: "https://pub.flutter-io.cn"
218 | source: hosted
219 | version: "0.2.0"
220 | html:
221 | dependency: transitive
222 | description:
223 | name: html
224 | url: "https://pub.flutter-io.cn"
225 | source: hosted
226 | version: "0.14.0+2"
227 | http:
228 | dependency: transitive
229 | description:
230 | name: http
231 | url: "https://pub.flutter-io.cn"
232 | source: hosted
233 | version: "0.12.0+2"
234 | http_multi_server:
235 | dependency: transitive
236 | description:
237 | name: http_multi_server
238 | url: "https://pub.flutter-io.cn"
239 | source: hosted
240 | version: "2.1.0"
241 | http_parser:
242 | dependency: transitive
243 | description:
244 | name: http_parser
245 | url: "https://pub.flutter-io.cn"
246 | source: hosted
247 | version: "3.1.3"
248 | intl:
249 | dependency: transitive
250 | description:
251 | name: intl
252 | url: "https://pub.flutter-io.cn"
253 | source: hosted
254 | version: "0.15.8"
255 | io:
256 | dependency: transitive
257 | description:
258 | name: io
259 | url: "https://pub.flutter-io.cn"
260 | source: hosted
261 | version: "0.3.3"
262 | js:
263 | dependency: transitive
264 | description:
265 | name: js
266 | url: "https://pub.flutter-io.cn"
267 | source: hosted
268 | version: "0.6.1+1"
269 | json_annotation:
270 | dependency: transitive
271 | description:
272 | name: json_annotation
273 | url: "https://pub.flutter-io.cn"
274 | source: hosted
275 | version: "2.4.0"
276 | json_rpc_2:
277 | dependency: transitive
278 | description:
279 | name: json_rpc_2
280 | url: "https://pub.flutter-io.cn"
281 | source: hosted
282 | version: "2.1.0"
283 | kernel:
284 | dependency: transitive
285 | description:
286 | name: kernel
287 | url: "https://pub.flutter-io.cn"
288 | source: hosted
289 | version: "0.3.18"
290 | logging:
291 | dependency: transitive
292 | description:
293 | name: logging
294 | url: "https://pub.flutter-io.cn"
295 | source: hosted
296 | version: "0.11.3+2"
297 | matcher:
298 | dependency: transitive
299 | description:
300 | name: matcher
301 | url: "https://pub.flutter-io.cn"
302 | source: hosted
303 | version: "0.12.5"
304 | meta:
305 | dependency: transitive
306 | description:
307 | name: meta
308 | url: "https://pub.flutter-io.cn"
309 | source: hosted
310 | version: "1.1.6"
311 | mime:
312 | dependency: transitive
313 | description:
314 | name: mime
315 | url: "https://pub.flutter-io.cn"
316 | source: hosted
317 | version: "0.9.6+3"
318 | multi_server_socket:
319 | dependency: transitive
320 | description:
321 | name: multi_server_socket
322 | url: "https://pub.flutter-io.cn"
323 | source: hosted
324 | version: "1.0.2"
325 | node_preamble:
326 | dependency: transitive
327 | description:
328 | name: node_preamble
329 | url: "https://pub.flutter-io.cn"
330 | source: hosted
331 | version: "1.4.4"
332 | package_config:
333 | dependency: transitive
334 | description:
335 | name: package_config
336 | url: "https://pub.flutter-io.cn"
337 | source: hosted
338 | version: "1.0.5"
339 | package_resolver:
340 | dependency: transitive
341 | description:
342 | name: package_resolver
343 | url: "https://pub.flutter-io.cn"
344 | source: hosted
345 | version: "1.0.10"
346 | path:
347 | dependency: transitive
348 | description:
349 | name: path
350 | url: "https://pub.flutter-io.cn"
351 | source: hosted
352 | version: "1.6.2"
353 | pedantic:
354 | dependency: transitive
355 | description:
356 | name: pedantic
357 | url: "https://pub.flutter-io.cn"
358 | source: hosted
359 | version: "1.5.0"
360 | pool:
361 | dependency: transitive
362 | description:
363 | name: pool
364 | url: "https://pub.flutter-io.cn"
365 | source: hosted
366 | version: "1.4.0"
367 | protobuf:
368 | dependency: transitive
369 | description:
370 | name: protobuf
371 | url: "https://pub.flutter-io.cn"
372 | source: hosted
373 | version: "0.13.12"
374 | pub_semver:
375 | dependency: transitive
376 | description:
377 | name: pub_semver
378 | url: "https://pub.flutter-io.cn"
379 | source: hosted
380 | version: "1.4.2"
381 | pubspec_parse:
382 | dependency: transitive
383 | description:
384 | name: pubspec_parse
385 | url: "https://pub.flutter-io.cn"
386 | source: hosted
387 | version: "0.1.4"
388 | quiver:
389 | dependency: transitive
390 | description:
391 | name: quiver
392 | url: "https://pub.flutter-io.cn"
393 | source: hosted
394 | version: "2.0.2"
395 | scratch_space:
396 | dependency: transitive
397 | description:
398 | name: scratch_space
399 | url: "https://pub.flutter-io.cn"
400 | source: hosted
401 | version: "0.0.3+2"
402 | shelf:
403 | dependency: transitive
404 | description:
405 | name: shelf
406 | url: "https://pub.flutter-io.cn"
407 | source: hosted
408 | version: "0.7.5"
409 | shelf_packages_handler:
410 | dependency: transitive
411 | description:
412 | name: shelf_packages_handler
413 | url: "https://pub.flutter-io.cn"
414 | source: hosted
415 | version: "1.0.4"
416 | shelf_static:
417 | dependency: transitive
418 | description:
419 | name: shelf_static
420 | url: "https://pub.flutter-io.cn"
421 | source: hosted
422 | version: "0.2.8"
423 | shelf_web_socket:
424 | dependency: transitive
425 | description:
426 | name: shelf_web_socket
427 | url: "https://pub.flutter-io.cn"
428 | source: hosted
429 | version: "0.2.3"
430 | source_map_stack_trace:
431 | dependency: transitive
432 | description:
433 | name: source_map_stack_trace
434 | url: "https://pub.flutter-io.cn"
435 | source: hosted
436 | version: "1.1.5"
437 | source_maps:
438 | dependency: transitive
439 | description:
440 | name: source_maps
441 | url: "https://pub.flutter-io.cn"
442 | source: hosted
443 | version: "0.10.8"
444 | source_span:
445 | dependency: transitive
446 | description:
447 | name: source_span
448 | url: "https://pub.flutter-io.cn"
449 | source: hosted
450 | version: "1.5.5"
451 | stack_trace:
452 | dependency: transitive
453 | description:
454 | name: stack_trace
455 | url: "https://pub.flutter-io.cn"
456 | source: hosted
457 | version: "1.9.3"
458 | stream_channel:
459 | dependency: transitive
460 | description:
461 | name: stream_channel
462 | url: "https://pub.flutter-io.cn"
463 | source: hosted
464 | version: "2.0.0"
465 | stream_transform:
466 | dependency: transitive
467 | description:
468 | name: stream_transform
469 | url: "https://pub.flutter-io.cn"
470 | source: hosted
471 | version: "0.0.19"
472 | string_scanner:
473 | dependency: transitive
474 | description:
475 | name: string_scanner
476 | url: "https://pub.flutter-io.cn"
477 | source: hosted
478 | version: "1.0.4"
479 | term_glyph:
480 | dependency: transitive
481 | description:
482 | name: term_glyph
483 | url: "https://pub.flutter-io.cn"
484 | source: hosted
485 | version: "1.1.0"
486 | test:
487 | dependency: transitive
488 | description:
489 | name: test
490 | url: "https://pub.flutter-io.cn"
491 | source: hosted
492 | version: "1.6.4"
493 | test_api:
494 | dependency: transitive
495 | description:
496 | name: test_api
497 | url: "https://pub.flutter-io.cn"
498 | source: hosted
499 | version: "0.2.6"
500 | test_core:
501 | dependency: transitive
502 | description:
503 | name: test_core
504 | url: "https://pub.flutter-io.cn"
505 | source: hosted
506 | version: "0.2.6"
507 | timing:
508 | dependency: transitive
509 | description:
510 | name: timing
511 | url: "https://pub.flutter-io.cn"
512 | source: hosted
513 | version: "0.1.1+1"
514 | typed_data:
515 | dependency: transitive
516 | description:
517 | name: typed_data
518 | url: "https://pub.flutter-io.cn"
519 | source: hosted
520 | version: "1.1.6"
521 | vector_math:
522 | dependency: transitive
523 | description:
524 | name: vector_math
525 | url: "https://pub.flutter-io.cn"
526 | source: hosted
527 | version: "2.0.8"
528 | vm_service_client:
529 | dependency: transitive
530 | description:
531 | name: vm_service_client
532 | url: "https://pub.flutter-io.cn"
533 | source: hosted
534 | version: "0.2.6+2"
535 | watcher:
536 | dependency: transitive
537 | description:
538 | name: watcher
539 | url: "https://pub.flutter-io.cn"
540 | source: hosted
541 | version: "0.9.7+10"
542 | web_socket_channel:
543 | dependency: transitive
544 | description:
545 | name: web_socket_channel
546 | url: "https://pub.flutter-io.cn"
547 | source: hosted
548 | version: "1.0.13"
549 | yaml:
550 | dependency: transitive
551 | description:
552 | name: yaml
553 | url: "https://pub.flutter-io.cn"
554 | source: hosted
555 | version: "2.1.15"
556 | sdks:
557 | dart: ">=2.3.0-dev.0.1 <3.0.0"
558 |
--------------------------------------------------------------------------------
/lib/view/about.dart:
--------------------------------------------------------------------------------
1 | import 'dart:math';
2 |
3 | import 'package:flutter_web/animation.dart';
4 | import 'package:flutter_web/material.dart';
5 | import 'package:flutter_web_challenge_profile/helper/ui_helper.dart';
6 | import 'package:flutter_web_challenge_profile/view/profile.dart';
7 |
8 | class AboutPage extends StatefulWidget {
9 | @override
10 | State createState() {
11 | return _AboutState();
12 | }
13 | }
14 |
15 | class _AboutState extends State with TickerProviderStateMixin {
16 | AnimationController controller;
17 | Animation animation;
18 |
19 | @override
20 | void initState() {
21 | super.initState();
22 | controller =
23 | AnimationController(vsync: this, duration: Duration(milliseconds: 300));
24 | animation = Tween(begin: 0.0, end: 762.0).animate(controller)
25 | ..addListener(() {
26 | setState(() {});
27 | })
28 | ..addStatusListener((status) {
29 | if (status == AnimationStatus.completed) {
30 | index = (index + 1) % 2;
31 | controller.reverse();
32 | }
33 | });
34 | }
35 |
36 | @override
37 | Widget build(BuildContext context) {
38 | screenWidth = MediaQuery.of(context).size.width;
39 | screenHeight = MediaQuery.of(context).size.height;
40 | return Material(
41 | child: Scaffold(
42 | body: DefaultTextStyle(
43 | style: TextStyle(
44 | fontFamily: 'Poppins', color: Colors.black, fontSize: realW(13)),
45 | child: Container(
46 | width: screenWidth,
47 | height: screenHeight,
48 | padding: const EdgeInsets.all(0),
49 | child: Row(
50 | children: [
51 | Container(
52 | width: realW(314),
53 | height: double.infinity,
54 | child: Column(
55 | crossAxisAlignment: CrossAxisAlignment.start,
56 | children: [
57 | Padding(
58 | padding: EdgeInsets.fromLTRB(
59 | realW(93), realH(35), 0, realH(110)),
60 | child: Icon(
61 | Icons.menu,
62 | size: realW(24),
63 | color: Colors.grey,
64 | ),
65 | ),
66 | Padding(
67 | padding:
68 | EdgeInsets.only(left: realW(93), bottom: realH(34)),
69 | child: Text(
70 | "ABOUT ME",
71 | style:
72 | TextStyle(decoration: TextDecoration.underline),
73 | ),
74 | ),
75 | Padding(
76 | padding:
77 | EdgeInsets.only(left: realW(93), bottom: realH(34)),
78 | child: GestureDetector(
79 | onTap: () {
80 | Navigator.of(context)
81 | .push(FadeRoute(page: ProfilePage()));
82 | },
83 | child: Text(
84 | "PORTFOLIO",
85 | ),
86 | ),
87 | ),
88 | Padding(
89 | padding:
90 | EdgeInsets.only(left: realW(93), bottom: realH(34)),
91 | child: Text(
92 | "MEMBERS",
93 | ),
94 | ),
95 | Padding(
96 | padding:
97 | EdgeInsets.only(left: realW(93), bottom: realH(34)),
98 | child: Text(
99 | "CONTACT",
100 | ),
101 | ),
102 | Padding(
103 | padding:
104 | EdgeInsets.only(left: realW(115), bottom: realH(34)),
105 | child: Container(
106 | width: realW(2),
107 | height: realH(100),
108 | alignment: Alignment.topCenter,
109 | color: Color(0xFFC8C1C1).withOpacity(0.38),
110 | child: Transform.translate(
111 | offset: Offset(0, realH(index * 50.0)),
112 | child: Container(
113 | width: realW(2),
114 | height: realH(50),
115 | color: Colors.black),
116 | ),
117 | ),
118 | ),
119 | Padding(
120 | padding:
121 | EdgeInsets.only(left: realW(106), bottom: realH(34)),
122 | child: Text(
123 | "${index + 1}-2",
124 | ),
125 | ),
126 | ],
127 | ),
128 | ),
129 | Container(
130 | width: realW(355),
131 | height: double.infinity,
132 | child: SingleChildScrollView(
133 | child: Column(
134 | crossAxisAlignment: CrossAxisAlignment.start,
135 | children: [
136 | Padding(
137 | padding: EdgeInsets.only(
138 | top: realH(166), bottom: realH(13)),
139 | child: Text(
140 | 'JAMES CHARLETON',
141 | style: TextStyle(fontSize: realW(15)),
142 | ),
143 | ),
144 | Padding(
145 | padding: EdgeInsets.only(bottom: realH(13)),
146 | child: Text(
147 | 'ABOUT ME',
148 | style: TextStyle(fontSize: realW(50)),
149 | ),
150 | ),
151 | Hero(
152 | tag: 'desc',
153 | child: Material(
154 | child: Container(
155 | color: Colors.transparent,
156 | width: realW(263),
157 | padding: EdgeInsets.only(bottom: realH(10)),
158 | child: Text(
159 | """
160 | Hi my name is cassian I'm a UI/UX designer
161 | I've beem designing for about 3 years now
162 | I love working with creative individuals that
163 | can bring strong critique as well as laugh at
164 | latest meme
165 | """,
166 | style: TextStyle(
167 | fontSize: realW(12), height: realH(2)),
168 | ),
169 | ),
170 | ),
171 | ),
172 | Padding(
173 | padding: EdgeInsets.only(
174 | bottom: realH(31),
175 | ),
176 | child: Text(
177 | 'SUBSCRIBE TO OUR NEWSLETTER',
178 | style: TextStyle(
179 | decoration: TextDecoration.underline,
180 | fontSize: realW(11)),
181 | ),
182 | ),
183 | Padding(
184 | padding: EdgeInsets.only(
185 | bottom: realH(12),
186 | ),
187 | child: Text(
188 | 'EXPERIENCE',
189 | style: TextStyle(fontFamily: 'Montserrat'),
190 | ),
191 | ),
192 | Padding(
193 | padding: EdgeInsets.only(
194 | bottom: realH(9),
195 | ),
196 | child: Text(
197 | '2016 to present PayPay inc.',
198 | style: TextStyle(
199 | fontFamily: 'Montserrat', fontSize: realW(13)),
200 | ),
201 | ),
202 | Padding(
203 | padding: EdgeInsets.only(
204 | bottom: realH(13),
205 | ),
206 | child: Text(
207 | 'Sr. User experience designer, Foundations',
208 | style: TextStyle(
209 | fontFamily: 'Montserrat',
210 | fontSize: realW(12),
211 | color: Color(0xff707070)),
212 | ),
213 | ),
214 | Padding(
215 | padding: EdgeInsets.only(
216 | bottom: realH(11),
217 | ),
218 | child: Text(
219 | 'PROJECTS',
220 | style: TextStyle(
221 | fontFamily: 'Montserrat', fontSize: realW(11)),
222 | ),
223 | ),
224 | Padding(
225 | padding: EdgeInsets.only(
226 | bottom: realH(12), left: realW(42)),
227 | child: Text(
228 | """
229 | Establishing design system artifacts and
230 | processes to improve design across the
231 | rage of product design
232 | """,
233 | style: TextStyle(fontSize: realW(11)),
234 | ),
235 | ),
236 | Padding(
237 | padding: EdgeInsets.all(0),
238 | child: Image.asset(
239 | index % 2 == 0 ? 'Unisa.png' : 'Pinterest.png'),
240 | )
241 | ],
242 | ),
243 | ),
244 | ),
245 | Container(
246 | width: realW(533),
247 | height: double.infinity,
248 | child: SingleChildScrollView(
249 | child: Column(
250 | crossAxisAlignment: CrossAxisAlignment.start,
251 | mainAxisAlignment: MainAxisAlignment.start,
252 | children: [
253 | Stack(
254 | children: [
255 | Hero(
256 | tag: 'image',
257 | child: GestureDetector(
258 | onTap: () {
259 | if (animation.value == 0) {
260 | controller.forward();
261 | }
262 | },
263 | child: Image.asset(
264 | index % 2 == 0
265 | ? 'crystal-shaw-515211-unsplash.png'
266 | : 'joshua-rawson-harris-495411-unsplash.png',
267 | width: realW(533),
268 | height: realH(762),
269 | fit: BoxFit.fill,
270 | ),
271 | )),
272 | Container(
273 | width: realW(533),
274 | height: realH(animation.value),
275 | decoration: BoxDecoration(
276 | color: Colors.black
277 | .withOpacity(animation.value / 762.0)),
278 | ),
279 | ],
280 | ),
281 | Padding(
282 | padding: EdgeInsets.only(top: realH(29.0)),
283 | child: Hero(
284 | tag: 'hire',
285 | child: FlatButton(
286 | color: const Color(0xff03E691),
287 | onPressed: () {},
288 | child: Container(
289 | width: realW(214),
290 | height: realH(43),
291 | alignment: Alignment.center,
292 | child: Text(
293 | 'HIRE ME',
294 | style: TextStyle(
295 | fontFamily: 'Montserrat',
296 | color: Colors.white,
297 | fontSize: realW(13)),
298 | )),
299 | ),
300 | ),
301 | )
302 | ],
303 | ),
304 | ),
305 | ),
306 | Container(
307 | width: realW(198),
308 | height: double.infinity,
309 | child: Column(
310 | crossAxisAlignment: CrossAxisAlignment.start,
311 | children: [
312 | Padding(
313 | padding: EdgeInsets.only(
314 | left: realW(103),
315 | top: realH(39),
316 | bottom: realH(604)),
317 | child: Hero(
318 | tag: 'search',
319 | child: Material(
320 | child: IconButton(
321 | onPressed: null,
322 | icon: Icon(
323 | Icons.search,
324 | size: realW(24),
325 | ),
326 | ),
327 | ),
328 | ),
329 | ),
330 | Padding(
331 | padding:
332 | EdgeInsets.only(left: realW(70), bottom: realH(34)),
333 | child: Text(
334 | "RESUME",
335 | ),
336 | ),
337 | Padding(
338 | padding:
339 | EdgeInsets.only(left: realW(70), bottom: realH(34)),
340 | child: Text(
341 | "LINKDIN",
342 | ),
343 | ),
344 | Padding(
345 | padding:
346 | EdgeInsets.only(left: realW(70), bottom: realH(34)),
347 | child: Text(
348 | "MEDIUM",
349 | ),
350 | ),
351 | ],
352 | ),
353 | ),
354 | ],
355 | ),
356 | ),
357 | ),
358 | ),
359 | );
360 | }
361 | }
362 |
363 | class FadeRoute extends PageRouteBuilder {
364 | final Widget page;
365 | @override
366 | Duration get transitionDuration => const Duration(milliseconds: 800);
367 |
368 | FadeRoute({this.page})
369 | : super(
370 | pageBuilder: (
371 | BuildContext context,
372 | Animation animation,
373 | Animation secondaryAnimation,
374 | ) =>
375 | page,
376 | transitionsBuilder: (
377 | BuildContext context,
378 | Animation animation,
379 | Animation secondaryAnimation,
380 | Widget child,
381 | ) =>
382 | FadeTransition(
383 | opacity: animation,
384 | child: child,
385 | ),
386 | );
387 | }
388 |
--------------------------------------------------------------------------------