From 52beb51a540d65944cc1caa1cf5ca3aacc55f48b Mon Sep 17 00:00:00 2001 From: KAWASAKIAKASEI <1043501005qq@gmail.com> Date: Tue, 10 Mar 2026 23:39:51 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=BB=E9=A1=B5=E6=B7=BB=E5=8A=A0=E5=BA=95?= =?UTF-8?q?=E6=A0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 3 ++ README.md | 31 ++-------------- lib/assets/add.png | Bin 0 -> 191 bytes lib/assets/add_circle.png | Bin 0 -> 607 bytes lib/assets/arrow_back.png | Bin 0 -> 302 bytes lib/assets/arrow_back_ios.png | Bin 0 -> 276 bytes lib/assets/arrow_forward.png | Bin 0 -> 298 bytes lib/assets/block.png | Bin 0 -> 598 bytes lib/assets/cancel.png | Bin 0 -> 663 bytes lib/assets/chevron_right.png | Bin 0 -> 226 bytes lib/assets/close.png | Bin 0 -> 302 bytes lib/assets/delete.png | Bin 0 -> 225 bytes lib/assets/group.png | Bin 0 -> 515 bytes lib/assets/groups.png | Bin 0 -> 415 bytes lib/assets/home.png | Bin 0 -> 327 bytes lib/assets/menu.png | Bin 0 -> 185 bytes lib/assets/person.png | Bin 0 -> 423 bytes lib/assets/search.png | Bin 0 -> 451 bytes lib/assets/settings.png | Bin 0 -> 701 bytes lib/assets/star.png | Bin 0 -> 566 bytes lib/assets/thumb_up.png | Bin 0 -> 395 bytes lib/pages/home/index.dart | 17 +++++++++ lib/pages/main/index.dart | 63 ++++++++++++++++++++++++++++++--- lib/pages/myfriends/index.dart | 17 +++++++++ lib/pages/profile/index.dart | 17 +++++++++ pubspec.yaml | 3 ++ test/widget_test.dart | 3 +- 27 files changed, 118 insertions(+), 36 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 lib/assets/add.png create mode 100644 lib/assets/add_circle.png create mode 100644 lib/assets/arrow_back.png create mode 100644 lib/assets/arrow_back_ios.png create mode 100644 lib/assets/arrow_forward.png create mode 100644 lib/assets/block.png create mode 100644 lib/assets/cancel.png create mode 100644 lib/assets/chevron_right.png create mode 100644 lib/assets/close.png create mode 100644 lib/assets/delete.png create mode 100644 lib/assets/group.png create mode 100644 lib/assets/groups.png create mode 100644 lib/assets/home.png create mode 100644 lib/assets/menu.png create mode 100644 lib/assets/person.png create mode 100644 lib/assets/search.png create mode 100644 lib/assets/settings.png create mode 100644 lib/assets/star.png create mode 100644 lib/assets/thumb_up.png create mode 100644 lib/pages/home/index.dart create mode 100644 lib/pages/myfriends/index.dart create mode 100644 lib/pages/profile/index.dart diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..9ddf6b2 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "cmake.ignoreCMakeListsMissing": true +} \ No newline at end of file diff --git a/README.md b/README.md index 0306ea1..08df926 100644 --- a/README.md +++ b/README.md @@ -1,29 +1,2 @@ -<<<<<<< HEAD -# mydearest - -======= -<<<<<<< HEAD -# Flutter_First_Project - -======= -# mydearest - ->>>>>>> f48a885 (第2次提交) -A new Flutter project. - -## Getting Started - -This project is a starting point for a Flutter application. - -A few resources to get you started if this is your first Flutter project: - -- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) -- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) - -For help getting started with Flutter development, view the -[online documentation](https://docs.flutter.dev/), which offers tutorials, -samples, guidance on mobile development, and a full API reference. -<<<<<<< HEAD -======= ->>>>>>> 4bb705a (第一次提交) ->>>>>>> f48a885 (第2次提交) +# 第一次Flutter项目开发 +这是第4次提交 \ No newline at end of file diff --git a/lib/assets/add.png b/lib/assets/add.png new file mode 100644 index 0000000000000000000000000000000000000000..cde0ac7965b458a6a06b2b68dd691f06394069c0 GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjC7v#hAr*{of^KsjaNx+^-SNBs zsY>o=#V5)WninS=WDX3`ji zdvSHnW|jx7ccYk6p3PL^@;Q59wPiZz0q)&j86w!LBU`*3BW`WE;LRu)t@nTZ14agh l|NkGVtho%dpABR`Geg`C3qyfD4AX!j44$rjF6*2UngAjiL|^~_ literal 0 HcmV?d00001 diff --git a/lib/assets/add_circle.png b/lib/assets/add_circle.png new file mode 100644 index 0000000000000000000000000000000000000000..554363868e22ce32a194bcea0d42958db9bb173c GIT binary patch literal 607 zcmV-l0-*hgP)s~s)^cNn@^ zRn-^QIjCLQgY(8Z@kp(Cj+Q~-s1Oe&5MMClr}=$=^A+x<9O9uf%oAD$9@PfKJ%qo_ zbEGdhubIR3HNG-WGt5O}fb*^ef#8R62+(|kAHNf3O~~WZ7~uTD3cHUxF&_%F2Wpsg zW)zJ9i+F;1CoG3QXfJEk@(JojE2MXxVrr&!imART<|kOye{k(y1MYe2pDVfb)l)x@ zxk0=+A%y*$FeFF&y5@VMV%ivR1KwNV2AmuJ2WT(UG3&%A8Ut>?)B+f>lb6In4;pXb zND;G|Ux3EI2F^Q1c5;Q_xp|KC?(>>C+!31Z=4pnxXc_1X@ze(K7s9nCfwK$uw$^-h zhIvBEz~X#9KSuD;oOs1uzh%ff*Ey)|(}S{zJ103s8^6b#w`5=w;t5CHHU}R6++jHw zctI~da?u>eMd!~-136VyO?~HzS;s3(%%7<}Idbzxp7$Cgl46GJfue(Ldx_T<*BbN* t|F!-H00960*Z+2{00006Nklx002ovPDHLkV1l(I7GVGY literal 0 HcmV?d00001 diff --git a/lib/assets/arrow_back.png b/lib/assets/arrow_back.png new file mode 100644 index 0000000000000000000000000000000000000000..c6a7466e2daa93a44b2dcc9ed75abbf7b6774944 GIT binary patch literal 302 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gjk3C%+Ln;{GOy0|T$UvZV-Jj_@S{n_9ci!#r*4=T!+qV`uFzGNkMK~(0YR-Dp|SIyt!Dia^=`{Bp(qlU;NedJa4`@m0Ta x>5P!a!aeW*v&sW~`TsxveDk|N1{=t`%naM|`wbOLi@Jd#44$rjF6*2UngD$%d4>Q0 literal 0 HcmV?d00001 diff --git a/lib/assets/arrow_back_ios.png b/lib/assets/arrow_back_ios.png new file mode 100644 index 0000000000000000000000000000000000000000..726b8a01f2855bb72575c7295fffbd667c847eaf GIT binary patch literal 276 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjCp}#pLn;{0T#e;AtiZ$mVdnC= zPB!=CwhQN2AFOh*Jv8rEhOpw&wcnIg8>g|kp8CH$LE}!({A`AMzvDR`7C+mtTYW*n z^E<}R|JXI>Fv*;=?l@>9Smx zi&#`Hyg+4N>n3QQu=ptgVikW*8&Q>bL;GZe)<1jG+^2%AcGC$DQ1Rs X-NlBBt8SYCMHoC?{an^LB{Ts5j-_kh literal 0 HcmV?d00001 diff --git a/lib/assets/arrow_forward.png b/lib/assets/arrow_forward.png new file mode 100644 index 0000000000000000000000000000000000000000..ae7b82eb9c265a3bee1efec8764949c3e0fc9f45 GIT binary patch literal 298 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gj_dQ)4Ln;{GOg7|WQWS7K8XUp6 zbgA4y>6e@_{txbX|J3@X^Vas~9HzX`S~zUE87OqRUc)z}q<;KN>WpKi9`;JKW1yTahC@<*8cb z{4=TRxfhteXEJzZ(qOur!5}^}OK;iIE4CbpHW$tan^@{D&6HftSi~`bQA+h%7gL7s s={^71_W*tP|39BZpa_t`2J$L1!xFD~hTE&WT7V)9p00i_>zopr0BkOA>i_@% literal 0 HcmV?d00001 diff --git a/lib/assets/block.png b/lib/assets/block.png new file mode 100644 index 0000000000000000000000000000000000000000..817859e54d3fc6e8e18bc51e3c10735ef8cda802 GIT binary patch literal 598 zcmV-c0;&CpP)Yel{{qIC<2a57aU3t=G=}7An{Ghv1m?H#g5QuPHIQA$1Vw0YXRP4WK6=8~7XnN>v zS-}giu@g+E(^q`Ib`fFn-jcXF!7{Pd>>`qF5KfTIrS|)ZY%L(QeMCZm4>d8yT*>C4 zNQ4*dZpqV$vaT241nBJR1axht;F2dokB(^AhOFQPH~}LCK$$7dv4txu0>^&===JHy zUO)kqPh@!~`Vfxf7aRk5nbawK zmXGc0TZE8*yA>A{BS*=isXa~$u6>T$JFEyOL1BY`R+SIRkh^LYLNRi7sTNM%ZZem( z0;)-pWW+s&8%f9>VZ{TCNLE#&+8~~Ca|K+L$TT?vQ3h4zTwR{sD3C|oHvR(u0RR7V k0Rhhd000I_L_t&o0H5_4Kn;?^F8}}l07*qoM6N<$g66giY5)KL literal 0 HcmV?d00001 diff --git a/lib/assets/cancel.png b/lib/assets/cancel.png new file mode 100644 index 0000000000000000000000000000000000000000..10bc82c776772c561243e3120b3e02ff9dce3fbb GIT binary patch literal 663 zcmV;I0%-k-P)2Dj%-}&S_ckXanu#p%03A=>WV9_mAK--wXTtyyg+e{3;#da-EVfY zON!uYzB#!w_nv#s&g>*Fvj6;feuEIgZc!AsMNzDZHtwlSw;jOX4#HY^#pfQ8Dd>(} zYSB1^FzpuWb+5sAJpMwn!t$1Ro*&KU^L(Cw+@;?z8UIT<}aSjTsQ)|7c1jR9hx z%<%N_Nt}DeM4MVBwYas4!!*n2J<9l?bwP-uF<=#UP(2CD^{50IlOb{0^j;gm<_<^> zj?|47dRw&2R%QjiM`VP7ImQdu1K1Goxq>xB)X0V8oNWCVK7sh4#MC+N6pZJ>J5R zeP}iR0F8kKocD}8$qfxJA@+*P5sCPSo}cDw4d(I%rU{Y)0e&L00006Nkl+}rLn;{GTz2GYP!M3fkdwOn z!teQB{uhkOFH3OcrR-B)XC$Sy;s1l^=No_AXo&d0ul4C(^z%E)WfvnA!dzU;_pf$y zQ8-p%IH4k>gQMVsVY9;l9wz3f6pj-d{ZAXuD>m4NYn@#A#=G)Oe1e1Uyhx4 WEe)gZTBiX;7(8A5T-G@yGywpIF;RyA literal 0 HcmV?d00001 diff --git a/lib/assets/close.png b/lib/assets/close.png new file mode 100644 index 0000000000000000000000000000000000000000..86977287dd10a47020d70c3bc71247373f79d184 GIT binary patch literal 302 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 literal 0 HcmV?d00001 diff --git a/lib/assets/star.png b/lib/assets/star.png new file mode 100644 index 0000000000000000000000000000000000000000..c95b16f403c3ac8a4e38e9fc74bad8805cc76db9 GIT binary patch literal 566 zcmV-60?GY}P)hM9L4WU(lA=!Y|^x8!)TL8lW0)-^eJ=VU0N~Ln`RQ=rb zisIS^VHmcZh@ZP&QC!P_8+(`)Sk%jMRIfCU5I6Q+WOm*Zl+zn97b#zc#GqQO4nUj* zLZ1lif?zxzcLe32%-kr;x3$?2oFFlnOeUu+cu_NhA$6CXUlGk9za{B|FOVA2Kec|=?| zn42-7cSGVe*5*ziXTSpOaEwVwIfxL-y}h=r+2`I7aUE6}7#^R7XM|%49f=;#A9|0}D@UOL zyG%Z69LJ?q>JSAT+YPxHaLtW2Mdq*2fam$n<9_o_a|`_j z+@@dqd7*(%`b)lbgI@pu0RR6F&$1E#000I_L_t&o03PbVF*x#|qCZHqI>Bsi@zl*I) zFZuKH6Clg7O;Hr82d@m^E%9RG7EX%aC!GthmEvEjS2Ebp`cvlDD?E8LU z>HwVmkpSqHst$nZ5Rp_>wWO*7&^Pjjbv>dAK)*bD1Uh2%3^f2Q_jxolHOAbj3^f2Q z^-M!lKch-C0Dikml0Vn>F1e`wfPDPeg}xPe%Ccre-dL+2apME{X5_R p00960_OXf#00006Nkl createState() => _HomeViewState(); +} + +class _HomeViewState extends State { + @override + Widget build(BuildContext context) { + return Center( + child: Text("Home View"), + ); + } +} \ No newline at end of file diff --git a/lib/pages/main/index.dart b/lib/pages/main/index.dart index 73f75ef..5dbb8fa 100644 --- a/lib/pages/main/index.dart +++ b/lib/pages/main/index.dart @@ -1,4 +1,7 @@ import "package:flutter/material.dart"; +import '../home/index.dart'; +import '../myfriends/index.dart'; +import '../profile/index.dart'; class MainPage extends StatefulWidget { const MainPage({super.key}); @@ -8,14 +11,64 @@ class MainPage extends StatefulWidget { } class _MainPageState extends State { + // 定义数据 根据数据进行渲染导航键 + final List> _navList = [ + { + "icon": Icons.home_outlined, + "activeIcon": Icons.home, + "label": "Home", + }, + { + "icon": Icons.face_outlined, + "activeIcon": Icons.face, + "label": "MyFriends", + }, + { + "icon": Icons.person_outlined, + "activeIcon": Icons.person, + "label": "Profile", + }, + ]; + + // 根据数据渲染导航键 + List _buildNavItems() { + return List.generate(_navList.length, (int index) { + final navItem = _navList[index]; + return BottomNavigationBarItem( + icon: Icon(navItem["icon"]), + activeIcon: Icon(navItem["activeIcon"]), + label: navItem["label"], + ); + }); + } + + int _currentIndex = 0; // 当前选中的导航键索引 + + List get _pages { + return [ + const HomeView(), + const MyFriendsView(), + const ProfileView(), + ]; // 对应导航键的页面列表 + } + + @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: Text("Main Page"), - ), - body: Center( - child: Text("This is the main page."), + // 避开刘海屏等特殊屏幕区域 + body: SafeArea(child: IndexedStack( + index: _currentIndex, + children: _pages, + )), // 堆叠索引组件,根据当前索引显示对应的页面 + bottomNavigationBar: BottomNavigationBar( + currentIndex: _currentIndex, + items: _buildNavItems(), + onTap: (int index) { // 点击导航键时更新当前索引 + setState(() { + _currentIndex = index; + }); + }, ), ); } diff --git a/lib/pages/myfriends/index.dart b/lib/pages/myfriends/index.dart new file mode 100644 index 0000000..e7a41a4 --- /dev/null +++ b/lib/pages/myfriends/index.dart @@ -0,0 +1,17 @@ +import 'package:flutter/material.dart'; + +class MyFriendsView extends StatefulWidget { + const MyFriendsView({super.key}); + + @override + State createState() => _MyFriendsViewState(); +} + +class _MyFriendsViewState extends State { + @override + Widget build(BuildContext context) { + return Center( + child: Text("MyFriends View"), + ); + } +} \ No newline at end of file diff --git a/lib/pages/profile/index.dart b/lib/pages/profile/index.dart new file mode 100644 index 0000000..9ab5a98 --- /dev/null +++ b/lib/pages/profile/index.dart @@ -0,0 +1,17 @@ +import 'package:flutter/material.dart'; + +class ProfileView extends StatefulWidget { + const ProfileView({super.key}); + + @override + State createState() => _ProfileViewState(); +} + +class _ProfileViewState extends State { + @override + Widget build(BuildContext context) { + return Center( + child: Text("Profile View"), + ); + } +} \ No newline at end of file diff --git a/pubspec.yaml b/pubspec.yaml index af3d70e..121c081 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -61,6 +61,9 @@ flutter: # assets: # - images/a_dot_burr.jpeg # - images/a_dot_ham.jpeg + assets: + - lib/assets/images/ + - lib/assets/icons/ # An image asset can refer to one or more resolution-specific "variants", see # https://flutter.dev/to/resolution-aware-images diff --git a/test/widget_test.dart b/test/widget_test.dart index 199b2d4..7f364e4 100644 --- a/test/widget_test.dart +++ b/test/widget_test.dart @@ -8,12 +8,11 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:mydearest/main.dart'; void main() { testWidgets('Counter increments smoke test', (WidgetTester tester) async { // Build our app and trigger a frame. - await tester.pumpWidget(const MyApp()); + // Verify that our counter starts at 0. expect(find.text('0'), findsOneWidget);