Showing
5 changed files
with
425 additions
and
261 deletions
... | @@ -9,7 +9,6 @@ import 'package:one_poem/tiktok/widgets/tiktok_top_info.dart'; | ... | @@ -9,7 +9,6 @@ import 'package:one_poem/tiktok/widgets/tiktok_top_info.dart'; |
9 | import 'package:one_poem/tiktok/widgets/tiktok_video.dart'; | 9 | import 'package:one_poem/tiktok/widgets/tiktok_video.dart'; |
10 | import 'package:one_poem/tiktok/widgets/tiktok_video_button_column.dart'; | 10 | import 'package:one_poem/tiktok/widgets/tiktok_video_button_column.dart'; |
11 | import 'package:one_poem/tiktok/widgets/tiktok_video_poem.dart'; | 11 | import 'package:one_poem/tiktok/widgets/tiktok_video_poem.dart'; |
12 | -import 'package:one_poem/util/toast_utils.dart'; | ||
13 | import 'package:one_poem/widgets/bars/home_action_bar.dart'; | 12 | import 'package:one_poem/widgets/bars/home_action_bar.dart'; |
14 | import 'package:one_poem/widgets/my_app_bar.dart'; | 13 | import 'package:one_poem/widgets/my_app_bar.dart'; |
15 | import 'package:video_player/video_player.dart'; | 14 | import 'package:video_player/video_player.dart'; | ... | ... |
... | @@ -66,6 +66,7 @@ class TikTokVidePoem extends StatelessWidget { | ... | @@ -66,6 +66,7 @@ class TikTokVidePoem extends StatelessWidget { |
66 | fontSize: 20.px), | 66 | fontSize: 20.px), |
67 | ), | 67 | ), |
68 | Container( | 68 | Container( |
69 | + padding: EdgeInsets.only(right: 5.px), | ||
69 | alignment: Alignment.centerRight, | 70 | alignment: Alignment.centerRight, |
70 | width: double.infinity, | 71 | width: double.infinity, |
71 | child: Text( | 72 | child: Text( | ... | ... |
... | @@ -5,7 +5,8 @@ import 'package:flutter/material.dart'; | ... | @@ -5,7 +5,8 @@ import 'package:flutter/material.dart'; |
5 | import 'package:flutter/services.dart'; | 5 | import 'package:flutter/services.dart'; |
6 | import 'package:one_poem/timeline/models/friend_entity.dart'; | 6 | import 'package:one_poem/timeline/models/friend_entity.dart'; |
7 | import 'package:one_poem/timeline/widgets/friend_cell.dart'; | 7 | import 'package:one_poem/timeline/widgets/friend_cell.dart'; |
8 | -import 'package:one_poem/timeline/widgets/header_view.dart'; | 8 | +import 'package:one_poem/widgets/bars/timeline_menu_bar.dart'; |
9 | +import 'package:one_poem/widgets/my_app_bar.dart'; | ||
9 | 10 | ||
10 | class TimelinesPage extends StatefulWidget { | 11 | class TimelinesPage extends StatefulWidget { |
11 | const TimelinesPage({Key? key}) : super(key: key); | 12 | const TimelinesPage({Key? key}) : super(key: key); |
... | @@ -14,11 +15,11 @@ class TimelinesPage extends StatefulWidget { | ... | @@ -14,11 +15,11 @@ class TimelinesPage extends StatefulWidget { |
14 | _TimelinesPageState createState() => _TimelinesPageState(); | 15 | _TimelinesPageState createState() => _TimelinesPageState(); |
15 | } | 16 | } |
16 | 17 | ||
17 | -class _TimelinesPageState extends State<TimelinesPage>{ | 18 | +class _TimelinesPageState extends State<TimelinesPage> { |
18 | final ScrollController _scrollController = ScrollController(); | 19 | final ScrollController _scrollController = ScrollController(); |
19 | double _opacity = 0; | 20 | double _opacity = 0; |
20 | 21 | ||
21 | - FriendEntity _friendmodelEntity = FriendEntity(); | 22 | + FriendEntity _friendModelEntity = FriendEntity(); |
22 | 23 | ||
23 | Future<String> loadAsset() async { | 24 | Future<String> loadAsset() async { |
24 | return await rootBundle.loadString('assets/data/Data.json'); | 25 | return await rootBundle.loadString('assets/data/Data.json'); |
... | @@ -28,59 +29,51 @@ class _TimelinesPageState extends State<TimelinesPage>{ | ... | @@ -28,59 +29,51 @@ class _TimelinesPageState extends State<TimelinesPage>{ |
28 | void initState() { | 29 | void initState() { |
29 | super.initState(); | 30 | super.initState(); |
30 | 31 | ||
31 | - loadAsset().then((value){ | 32 | + loadAsset().then((value) { |
32 | var json = jsonDecode(value); | 33 | var json = jsonDecode(value); |
33 | - _friendmodelEntity = FriendEntity.fromJson(json); | 34 | + _friendModelEntity = FriendEntity.fromJson(json); |
34 | setState(() {}); | 35 | setState(() {}); |
35 | }); | 36 | }); |
36 | 37 | ||
37 | - | ||
38 | _scrollController.addListener(() { | 38 | _scrollController.addListener(() { |
39 | - | 39 | + double alpha = _scrollController.offset / 200; |
40 | - double alph = _scrollController.offset/200; | 40 | + if (alpha < 0) { |
41 | - if (alph < 0) { | 41 | + alpha = 0; |
42 | - alph = 0; | 42 | + } else if (alpha > 1) { |
43 | - } else if (alph > 1) { | 43 | + alpha = 1; |
44 | - alph = 1; | ||
45 | } | 44 | } |
46 | setState(() { | 45 | setState(() { |
47 | - _opacity = alph; | 46 | + _opacity = alpha; |
48 | }); | 47 | }); |
49 | - | ||
50 | - | ||
51 | }); | 48 | }); |
52 | - | ||
53 | } | 49 | } |
54 | 50 | ||
55 | - Widget _mainListViewBuidler(BuildContext context , int index) { | 51 | + Widget _mainListViewBuilder(BuildContext context, int index) { |
56 | - return FriendCell(model: _friendmodelEntity.data[index],); | 52 | + return FriendCell( |
53 | + model: _friendModelEntity.data[index], | ||
54 | + ); | ||
57 | } | 55 | } |
58 | 56 | ||
59 | - | ||
60 | @override | 57 | @override |
61 | Widget build(BuildContext context) { | 58 | Widget build(BuildContext context) { |
62 | - | ||
63 | return Scaffold( | 59 | return Scaffold( |
64 | - body: Stack( | 60 | + appBar: const MyAppBar( |
61 | + isBack: false, | ||
62 | + isTransparent: true, | ||
63 | + homeMenuHeader: TimelineMenuHeader(), | ||
64 | + ), | ||
65 | + body: ListView( | ||
66 | + padding: const EdgeInsets.only(top: 0), | ||
67 | + controller: _scrollController, | ||
65 | children: <Widget>[ | 68 | children: <Widget>[ |
66 | - ListView( | 69 | + ListView.builder( |
67 | padding: const EdgeInsets.only(top: 0), | 70 | padding: const EdgeInsets.only(top: 0), |
68 | - controller: _scrollController, | 71 | + itemBuilder: _mainListViewBuilder, |
69 | - children: <Widget>[ | 72 | + itemCount: _friendModelEntity.data.length, |
70 | - const HeaderView(), | 73 | + shrinkWrap: true, |
71 | - ListView.builder(padding: const EdgeInsets.only(top: 0), itemBuilder: _mainListViewBuidler , itemCount: _friendmodelEntity.data.length, shrinkWrap: true, physics:NeverScrollableScrollPhysics(),) | 74 | + physics: const NeverScrollableScrollPhysics(), |
72 | - ], | ||
73 | - ), | ||
74 | - Opacity( | ||
75 | - opacity: _opacity, | ||
76 | - child: const CupertinoNavigationBar( | ||
77 | - middle: Text("临境|附近|新鲜"), | ||
78 | - | ||
79 | - ), | ||
80 | ) | 75 | ) |
81 | - | ||
82 | ], | 76 | ], |
83 | - | ||
84 | ), | 77 | ), |
85 | ); | 78 | ); |
86 | } | 79 | } | ... | ... |
... | @@ -2,46 +2,59 @@ import 'package:flutter/cupertino.dart'; | ... | @@ -2,46 +2,59 @@ import 'package:flutter/cupertino.dart'; |
2 | import 'package:flutter/material.dart'; | 2 | import 'package:flutter/material.dart'; |
3 | import 'package:one_poem/timeline/models/friend_entity.dart'; | 3 | import 'package:one_poem/timeline/models/friend_entity.dart'; |
4 | 4 | ||
5 | -class FriendCell extends StatefulWidget { | 5 | +import 'package:one_poem/extension/int_extension.dart'; |
6 | 6 | ||
7 | - FriendData model; | 7 | +class FriendCell extends StatefulWidget { |
8 | + final FriendData model; | ||
8 | 9 | ||
9 | - FriendCell({Key? key, required this.model}) : super(key: key); | 10 | + const FriendCell({Key? key, required this.model}) : super(key: key); |
10 | @override | 11 | @override |
11 | State<StatefulWidget> createState() { | 12 | State<StatefulWidget> createState() { |
12 | - // TODO: implement createState | ||
13 | return FriendCellState(); | 13 | return FriendCellState(); |
14 | } | 14 | } |
15 | - | ||
16 | } | 15 | } |
17 | -class FriendCellState extends State<FriendCell> { | ||
18 | 16 | ||
17 | +class FriendCellState extends State<FriendCell> { | ||
19 | Widget? makePictureCount(List<String> pics) { | 18 | Widget? makePictureCount(List<String> pics) { |
20 | if (pics.length == 1) { | 19 | if (pics.length == 1) { |
21 | - return Container( | 20 | + return Container( |
22 | - margin: EdgeInsets.fromLTRB(0, 10, 50, 10), | 21 | + margin: EdgeInsets.fromLTRB(0.px, 10.px, 50.px, 10.px), |
23 | - child: Image.asset("assets/data/friends/" + pics[0] , fit: BoxFit.fill,), | 22 | + child: Image.asset( |
23 | + "assets/data/friends/" + pics[0], | ||
24 | + fit: BoxFit.fill, | ||
25 | + ), | ||
24 | ); | 26 | ); |
25 | } else if (pics.length == 4 || pics.length == 2) { | 27 | } else if (pics.length == 4 || pics.length == 2) { |
26 | return Container( | 28 | return Container( |
27 | - margin: EdgeInsets.fromLTRB(0, 10, 0, 10), | 29 | + margin: EdgeInsets.fromLTRB(0.px, 10.px, 0.px, 10.px), |
28 | child: Wrap( | 30 | child: Wrap( |
29 | - spacing: 5, | 31 | + spacing: 5, |
30 | - runSpacing: 5, | 32 | + runSpacing: 5, |
31 | - alignment: WrapAlignment.start, | 33 | + alignment: WrapAlignment.start, |
32 | - children: pics.map((p) => Image.asset("assets/data/friends/" + p , width: 100 , height: 100 , fit: BoxFit.cover,)).toList() | 34 | + children: pics |
33 | - ) | 35 | + .map((p) => Image.asset( |
34 | - ); | 36 | + "assets/data/friends/" + p, |
37 | + width: 100.px, | ||
38 | + height: 100.px, | ||
39 | + fit: BoxFit.cover, | ||
40 | + )) | ||
41 | + .toList())); | ||
35 | } else if (pics.length == 3 || pics.length > 4) { | 42 | } else if (pics.length == 3 || pics.length > 4) { |
36 | return Container( | 43 | return Container( |
37 | - margin: EdgeInsets.fromLTRB(0, 10, 0, 10), | 44 | + margin: EdgeInsets.fromLTRB(0.px, 10.px, 0.px, 10.px), |
38 | child: Wrap( | 45 | child: Wrap( |
39 | spacing: 5, | 46 | spacing: 5, |
40 | runSpacing: 5, | 47 | runSpacing: 5, |
41 | alignment: WrapAlignment.start, | 48 | alignment: WrapAlignment.start, |
42 | - children: pics.map((p) => Image.asset("assets/data/friends/" + p , width: 70 , height: 70 , fit: BoxFit.cover,)).toList() | 49 | + children: pics |
43 | - ) | 50 | + .map((p) => Image.asset( |
44 | - ); | 51 | + "assets/data/friends/" + p, |
52 | + width: 70.px, | ||
53 | + height: 70.px, | ||
54 | + fit: BoxFit.cover, | ||
55 | + )) | ||
56 | + .toList(), | ||
57 | + )); | ||
45 | } | 58 | } |
46 | } | 59 | } |
47 | 60 | ||
... | @@ -50,240 +63,331 @@ class FriendCellState extends State<FriendCell> { | ... | @@ -50,240 +63,331 @@ class FriendCellState extends State<FriendCell> { |
50 | 63 | ||
51 | @override | 64 | @override |
52 | Widget build(BuildContext context) { | 65 | Widget build(BuildContext context) { |
53 | - // TODO: implement build | ||
54 | return Container( | 66 | return Container( |
55 | - color: Color(0XFFFEFFFE), | 67 | + color: const Color(0XFFFEFFFE), |
56 | - child: Column( | 68 | + child: Column( |
57 | - children: <Widget>[ | 69 | + children: <Widget>[ |
58 | - Flex( | 70 | + Flex( |
59 | - direction: Axis.horizontal, | 71 | + direction: Axis.horizontal, |
60 | - mainAxisAlignment: MainAxisAlignment.start, | 72 | + mainAxisAlignment: MainAxisAlignment.start, |
61 | - crossAxisAlignment: CrossAxisAlignment.start, | 73 | + crossAxisAlignment: CrossAxisAlignment.start, |
62 | - children: <Widget>[ | 74 | + children: <Widget>[ |
63 | - | 75 | + Container( |
64 | - Container( | 76 | + width: 40.px, |
65 | - width: 40, | 77 | + height: 40.px, |
66 | - height: 40, | 78 | + margin: EdgeInsets.fromLTRB(15.px, 20.px, 15.px, 0.px), |
67 | - margin: EdgeInsets.fromLTRB(15, 20, 15, 0), | 79 | + child: ClipRRect( |
68 | - child: ClipRRect( | 80 | + child: Image.asset( |
69 | - child: Image.asset("assets/data/friends/" + widget.model.head , fit: BoxFit.fill,), | 81 | + "assets/data/friends/" + widget.model.head, |
70 | - borderRadius: BorderRadius.circular(5), | 82 | + fit: BoxFit.fill, |
71 | - ), | 83 | + ), |
72 | - ), | 84 | + borderRadius: BorderRadius.circular(5.px), |
73 | - Expanded( | 85 | + ), |
74 | - child: Container( | ||
75 | - margin: EdgeInsets.fromLTRB(0, 20, 70, 0), | ||
76 | - child: Column( | ||
77 | - mainAxisAlignment: MainAxisAlignment.start, | ||
78 | - crossAxisAlignment: CrossAxisAlignment.start, | ||
79 | - children: <Widget>[ | ||
80 | - Text(widget.model.name , style: TextStyle(fontSize: 17 , color: Color(0XFF566B94) , fontWeight: FontWeight.w500),), | ||
81 | - SizedBox(height: 5,), | ||
82 | - Text(widget.model.desc , style: TextStyle(fontSize: 15),), | ||
83 | - makePictureCount(widget.model.pics)!, | ||
84 | - | ||
85 | - ], | ||
86 | - ) | ||
87 | - ) | ||
88 | - ) | ||
89 | - | ||
90 | - ], | ||
91 | - ), | ||
92 | - Flex( | ||
93 | - direction: Axis.horizontal, | ||
94 | - mainAxisAlignment: MainAxisAlignment.center, | ||
95 | - children: <Widget>[ | ||
96 | - Expanded( | ||
97 | - flex: 1, | ||
98 | - child: Container( | ||
99 | - | ||
100 | - margin: EdgeInsets.only(left: 70), | ||
101 | - child: Text(widget.model.time , style: TextStyle(fontSize: 12 , color: Color(0XFFB2B2B2)),), | ||
102 | ), | 86 | ), |
103 | - ), | 87 | + Expanded( |
104 | - Expanded( | 88 | + child: Container( |
105 | - flex: 2, | 89 | + margin: EdgeInsets.fromLTRB(0.px, 20.px, 70.px, 0.px), |
106 | - child: Container( | 90 | + child: Column( |
107 | - margin: EdgeInsets.only(right: 20), | 91 | + mainAxisAlignment: MainAxisAlignment.start, |
108 | - child: Row( | 92 | + crossAxisAlignment: CrossAxisAlignment.start, |
109 | - mainAxisAlignment: MainAxisAlignment.end, | ||
110 | - children: <Widget>[ | ||
111 | - AnimatedContainer( | ||
112 | - decoration: BoxDecoration( | ||
113 | - borderRadius: BorderRadius.circular(5), | ||
114 | - color: Color(0XFF4C5154) | ||
115 | - ), | ||
116 | - duration: Duration(milliseconds: 100), | ||
117 | - width: _width, | ||
118 | - height: 30, | ||
119 | - child: Flex( | ||
120 | - direction: Axis.horizontal, | ||
121 | children: <Widget>[ | 93 | children: <Widget>[ |
122 | - Expanded( | 94 | + Text( |
123 | - flex : 1 , | 95 | + widget.model.name, |
124 | - child: Row( | 96 | + style: TextStyle( |
125 | - mainAxisAlignment: MainAxisAlignment.center, | 97 | + fontSize: 17.px, |
126 | - children: <Widget>[ | 98 | + color: const Color(0XFF566B94), |
127 | - Icon(Icons.favorite_border , color: Colors.white, size: 15,), | 99 | + fontWeight: FontWeight.w500), |
128 | - SizedBox(width: 5,), | ||
129 | - InkWell( | ||
130 | - onTap: (){ | ||
131 | - setState(() { | ||
132 | - _starCount ++ ; | ||
133 | - isShow(); | ||
134 | - }); | ||
135 | - }, | ||
136 | - child: Text("赞" ,style: TextStyle(color: Colors.white , fontSize: 12),) | ||
137 | - ) | ||
138 | - | ||
139 | - ], | ||
140 | - ) | ||
141 | ), | 100 | ), |
142 | - Expanded( | 101 | + SizedBox( |
143 | - flex: 1, | 102 | + height: 5.px, |
144 | - child: Row( | 103 | + ), |
145 | - mainAxisAlignment: MainAxisAlignment.center, | 104 | + Text( |
146 | - children: <Widget>[ | 105 | + widget.model.desc, |
147 | - Icon(Icons.sms , color: Colors.white, size: 15,), | 106 | + style: TextStyle(fontSize: 15.px), |
148 | - SizedBox(width: 5,), | 107 | + ), |
149 | - InkWell( | 108 | + makePictureCount(widget.model.pics)!, |
150 | - onTap: () { | ||
151 | - setState(() { | ||
152 | - _talkCount ++ ; | ||
153 | - isShow(); | ||
154 | - }); | ||
155 | - }, | ||
156 | - child: Text("评论" ,style: TextStyle(color: Colors.white , fontSize: 12),) | ||
157 | - ) | ||
158 | - | ||
159 | - ], | ||
160 | - ) | ||
161 | - ) | ||
162 | ], | 109 | ], |
163 | - ) | 110 | + ))) |
164 | - ), | 111 | + ], |
165 | - SizedBox(width: 10,), | 112 | + ), |
166 | - InkWell( | 113 | + Flex( |
167 | - onTap: (){ | 114 | + direction: Axis.horizontal, |
168 | - isShow(); | 115 | + mainAxisAlignment: MainAxisAlignment.center, |
169 | - }, | 116 | + children: <Widget>[ |
170 | - child: Image.asset("assets/data/friends/button.png" , width: 22, height: 18,) | 117 | + Expanded( |
118 | + flex: 1, | ||
119 | + child: Container( | ||
120 | + margin: EdgeInsets.only(left: 70.px), | ||
121 | + child: Text( | ||
122 | + widget.model.time, | ||
123 | + style: TextStyle( | ||
124 | + fontSize: 12.px, | ||
125 | + color: const Color(0XFFB2B2B2), | ||
171 | ), | 126 | ), |
172 | - ], | 127 | + ), |
173 | ), | 128 | ), |
174 | - ) | 129 | + ), |
175 | - | 130 | + Expanded( |
176 | - | 131 | + flex: 2, |
177 | - | 132 | + child: Container( |
178 | - ) | 133 | + margin: EdgeInsets.only(right: 20.px), |
179 | - ], | 134 | + child: Row( |
180 | - ), | 135 | + mainAxisAlignment: MainAxisAlignment.end, |
181 | - Offstage( | 136 | + children: <Widget>[ |
182 | - offstage: _starCount == 0 ? true : false, | 137 | + AnimatedContainer( |
183 | - child: Container( | 138 | + decoration: BoxDecoration( |
184 | - constraints: BoxConstraints( | 139 | + borderRadius: BorderRadius.circular(5.px), |
185 | - minWidth: double.infinity | 140 | + color: const Color(0XFF4C5154)), |
186 | - ), | 141 | + duration: const Duration(milliseconds: 100), |
187 | - margin: EdgeInsets.fromLTRB(70, 10, 15, 0), | 142 | + width: _width, |
188 | - padding: EdgeInsets.all(5), | 143 | + height: 30.px, |
189 | - color: Color(0XFFF3F3F5), | 144 | + child: Flex( |
190 | - child: Wrap( | 145 | + direction: Axis.horizontal, |
191 | - alignment: WrapAlignment.start, | 146 | + children: <Widget>[ |
192 | - runSpacing: 5, | 147 | + Expanded( |
193 | - spacing: 5, | 148 | + flex: 1, |
194 | - children:likeView(_starCount) | 149 | + child: Row( |
195 | - ), | 150 | + mainAxisAlignment: |
151 | + MainAxisAlignment.center, | ||
152 | + children: <Widget>[ | ||
153 | + Icon( | ||
154 | + Icons.favorite_border, | ||
155 | + color: Colors.white, | ||
156 | + size: 15.px, | ||
157 | + ), | ||
158 | + SizedBox( | ||
159 | + width: 5.px, | ||
160 | + ), | ||
161 | + InkWell( | ||
162 | + onTap: () { | ||
163 | + setState(() { | ||
164 | + _starCount++; | ||
165 | + isShow(); | ||
166 | + }); | ||
167 | + }, | ||
168 | + child: Text( | ||
169 | + "荐", | ||
170 | + style: TextStyle( | ||
171 | + color: Colors.white, | ||
172 | + fontSize: 12.px, | ||
173 | + ), | ||
174 | + )) | ||
175 | + ], | ||
176 | + )), | ||
177 | + Expanded( | ||
178 | + flex: 1, | ||
179 | + child: Row( | ||
180 | + mainAxisAlignment: | ||
181 | + MainAxisAlignment.center, | ||
182 | + children: <Widget>[ | ||
183 | + Icon( | ||
184 | + Icons.sms, | ||
185 | + color: Colors.white, | ||
186 | + size: 15.px, | ||
187 | + ), | ||
188 | + SizedBox( | ||
189 | + width: 5.px, | ||
190 | + ), | ||
191 | + InkWell( | ||
192 | + onTap: () { | ||
193 | + setState(() { | ||
194 | + _talkCount++; | ||
195 | + isShow(); | ||
196 | + }); | ||
197 | + }, | ||
198 | + child: Text( | ||
199 | + "避", | ||
200 | + style: TextStyle( | ||
201 | + color: Colors.white, | ||
202 | + fontSize: 12.px, | ||
203 | + ), | ||
204 | + )) | ||
205 | + ], | ||
206 | + )), | ||
207 | + Expanded( | ||
208 | + flex: 1, | ||
209 | + child: Row( | ||
210 | + mainAxisAlignment: | ||
211 | + MainAxisAlignment.center, | ||
212 | + children: <Widget>[ | ||
213 | + Icon( | ||
214 | + Icons.sms, | ||
215 | + color: Colors.white, | ||
216 | + size: 15.px, | ||
217 | + ), | ||
218 | + SizedBox( | ||
219 | + width: 5.px, | ||
220 | + ), | ||
221 | + InkWell( | ||
222 | + onTap: () { | ||
223 | + setState(() { | ||
224 | + _talkCount++; | ||
225 | + isShow(); | ||
226 | + }); | ||
227 | + }, | ||
228 | + child: Text( | ||
229 | + "藏", | ||
230 | + style: TextStyle( | ||
231 | + color: Colors.white, | ||
232 | + fontSize: 12.px, | ||
233 | + ), | ||
234 | + )) | ||
235 | + ], | ||
236 | + )), | ||
237 | + Expanded( | ||
238 | + flex: 1, | ||
239 | + child: Row( | ||
240 | + mainAxisAlignment: | ||
241 | + MainAxisAlignment.center, | ||
242 | + children: <Widget>[ | ||
243 | + Icon( | ||
244 | + Icons.sms, | ||
245 | + color: Colors.white, | ||
246 | + size: 15.px, | ||
247 | + ), | ||
248 | + SizedBox( | ||
249 | + width: 5.px, | ||
250 | + ), | ||
251 | + InkWell( | ||
252 | + onTap: () { | ||
253 | + setState(() { | ||
254 | + _talkCount++; | ||
255 | + isShow(); | ||
256 | + }); | ||
257 | + }, | ||
258 | + child: Text( | ||
259 | + "评", | ||
260 | + style: TextStyle( | ||
261 | + color: Colors.white, | ||
262 | + fontSize: 12.px, | ||
263 | + ), | ||
264 | + )) | ||
265 | + ], | ||
266 | + )), | ||
267 | + ], | ||
268 | + )), | ||
269 | + SizedBox( | ||
270 | + width: 10.px, | ||
271 | + ), | ||
272 | + InkWell( | ||
273 | + onTap: () { | ||
274 | + isShow(); | ||
275 | + }, | ||
276 | + child: Image.asset( | ||
277 | + "assets/data/friends/button.png", | ||
278 | + width: 22.px, | ||
279 | + height: 18.px, | ||
280 | + )), | ||
281 | + ], | ||
282 | + ), | ||
283 | + )) | ||
284 | + ], | ||
196 | ), | 285 | ), |
197 | - ), | 286 | + Offstage( |
198 | - Offstage( | 287 | + offstage: _starCount == 0 ? true : false, |
199 | - offstage: _talkCount == 0 ? true : false, | 288 | + child: Container( |
200 | - child: Container( | 289 | + constraints: const BoxConstraints(minWidth: double.infinity), |
201 | - constraints: BoxConstraints( | 290 | + margin: EdgeInsets.fromLTRB(70.px, 10.px, 15.px, 0.px), |
202 | - minWidth: double.infinity | 291 | + padding: EdgeInsets.all(5.px), |
292 | + color: const Color(0XFFF3F3F5), | ||
293 | + child: Wrap( | ||
294 | + alignment: WrapAlignment.start, | ||
295 | + runSpacing: 5.px, | ||
296 | + spacing: 5.px, | ||
297 | + children: likeView(_starCount)), | ||
203 | ), | 298 | ), |
204 | - margin: EdgeInsets.fromLTRB(70, 0, 15, 0), | 299 | + ), |
205 | - padding: EdgeInsets.all(5), | 300 | + Offstage( |
206 | - color: Color(0XFFF3F3F5), | 301 | + offstage: _talkCount == 0 ? true : false, |
207 | - child: Wrap( | 302 | + child: Container( |
208 | - alignment: WrapAlignment.start, | 303 | + constraints: const BoxConstraints(minWidth: double.infinity), |
209 | - runSpacing: 5, | 304 | + margin: EdgeInsets.fromLTRB(70.px, 0.px, 15.px, 0.px), |
210 | - spacing: 5, | 305 | + padding: EdgeInsets.all(5.px), |
211 | - children:talkView(_talkCount) | 306 | + color: const Color(0XFFF3F3F5), |
307 | + child: Wrap( | ||
308 | + alignment: WrapAlignment.start, | ||
309 | + runSpacing: 5.px, | ||
310 | + spacing: 5.px, | ||
311 | + children: talkView(_talkCount)), | ||
212 | ), | 312 | ), |
213 | ), | 313 | ), |
214 | - ), | 314 | + SizedBox( |
215 | - SizedBox(height: 10,), | 315 | + height: 10.px, |
216 | - Container(height: 0.5, width: double.infinity, color: Colors.black26,) | 316 | + ), |
217 | - ], | 317 | + Container( |
218 | - ) | 318 | + height: 0.5, |
219 | - | 319 | + width: double.infinity, |
220 | - | 320 | + color: Colors.black26, |
221 | - | 321 | + ) |
222 | - ); | 322 | + ], |
323 | + )); | ||
223 | } | 324 | } |
224 | 325 | ||
225 | void isShow() { | 326 | void isShow() { |
226 | _isShow = !_isShow; | 327 | _isShow = !_isShow; |
227 | setState(() { | 328 | setState(() { |
228 | - _width = _isShow ? 120 : 0; | 329 | + _width = _isShow ? 160.px : 0.px; |
229 | }); | 330 | }); |
230 | } | 331 | } |
231 | 332 | ||
232 | var _starCount = 0; | 333 | var _starCount = 0; |
233 | var _talkCount = 0; | 334 | var _talkCount = 0; |
234 | 335 | ||
235 | - List<Widget> likeView(int count) { | 336 | + List<Widget> likeView(int count) { |
236 | - | ||
237 | - List<Widget> result = []; | ||
238 | - for (int i =0 ; i< count ; i ++) { | ||
239 | - result.add(Container( | ||
240 | - width: 70, | ||
241 | - child: Row( | ||
242 | - children: <Widget>[ | ||
243 | - Icon(Icons.favorite_border , size: 13, color: Color(0XFF566B94),), | ||
244 | - SizedBox(width: 5,), | ||
245 | - Text("sunnytu" ,style: TextStyle(color: Color(0XFF566B94) , fontSize: 15 , fontWeight: FontWeight.w500),) | ||
246 | - ], | ||
247 | - ), | ||
248 | - )); | ||
249 | - } | ||
250 | - | ||
251 | - return result; | ||
252 | - } | ||
253 | - | ||
254 | - List<Widget> talkView(int count) { | ||
255 | - | ||
256 | List<Widget> result = []; | 337 | List<Widget> result = []; |
257 | - for (int i =0 ; i< count ; i ++) { | 338 | + for (int i = 0; i < count; i++) { |
258 | - result.add(Container( | 339 | + result.add(SizedBox( |
340 | + width: 70.px, | ||
259 | child: Row( | 341 | child: Row( |
260 | children: <Widget>[ | 342 | children: <Widget>[ |
261 | - | 343 | + Icon( |
262 | - Expanded( | 344 | + Icons.favorite_border, |
263 | - child: Text.rich( | 345 | + size: 13.px, |
264 | - TextSpan( | 346 | + color: const Color(0XFF566B94), |
265 | - children: [ | ||
266 | - TextSpan( | ||
267 | - text: "sunnytu:", | ||
268 | - style: TextStyle(fontSize: 15 ,fontWeight: FontWeight.w500 , color: Color(0XFF566B94)) | ||
269 | - ), | ||
270 | - TextSpan( | ||
271 | - text: "66666", | ||
272 | - style: TextStyle(fontSize: 14), | ||
273 | - ) | ||
274 | - ] | ||
275 | - ), | ||
276 | - textAlign: TextAlign.start, | ||
277 | - ) | ||
278 | ), | 347 | ), |
279 | - | 348 | + SizedBox( |
280 | - | 349 | + width: 5.px, |
350 | + ), | ||
351 | + Text( | ||
352 | + "sunnytu", | ||
353 | + style: TextStyle( | ||
354 | + color: const Color(0XFF566B94), | ||
355 | + fontSize: 15.px, | ||
356 | + fontWeight: FontWeight.w500), | ||
357 | + ) | ||
281 | ], | 358 | ], |
282 | ), | 359 | ), |
283 | )); | 360 | )); |
284 | } | 361 | } |
285 | 362 | ||
286 | - return result; | 363 | + return result; |
287 | } | 364 | } |
288 | 365 | ||
289 | -} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
366 | + List<Widget> talkView(int count) { | ||
367 | + List<Widget> result = []; | ||
368 | + for (int i = 0; i < count; i++) { | ||
369 | + result.add(Row( | ||
370 | + children: <Widget>[ | ||
371 | + Expanded( | ||
372 | + child: Text.rich( | ||
373 | + TextSpan(children: [ | ||
374 | + TextSpan( | ||
375 | + text: "sunnytu:", | ||
376 | + style: TextStyle( | ||
377 | + fontSize: 15.px, | ||
378 | + fontWeight: FontWeight.w500, | ||
379 | + color: const Color(0XFF566B94))), | ||
380 | + TextSpan( | ||
381 | + text: "66666", | ||
382 | + style: TextStyle(fontSize: 14.px), | ||
383 | + ) | ||
384 | + ]), | ||
385 | + textAlign: TextAlign.start, | ||
386 | + )), | ||
387 | + ], | ||
388 | + )); | ||
389 | + } | ||
390 | + | ||
391 | + return result; | ||
392 | + } | ||
393 | +} | ... | ... |
lib/widgets/bars/timeline_menu_bar.dart
0 → 100644
1 | +import 'package:flutter/material.dart'; | ||
2 | + | ||
3 | +class TimelineMenuHeader extends StatelessWidget { | ||
4 | + const TimelineMenuHeader({ | ||
5 | + Key? key, | ||
6 | + this.funcLeft, | ||
7 | + this.funcCenter, | ||
8 | + this.funcRight, | ||
9 | + }) : super(key: key); | ||
10 | + | ||
11 | + final Function? funcLeft; | ||
12 | + final Function? funcCenter; | ||
13 | + final Function? funcRight; | ||
14 | + | ||
15 | + @override | ||
16 | + Widget build(BuildContext context) { | ||
17 | + return Container( | ||
18 | + alignment: Alignment.center, | ||
19 | + margin: const EdgeInsets.symmetric(horizontal: 5.0), | ||
20 | + child: Row( | ||
21 | + mainAxisAlignment: MainAxisAlignment.spaceBetween, | ||
22 | + mainAxisSize: MainAxisSize.min, | ||
23 | + //交叉轴的布局方式,对于column来说就是水平方向的布局方式 | ||
24 | + crossAxisAlignment: CrossAxisAlignment.center, | ||
25 | + children: <Widget>[ | ||
26 | + SizedBox( | ||
27 | + width: 60.0, | ||
28 | + child: TextButton( | ||
29 | + onPressed: () => funcLeft!(), | ||
30 | + child: const Text( | ||
31 | + "临境", | ||
32 | + style: TextStyle(color: Colors.black54), | ||
33 | + ), | ||
34 | + ), | ||
35 | + ), | ||
36 | + const VerticalDivider( | ||
37 | + color: Colors.black54, | ||
38 | + width: 1.0, | ||
39 | + thickness: 1.0, | ||
40 | + indent: 16.0, | ||
41 | + endIndent: 16.0, | ||
42 | + ), | ||
43 | + TextButton( | ||
44 | + onPressed: () => funcCenter!(), | ||
45 | + child: const Text( | ||
46 | + "附近", | ||
47 | + style: TextStyle(color: Colors.black54), | ||
48 | + ), | ||
49 | + ), | ||
50 | + const VerticalDivider( | ||
51 | + color: Colors.black54, | ||
52 | + width: 1.0, | ||
53 | + thickness: 1.0, | ||
54 | + indent: 15.0, | ||
55 | + endIndent: 15.0, | ||
56 | + ), | ||
57 | + TextButton( | ||
58 | + onPressed: () => funcRight!(), | ||
59 | + child: const Text( | ||
60 | + "新鲜", | ||
61 | + style: TextStyle(color: Colors.black54), | ||
62 | + ), | ||
63 | + ), | ||
64 | + ], | ||
65 | + )); | ||
66 | + } | ||
67 | +} |
-
Please register or login to post a comment