Showing
13 changed files
with
139 additions
and
260 deletions
assets/fonts/LongCang-Regular.ttf
0 → 100644
No preview for this file type
assets/fonts/ZCOOLXiaoWei-Regular.ttf
0 → 100644
No preview for this file type
assets/images/category/category_item_bg.png
0 → 100644

1023 Bytes
... | @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; | ... | @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; |
2 | import 'package:one_poem/category/provider/categories_page_provider.dart'; | 2 | import 'package:one_poem/category/provider/categories_page_provider.dart'; |
3 | import 'package:one_poem/util/theme_utils.dart'; | 3 | import 'package:one_poem/util/theme_utils.dart'; |
4 | import 'package:one_poem/widgets/load_image.dart'; | 4 | import 'package:one_poem/widgets/load_image.dart'; |
5 | +import 'package:one_poem/widgets/my_app_bar.dart'; | ||
5 | import 'package:provider/provider.dart'; | 6 | import 'package:provider/provider.dart'; |
6 | 7 | ||
7 | import 'category_list_page.dart'; | 8 | import 'category_list_page.dart'; |
... | @@ -42,6 +43,8 @@ class _CategoriesPageState extends State<CategoriesPage> | ... | @@ -42,6 +43,8 @@ class _CategoriesPageState extends State<CategoriesPage> |
42 | return ChangeNotifierProvider<CategoriesPageProvider>( | 43 | return ChangeNotifierProvider<CategoriesPageProvider>( |
43 | create: (_) => provider, | 44 | create: (_) => provider, |
44 | child: Scaffold( | 45 | child: Scaffold( |
46 | + appBar: const MyAppBar( | ||
47 | + ), | ||
45 | body: Column( | 48 | body: Column( |
46 | key: _bodyKey, | 49 | key: _bodyKey, |
47 | crossAxisAlignment: CrossAxisAlignment.start, | 50 | crossAxisAlignment: CrossAxisAlignment.start, | ... | ... |
1 | import 'package:common_utils/common_utils.dart'; | 1 | import 'package:common_utils/common_utils.dart'; |
2 | +import 'package:flutter/cupertino.dart'; | ||
2 | import 'package:flutter/material.dart'; | 3 | import 'package:flutter/material.dart'; |
3 | import 'package:one_poem/category/models/category_item_entity.dart'; | 4 | import 'package:one_poem/category/models/category_item_entity.dart'; |
5 | +import 'package:one_poem/res/gaps.dart'; | ||
4 | import 'package:one_poem/res/resources.dart'; | 6 | import 'package:one_poem/res/resources.dart'; |
5 | import 'package:one_poem/util/device_utils.dart'; | 7 | import 'package:one_poem/util/device_utils.dart'; |
6 | import 'package:one_poem/util/other_utils.dart'; | 8 | import 'package:one_poem/util/other_utils.dart'; |
7 | -import 'package:one_poem/util/theme_utils.dart'; | ||
8 | import 'package:one_poem/widgets/load_image.dart'; | 9 | import 'package:one_poem/widgets/load_image.dart'; |
9 | -import 'package:one_poem/widgets/my_button.dart'; | ||
10 | 10 | ||
11 | -import 'menu_reveal.dart'; | ||
12 | - | ||
13 | -/// design/4商品/index.html#artboard1 | ||
14 | class CategoryItem extends StatelessWidget { | 11 | class CategoryItem extends StatelessWidget { |
15 | - | ||
16 | const CategoryItem({ | 12 | const CategoryItem({ |
17 | Key? key, | 13 | Key? key, |
18 | required this.item, | 14 | required this.item, |
... | @@ -25,7 +21,7 @@ class CategoryItem extends StatelessWidget { | ... | @@ -25,7 +21,7 @@ class CategoryItem extends StatelessWidget { |
25 | required this.onTapMenuClose, | 21 | required this.onTapMenuClose, |
26 | required this.animation, | 22 | required this.animation, |
27 | required this.heroTag, | 23 | required this.heroTag, |
28 | - }): super(key: key); | 24 | + }) : super(key: key); |
29 | 25 | ||
30 | final CategoryItemEntity item; | 26 | final CategoryItemEntity item; |
31 | final int index; | 27 | final int index; |
... | @@ -40,169 +36,41 @@ class CategoryItem extends StatelessWidget { | ... | @@ -40,169 +36,41 @@ class CategoryItem extends StatelessWidget { |
40 | 36 | ||
41 | @override | 37 | @override |
42 | Widget build(BuildContext context) { | 38 | Widget build(BuildContext context) { |
43 | - final Row child = Row( | 39 | + return Padding( |
44 | - crossAxisAlignment: CrossAxisAlignment.start, | 40 | + padding: const EdgeInsets.only(left: 10.0, top: 10.0, right: 10.0), |
45 | - children: <Widget>[ | 41 | + child: DecoratedBox( |
46 | - ExcludeSemantics( | 42 | + decoration: BoxDecoration( |
47 | - child: Hero( | 43 | + image: const DecorationImage( |
48 | - tag: heroTag, | 44 | + image: AssetImage("assets/images/category/category_item_bg.png"), |
49 | - child: LoadImage(item.icon, width: 72.0, height: 72.0), | 45 | + fit: BoxFit.fill, |
50 | ), | 46 | ), |
47 | + border: Border.all(color: Colors.grey, width: 0.5), // 边色与边宽度 | ||
48 | + borderRadius: BorderRadius.circular(2.0), | ||
51 | ), | 49 | ), |
52 | - Gaps.hGap8, | 50 | + child: Padding( |
53 | - Expanded( | 51 | + padding: const EdgeInsets.all(10.0), |
54 | child: Column( | 52 | child: Column( |
55 | - crossAxisAlignment: CrossAxisAlignment.start, | 53 | + crossAxisAlignment: CrossAxisAlignment.center, |
56 | children: <Widget>[ | 54 | children: <Widget>[ |
57 | - Text( | ||
58 | - item.type % 3 != 0 ? '八月十五中秋月饼礼盒' : '八月十五中秋月饼礼盒八月十五中秋月饼礼盒', | ||
59 | - maxLines: 1, | ||
60 | - overflow: TextOverflow.ellipsis, | ||
61 | - ), | ||
62 | - Gaps.vGap4, | ||
63 | Row( | 55 | Row( |
64 | - children: <Widget>[ | 56 | + mainAxisAlignment: MainAxisAlignment.spaceBetween, |
65 | - Visibility( | 57 | + mainAxisSize: MainAxisSize.max, |
66 | - // 默认为占位替换,类似于gone | 58 | + //交叉轴的布局方式,对于column来说就是水平方向的布局方式 |
67 | - visible: item.type % 3 == 0, | 59 | + crossAxisAlignment: CrossAxisAlignment.center, |
68 | - child: _GoodsItemTag( | 60 | + children: const <Widget>[ |
69 | - text: '立减', | 61 | + Text("此地"), |
70 | - color: Theme.of(context).errorColor, | 62 | + Text("北京 海淀 万泉庄", maxLines: 3,), |
71 | - ), | 63 | + Text("京", style: TextStyle(fontSize: 30)), |
72 | - ), | ||
73 | - Opacity( | ||
74 | - // 修改透明度实现隐藏,类似于invisible | ||
75 | - opacity: item.type % 2 != 0 ? 0.0 : 1.0, | ||
76 | - child: _GoodsItemTag( | ||
77 | - text: '金币抵扣', | ||
78 | - color: Theme.of(context).primaryColor, | ||
79 | - ), | ||
80 | - ) | ||
81 | ], | 64 | ], |
82 | ), | 65 | ), |
83 | Gaps.vGap16, | 66 | Gaps.vGap16, |
84 | - Text(Utils.formatPrice('20.00', format: MoneyFormat.NORMAL)) | 67 | + const Text( |
85 | - ], | 68 | + "前不见古人,后不见来者。\n念天地之悠悠,独怆然而涕下。\n", |
86 | - ), | 69 | + style: TextStyle(fontSize: 22.0, fontFamily: "ZCOOLXiaoWei"), |
87 | - ), | ||
88 | - Column( | ||
89 | - crossAxisAlignment: CrossAxisAlignment.end, | ||
90 | - children: <Widget>[ | ||
91 | - Semantics( | ||
92 | - /// container属性为true,防止上方ExcludeSemantics去除此处语义 | ||
93 | - container: true, | ||
94 | - label: '商品操作菜单', | ||
95 | - child: GestureDetector( | ||
96 | - onTap: onTapMenu, | ||
97 | - child: Container( | ||
98 | - key: Key('goods_menu_item_$index'), | ||
99 | - width: 44.0, | ||
100 | - height: 44.0, | ||
101 | - color: Colors.transparent, | ||
102 | - padding: const EdgeInsets.only(left: 28.0, bottom: 28.0), | ||
103 | - child: const LoadAssetImage('goods/ellipsis'), | ||
104 | - ), | ||
105 | - ), | ||
106 | - ), | ||
107 | - Padding( | ||
108 | - padding: const EdgeInsets.only(top: 10.0), | ||
109 | - child: Text( | ||
110 | - '特产美味', | ||
111 | - style: Theme.of(context).textTheme.subtitle2, | ||
112 | - ), | ||
113 | - ) | ||
114 | - ], | ||
115 | - ) | ||
116 | - ], | ||
117 | - ); | ||
118 | - | ||
119 | - return Stack( | ||
120 | - children: <Widget>[ | ||
121 | - // item间的分隔线 | ||
122 | - Padding( | ||
123 | - padding: const EdgeInsets.only(left: 16.0, top: 16.0), | ||
124 | - child: DecoratedBox( | ||
125 | - decoration: BoxDecoration( | ||
126 | - border: Border( | ||
127 | - bottom: Divider.createBorderSide(context, width: 0.8), | ||
128 | - ), | ||
129 | - ), | ||
130 | - child: Padding( | ||
131 | - padding: const EdgeInsets.only(right: 16.0, bottom: 16.0), | ||
132 | - child: child, | ||
133 | - ), | ||
134 | - ), | ||
135 | ), | 70 | ), |
136 | - if (selectIndex != index) Gaps.empty else _buildGoodsMenu(context), | 71 | + const Text("[唐] 陈子昂《登幽州台歌》", maxLines: 1,), |
137 | ], | 72 | ], |
138 | - ); | ||
139 | - } | ||
140 | - | ||
141 | - Widget _buildGoodsMenu(BuildContext context) { | ||
142 | - return Positioned.fill( | ||
143 | - child: AnimatedBuilder( | ||
144 | - animation: animation, | ||
145 | - child: _buildGoodsMenuContent(context), | ||
146 | - builder: (_, Widget? child) { | ||
147 | - return MenuReveal( | ||
148 | - revealPercent: animation.value, | ||
149 | - child: child! | ||
150 | - ); | ||
151 | - } | ||
152 | - ), | ||
153 | - ); | ||
154 | - } | ||
155 | - | ||
156 | - Widget _buildGoodsMenuContent(BuildContext context) { | ||
157 | - final bool isDark = context.isDark; | ||
158 | - final Color buttonColor = isDark ? Colours.dark_text : Colors.white; | ||
159 | - | ||
160 | - return InkWell( | ||
161 | - onTap: onTapMenuClose, | ||
162 | - child: Container( | ||
163 | - color: isDark ? const Color(0xB34D4D4D) : const Color(0x4D000000), | ||
164 | - child: Row( | ||
165 | - mainAxisAlignment: MainAxisAlignment.spaceEvenly, | ||
166 | - children: <Widget>[ | ||
167 | - Gaps.hGap15, | ||
168 | - MyButton( | ||
169 | - key: Key('goods_edit_item_$index'), | ||
170 | - text: '编辑', | ||
171 | - fontSize: Dimens.font_sp16, | ||
172 | - radius: 24.0, | ||
173 | - minWidth: 56.0, | ||
174 | - minHeight: 56.0, | ||
175 | - padding: const EdgeInsets.symmetric(horizontal: 12.0), | ||
176 | - textColor: isDark ? Colours.dark_button_text : Colors.white, | ||
177 | - backgroundColor: isDark ? Colours.dark_app_main : Colours.app_main, | ||
178 | - onPressed: onTapEdit, | ||
179 | - ), | ||
180 | - MyButton( | ||
181 | - key: Key('goods_operation_item_$index'), | ||
182 | - text: '下架', | ||
183 | - fontSize: Dimens.font_sp16, | ||
184 | - radius: 24.0, | ||
185 | - minWidth: 56.0, | ||
186 | - minHeight: 56.0, | ||
187 | - padding: const EdgeInsets.symmetric(horizontal: 12.0), | ||
188 | - textColor: Colours.text, | ||
189 | - backgroundColor: buttonColor, | ||
190 | - onPressed: onTapOperation, | ||
191 | ), | 73 | ), |
192 | - MyButton( | ||
193 | - key: Key('goods_delete_item_$index'), | ||
194 | - text: '删除', | ||
195 | - fontSize: Dimens.font_sp16, | ||
196 | - radius: 24.0, | ||
197 | - minWidth: 56.0, | ||
198 | - minHeight: 56.0, | ||
199 | - padding: const EdgeInsets.symmetric(horizontal: 12.0), | ||
200 | - textColor: Colours.text, | ||
201 | - backgroundColor: buttonColor, | ||
202 | - onPressed: onTapDelete, | ||
203 | - ), | ||
204 | - Gaps.hGap15, | ||
205 | - ], | ||
206 | ), | 74 | ), |
207 | ), | 75 | ), |
208 | ); | 76 | ); |
... | @@ -210,12 +78,11 @@ class CategoryItem extends StatelessWidget { | ... | @@ -210,12 +78,11 @@ class CategoryItem extends StatelessWidget { |
210 | } | 78 | } |
211 | 79 | ||
212 | class _GoodsItemTag extends StatelessWidget { | 80 | class _GoodsItemTag extends StatelessWidget { |
213 | - | ||
214 | const _GoodsItemTag({ | 81 | const _GoodsItemTag({ |
215 | Key? key, | 82 | Key? key, |
216 | required this.color, | 83 | required this.color, |
217 | required this.text, | 84 | required this.text, |
218 | - }): super(key: key); | 85 | + }) : super(key: key); |
219 | 86 | ||
220 | final Color? color; | 87 | final Color? color; |
221 | final String text; | 88 | final String text; | ... | ... |
... | @@ -3,7 +3,6 @@ import 'package:one_poem/account/page/account_page.dart'; | ... | @@ -3,7 +3,6 @@ import 'package:one_poem/account/page/account_page.dart'; |
3 | import 'package:one_poem/category/page/categories_page.dart'; | 3 | import 'package:one_poem/category/page/categories_page.dart'; |
4 | import 'package:one_poem/poem/page/poem_page.dart'; | 4 | import 'package:one_poem/poem/page/poem_page.dart'; |
5 | import 'package:one_poem/res/resources.dart'; | 5 | import 'package:one_poem/res/resources.dart'; |
6 | -import 'package:one_poem/routers/not_found_page.dart'; | ||
7 | import 'package:one_poem/timeline/pages/timelines_page.dart'; | 6 | import 'package:one_poem/timeline/pages/timelines_page.dart'; |
8 | import 'package:one_poem/util/theme_utils.dart'; | 7 | import 'package:one_poem/util/theme_utils.dart'; |
9 | import 'package:one_poem/widgets/double_tap_back_exit_app.dart'; | 8 | import 'package:one_poem/widgets/double_tap_back_exit_app.dart'; |
... | @@ -60,92 +59,72 @@ class _HomeState extends State<Home> with RestorationMixin { | ... | @@ -60,92 +59,72 @@ class _HomeState extends State<Home> with RestorationMixin { |
60 | OnePoemLocalizations.of(context).profileBottomNavigationBarItemTitle, | 59 | OnePoemLocalizations.of(context).profileBottomNavigationBarItemTitle, |
61 | ]; | 60 | ]; |
62 | if (_list == null) { | 61 | if (_list == null) { |
63 | - List<List<LoadAssetImage>> _tabImages; | 62 | + List<List<Icon>> _tabImages; |
64 | if (!isDark) { | 63 | if (!isDark) { |
65 | _tabImages = [ | 64 | _tabImages = [ |
66 | [ | 65 | [ |
67 | - const LoadAssetImage( | 66 | + const Icon( |
68 | - 'home/icon_order', | 67 | + Icons.stream, |
69 | - width: _imageSize, | ||
70 | - color: Colours.unselected_item_color, | ||
71 | ), | 68 | ), |
72 | - const LoadAssetImage( | 69 | + const Icon( |
73 | - 'home/icon_order', | 70 | + Icons.stream_outlined, |
74 | - width: _imageSize, | ||
75 | - color: Colours.app_main, | ||
76 | ), | 71 | ), |
77 | ], | 72 | ], |
78 | [ | 73 | [ |
79 | - const LoadAssetImage( | 74 | + const Icon( |
80 | - 'home/icon_commodity', | 75 | + Icons.self_improvement_outlined, |
81 | - width: _imageSize, | ||
82 | - color: Colours.unselected_item_color, | ||
83 | ), | 76 | ), |
84 | - const LoadAssetImage( | 77 | + const Icon( |
85 | - 'home/icon_commodity', | 78 | + Icons.self_improvement_outlined, |
86 | - width: _imageSize, | ||
87 | - color: Colours.app_main, | ||
88 | ), | 79 | ), |
89 | - ], | 80 | + ],[ |
90 | - [ | 81 | + const Icon( |
91 | - const LoadAssetImage( | 82 | + Icons.groups, |
92 | - 'home/icon_statistics', | ||
93 | - width: _imageSize, | ||
94 | - color: Colours.unselected_item_color, | ||
95 | ), | 83 | ), |
96 | - const LoadAssetImage( | 84 | + const Icon( |
97 | - 'home/icon_statistics', | 85 | + Icons.groups_outlined, |
98 | - width: _imageSize, | ||
99 | - color: Colours.app_main, | ||
100 | ), | 86 | ), |
101 | - ], | 87 | + ],[ |
102 | - [ | 88 | + const Icon( |
103 | - const LoadAssetImage( | 89 | + Icons.perm_identity, |
104 | - 'home/icon_shop', | ||
105 | - width: _imageSize, | ||
106 | - color: Colours.unselected_item_color, | ||
107 | ), | 90 | ), |
108 | - const LoadAssetImage( | 91 | + const Icon( |
109 | - 'home/icon_shop', | 92 | + Icons.perm_identity_outlined, |
110 | - width: _imageSize, | ||
111 | - color: Colours.app_main, | ||
112 | ), | 93 | ), |
113 | - ] | 94 | + ], |
114 | ]; | 95 | ]; |
115 | } else { | 96 | } else { |
116 | _tabImages = [ | 97 | _tabImages = [ |
117 | [ | 98 | [ |
118 | - const LoadAssetImage('home/icon_order', width: _imageSize), | 99 | + const Icon( |
119 | - const LoadAssetImage( | 100 | + Icons.stream, |
120 | - 'home/icon_order', | ||
121 | - width: _imageSize, | ||
122 | - color: Colours.dark_app_main, | ||
123 | ), | 101 | ), |
124 | - ], | 102 | + const Icon( |
125 | - [ | 103 | + Icons.stream_outlined, |
126 | - const LoadAssetImage('home/icon_commodity', width: _imageSize), | ||
127 | - const LoadAssetImage( | ||
128 | - 'home/icon_commodity', | ||
129 | - width: _imageSize, | ||
130 | - color: Colours.dark_app_main, | ||
131 | ), | 104 | ), |
132 | ], | 105 | ], |
133 | [ | 106 | [ |
134 | - const LoadAssetImage('home/icon_statistics', width: _imageSize), | 107 | + const Icon( |
135 | - const LoadAssetImage( | 108 | + Icons.self_improvement_outlined, |
136 | - 'home/icon_statistics', | ||
137 | - width: _imageSize, | ||
138 | - color: Colours.dark_app_main, | ||
139 | ), | 109 | ), |
140 | - ], | 110 | + const Icon( |
141 | - [ | 111 | + Icons.self_improvement_outlined, |
142 | - const LoadAssetImage('home/icon_shop', width: _imageSize), | 112 | + ), |
143 | - const LoadAssetImage( | 113 | + ],[ |
144 | - 'home/icon_shop', | 114 | + const Icon( |
145 | - width: _imageSize, | 115 | + Icons.groups, |
146 | - color: Colours.dark_app_main, | 116 | + ), |
117 | + const Icon( | ||
118 | + Icons.groups_outlined, | ||
147 | ), | 119 | ), |
148 | - ] | 120 | + ],[ |
121 | + const Icon( | ||
122 | + Icons.perm_identity, | ||
123 | + ), | ||
124 | + const Icon( | ||
125 | + Icons.perm_identity_outlined, | ||
126 | + ), | ||
127 | + ], | ||
149 | ]; | 128 | ]; |
150 | } | 129 | } |
151 | _list = List.generate(_tabImages.length, (i) { | 130 | _list = List.generate(_tabImages.length, (i) { | ... | ... |
... | @@ -143,7 +143,9 @@ class _PoemPageState extends State<PoemPage> with WidgetsBindingObserver { | ... | @@ -143,7 +143,9 @@ class _PoemPageState extends State<PoemPage> with WidgetsBindingObserver { |
143 | onShare: () {}, | 143 | onShare: () {}, |
144 | ); | 144 | ); |
145 | Widget poem = TikTokVidePoem( | 145 | Widget poem = TikTokVidePoem( |
146 | - desc: "清晨入古寺,初日照高林。\n竹径通幽处,禅房花木深。", | 146 | + title: "每日一言", |
147 | + poem: "清晨入古寺,初日照高林。\n曲径通幽处,禅房花木深。\n山光悦鸟性,潭影空人心。\n万籁此都寂,但余钟磬音。\n", | ||
148 | + author: "--《题破山寺后禅院》常建", | ||
147 | onShowDetail: () { | 149 | onShowDetail: () { |
148 | tkController.animateToPage(TikTokPagePosition.right); | 150 | tkController.animateToPage(TikTokPagePosition.right); |
149 | }, | 151 | }, | ... | ... |
... | @@ -5,7 +5,8 @@ class Colours { | ... | @@ -5,7 +5,8 @@ class Colours { |
5 | static const Color dark_app_main = Color(0xFF3F7AE0); | 5 | static const Color dark_app_main = Color(0xFF3F7AE0); |
6 | 6 | ||
7 | static const Color bg_color = Color(0xfff1f1f1); | 7 | static const Color bg_color = Color(0xfff1f1f1); |
8 | - static const Color dark_bg_color = Color(0xFF18191A); | 8 | + // static const Color dark_bg_color = Color(0xFF18191A); |
9 | + static const Color dark_bg_color = Color(0x00242424); | ||
9 | 10 | ||
10 | static const Color material_bg = Color(0xFFFFFFFF); | 11 | static const Color material_bg = Color(0xFFFFFFFF); |
11 | static const Color dark_material_bg = Color(0xFF303233); | 12 | static const Color dark_material_bg = Color(0xFF303233); | ... | ... |
... | @@ -6,17 +6,14 @@ class TikTokTopInfoColumn extends StatelessWidget { | ... | @@ -6,17 +6,14 @@ class TikTokTopInfoColumn extends StatelessWidget { |
6 | final String? info; | 6 | final String? info; |
7 | const TikTokTopInfoColumn({ | 7 | const TikTokTopInfoColumn({ |
8 | Key? key, | 8 | Key? key, |
9 | - this.bottomPadding, this.info, | 9 | + this.bottomPadding, |
10 | + this.info, | ||
10 | }) : super(key: key); | 11 | }) : super(key: key); |
11 | 12 | ||
12 | @override | 13 | @override |
13 | Widget build(BuildContext context) { | 14 | Widget build(BuildContext context) { |
14 | return Container( | 15 | return Container( |
15 | - width: SysSize.avatar, | 16 | + margin: const EdgeInsets.all(10.0), |
16 | - margin: EdgeInsets.only( | ||
17 | - bottom: bottomPadding ?? 50, | ||
18 | - right: 12, | ||
19 | - ), | ||
20 | child: Column( | 17 | child: Column( |
21 | mainAxisAlignment: MainAxisAlignment.end, | 18 | mainAxisAlignment: MainAxisAlignment.end, |
22 | crossAxisAlignment: CrossAxisAlignment.end, | 19 | crossAxisAlignment: CrossAxisAlignment.end, | ... | ... |
1 | +import 'dart:ui'; | ||
2 | + | ||
3 | +import 'package:flutter/cupertino.dart'; | ||
1 | import 'package:flutter/material.dart'; | 4 | import 'package:flutter/material.dart'; |
2 | -import 'package:one_poem/tiktok/style/style.dart'; | 5 | +import 'package:one_poem/res/resources.dart'; |
3 | 6 | ||
4 | class TikTokVidePoem extends StatelessWidget { | 7 | class TikTokVidePoem extends StatelessWidget { |
5 | final double? bottomPadding; | 8 | final double? bottomPadding; |
6 | final Function? onShowDetail; | 9 | final Function? onShowDetail; |
7 | - final String? desc; | 10 | + final String? poem; |
11 | + final String? title; | ||
12 | + final String? author; | ||
8 | const TikTokVidePoem({ | 13 | const TikTokVidePoem({ |
9 | Key? key, | 14 | Key? key, |
10 | this.bottomPadding, | 15 | this.bottomPadding, |
11 | this.onShowDetail, | 16 | this.onShowDetail, |
12 | - this.desc, | 17 | + this.poem, |
18 | + this.title, | ||
19 | + this.author, | ||
13 | }) : super(key: key); | 20 | }) : super(key: key); |
14 | 21 | ||
15 | @override | 22 | @override |
16 | Widget build(BuildContext context) { | 23 | Widget build(BuildContext context) { |
17 | return Container( | 24 | return Container( |
18 | - width: SysSize.avatar, | 25 | + decoration: BoxDecoration( |
19 | - margin: EdgeInsets.only( | 26 | + color: Colors.black.withOpacity(.5), |
20 | - bottom: bottomPadding ?? 50, | 27 | + border: Border.all(color: Colors.grey, width: 0.1), // 边色与边宽度 |
21 | - right: 12, | 28 | + borderRadius: BorderRadius.circular(2.0), |
29 | + ), | ||
30 | + height: 220.0, | ||
31 | + margin: const EdgeInsets.all(10.0), | ||
32 | + child: InkWell( | ||
33 | + child: ClipRect( | ||
34 | + child: BackdropFilter( | ||
35 | + filter: ImageFilter.blur( | ||
36 | + sigmaX: 10.0, | ||
37 | + sigmaY: 10.0, | ||
22 | ), | 38 | ), |
23 | - child: Column( | ||
24 | - mainAxisAlignment: MainAxisAlignment.end, | ||
25 | - crossAxisAlignment: CrossAxisAlignment.end, | ||
26 | - children: <Widget>[ | ||
27 | - InkWell( | ||
28 | child: Container( | 39 | child: Container( |
29 | - child: Text( | 40 | + decoration: BoxDecoration( |
30 | - desc ?? '#一言 临境', | 41 | + color: Colors.grey.shade200.withOpacity(0.1), |
31 | - style: StandardTextStyle.normal, | ||
32 | ), | 42 | ), |
43 | + child: Padding( | ||
44 | + padding: const EdgeInsets.all(10.0), | ||
45 | + child: Column( | ||
46 | + children: [ | ||
47 | + Text( | ||
48 | + title ?? '每日一言', | ||
49 | + style: const TextStyle(fontSize: 28.0), | ||
33 | ), | 50 | ), |
34 | - onTap: (){ | 51 | + Gaps.vGap10, |
35 | - onShowDetail; | 52 | + Text( |
36 | - }, | 53 | + poem ?? '#一言 临境', |
54 | + style: const TextStyle( | ||
55 | + fontFamily: "ZCOOLXiaoWei", fontSize: 24.0), | ||
37 | ), | 56 | ), |
38 | - Container( | 57 | + Text( |
39 | - width: SysSize.avatar, | 58 | + author ?? '诗人', |
40 | - height: SysSize.avatar, | 59 | + style: const TextStyle(fontSize: 16.0), |
41 | - margin: const EdgeInsets.only(top: 10), | ||
42 | - decoration: BoxDecoration( | ||
43 | - borderRadius: BorderRadius.circular(SysSize.avatar / 2.0), | ||
44 | - // color: Colors.black.withOpacity(0.8), | ||
45 | ), | 60 | ), |
46 | - ) | ||
47 | ], | 61 | ], |
48 | ), | 62 | ), |
63 | + ), | ||
64 | + ), | ||
65 | + ), | ||
66 | + ), | ||
67 | + onTap: () { | ||
68 | + onShowDetail; | ||
69 | + }, | ||
70 | + ), | ||
49 | ); | 71 | ); |
50 | } | 72 | } |
51 | } | 73 | } | ... | ... |
... | @@ -74,7 +74,7 @@ class _TimelinesPageState extends State<TimelinesPage>{ | ... | @@ -74,7 +74,7 @@ class _TimelinesPageState extends State<TimelinesPage>{ |
74 | Opacity( | 74 | Opacity( |
75 | opacity: _opacity, | 75 | opacity: _opacity, |
76 | child: const CupertinoNavigationBar( | 76 | child: const CupertinoNavigationBar( |
77 | - middle: Text("朋友圈"), | 77 | + middle: Text("临境|附近|新鲜"), |
78 | 78 | ||
79 | ), | 79 | ), |
80 | ) | 80 | ) | ... | ... |
This diff is collapsed. Click to expand it.
... | @@ -168,6 +168,7 @@ flutter: | ... | @@ -168,6 +168,7 @@ flutter: |
168 | - assets/images/account/ | 168 | - assets/images/account/ |
169 | - assets/images/state/ | 169 | - assets/images/state/ |
170 | - assets/images/poem/ | 170 | - assets/images/poem/ |
171 | + - assets/images/category/ | ||
171 | - assets/data/Data.json | 172 | - assets/data/Data.json |
172 | - assets/data/friends/ | 173 | - assets/data/friends/ |
173 | 174 | ||
... | @@ -175,5 +176,12 @@ flutter: | ... | @@ -175,5 +176,12 @@ flutter: |
175 | - family: RobotoThin | 176 | - family: RobotoThin |
176 | fonts: | 177 | fonts: |
177 | - asset: assets/fonts/Roboto-Thin.ttf | 178 | - asset: assets/fonts/Roboto-Thin.ttf |
179 | + # 开源字体:https://fonts.google.com/ | ||
180 | + - family: LongCang | ||
181 | + fonts: | ||
182 | + - asset: assets/fonts/LongCang-Regular.ttf | ||
183 | + - family: ZCOOLXiaoWei | ||
184 | + fonts: | ||
185 | + - asset: assets/fonts/ZCOOLXiaoWei-Regular.ttf | ||
178 | flutter_intl: | 186 | flutter_intl: |
179 | enabled: true | 187 | enabled: true |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
-
Please register or login to post a comment