diff --git a/README.md b/README.md index b566925..7ecc1f7 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,17 @@ --- +> 当前版本与分支 + +``` +a1@toly ~ % flutter --version +Flutter 1.18.0-7.0.pre.46 • channel master • +https://github.com/flutter/flutter.git +Framework • revision 1f132e90f8 (10 days ago) • 2020-04-23 11:00:12 +0530 +Engine • revision d3f1c08f52 +Tools • Dart 2.9.0 (build 2.9.0-2.0.dev 64b8ded48b) +``` + ### 一、组件的展示页面 diff --git a/lib/app/res/cons.dart b/lib/app/res/cons.dart index 34a1352..2437aa9 100644 --- a/lib/app/res/cons.dart +++ b/lib/app/res/cons.dart @@ -8,9 +8,9 @@ class Cons { static const MENU_INFO = ["关于", "帮助", "问题反馈"]; //菜单栏 static const ICONS_MAP = { //底栏图标 - "图鉴": TolyIcon.icon_layout, "收藏": TolyIcon.icon_star, -// "喜欢": Icons.favorite, "手册": Icons.class_, -// "我的": Icons.account_circle, + "组件集录": TolyIcon.icon_layout, "收藏集录": TolyIcon.icon_star, + "绘制集录": Icons.palette, "布局集录": Icons.widgets, + "要点集录": TolyIcon.icon_bug, }; static const rainbow = [ diff --git a/lib/components/project/widget_node_panel.dart b/lib/components/project/widget_node_panel.dart index 52eb216..1b92a5d 100644 --- a/lib/components/project/widget_node_panel.dart +++ b/lib/components/project/widget_node_panel.dart @@ -1,6 +1,8 @@ import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:flutter_unit_mac/app/style/TolyIcon.dart'; +import 'package:flutter_unit_mac/app/utils/Toast.dart'; import 'package:flutter_unit_mac/components/permanent/circle.dart'; import 'package:flutter_unit_mac/components/permanent/code/code_widget.dart'; @@ -109,13 +111,13 @@ class _WidgetNodePanelState extends State { Widget _buildShareButton() => FeedbackWidget( mode: FeedMode.fade, a: 0.4, - onPressed: _doShare, + onPressed: _doCopy, child: Padding( padding: const EdgeInsets.only( right: 10, ), child: Icon( - TolyIcon.icon_share, + Icons.content_copy, size: 20, color: themeColor, ), @@ -140,8 +142,10 @@ class _WidgetNodePanelState extends State { ); //执行分享 - _doShare() { - Share.share(widget.code); + _doCopy() async{ + await Clipboard.setData(ClipboardData(text: widget.code)); + Toast.toast(context, '复制成功!',duration: Duration(seconds: 10)); +// Share.share(widget.code); } // 折叠代码面板 diff --git a/lib/views/app/navigation/unit_navigation.dart b/lib/views/app/navigation/unit_navigation.dart index 2235009..173194b 100644 --- a/lib/views/app/navigation/unit_navigation.dart +++ b/lib/views/app/navigation/unit_navigation.dart @@ -1,14 +1,21 @@ +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_unit_mac/app/res/cons.dart'; import 'package:flutter_unit_mac/app/router.dart'; +import 'package:flutter_unit_mac/app/style/TolyIcon.dart'; import 'package:flutter_unit_mac/blocs/bloc_exp.dart'; +import 'package:flutter_unit_mac/components/permanent/circle_image.dart'; +import 'package:flutter_unit_mac/components/permanent/feedback_widget.dart'; import 'package:flutter_unit_mac/views/app/navigation/unit_bottom_bar.dart'; import 'package:flutter_unit_mac/views/pages/category/collect_page.dart'; import 'package:flutter_unit_mac/views/pages/category/home_right_drawer.dart'; import 'package:flutter_unit_mac/views/pages/home/home_drawer.dart'; import 'package:flutter_unit_mac/views/pages/home/home_page.dart'; - +import 'package:flutter_unit_mac/views/pages/unit_todo/bug_unit_page.dart'; +import 'package:flutter_unit_mac/views/pages/unit_todo/layout_unit_page.dart'; +import 'package:flutter_unit_mac/views/pages/unit_todo/paint_unit_page.dart'; +import 'package:url_launcher/url_launcher.dart'; class UnitNavigation extends StatefulWidget { @override @@ -34,26 +41,35 @@ class _UnitNavigationState extends State { Widget build(BuildContext context) { return BlocBuilder( builder: (_, state) => Scaffold( - drawer: HomeDrawer(color:state.homeColor), - //左滑页 - endDrawer: HomeRightDrawer(color: state.homeColor,), - //右滑页 - floatingActionButtonLocation: - FloatingActionButtonLocation.centerDocked, - floatingActionButton: _buildSearchButton(state.homeColor), - body: PageView( - physics:const NeverScrollableScrollPhysics(), - //使用PageView实现页面的切换 - controller: _controller, - children: [ - HomePage(), - CollectPage(), - ], - ), - bottomNavigationBar: UnitBottomBar( + drawer: HomeDrawer(color: state.homeColor), + //左滑页 + endDrawer: HomeRightDrawer( color: state.homeColor, - itemData: Cons.ICONS_MAP, - onItemClick: _onTapNav))); + ), + //右滑页 + floatingActionButton: _buildSearchButton(state.homeColor), + body: Row( + children: [ + _buildLeftNav(), + Expanded( + child: Container( + child: PageView( + physics: const NeverScrollableScrollPhysics(), + //使用PageView实现页面的切换 + controller: _controller, + children: [ + HomePage(), + CollectPage(), + PaintUnitPage(), + LayoutUnitPage(), + BugUnitPage(), + ], + ), + ), + ), + ], + ), + )); } Widget _buildSearchButton(Color color) { @@ -66,10 +82,204 @@ class _UnitNavigationState extends State { } _onTapNav(int index) { - _controller.animateToPage(index, - duration:const Duration(milliseconds: 200), curve: Curves.linear); + _controller.jumpToPage(index); if (index == 1) { BlocProvider.of(context).add(EventSetCollectData()); } } + + Widget _buildLeftNav() { + return Container( + padding: EdgeInsets.only(top: 20), + alignment: Alignment.topCenter, + margin: EdgeInsets.only(right: 1), + width: 120, + decoration: BoxDecoration(color: Color(0xff2C3036), boxShadow: [ + BoxShadow(color: Colors.grey, offset: Offset(1, 0), blurRadius: 2) + ]), + child: Column( + children: [ + Wrap( + direction: Axis.vertical, + spacing: 10, + crossAxisAlignment: WrapCrossAlignment.center, + children: [ + CircleImage( + image: AssetImage('assets/images/icon_head.png'), + size: 60, + ), + Text( + '张风捷特烈', + style: TextStyle(color: Colors.white70), + ) + ], + ), + buildIcons(), + Divider( + color: Colors.white, + height: 1, + endIndent: 20, + ), +// SizedBox(height: 60,), + Expanded( + flex: 5, + child: Center( + child: RightNavBar( + itemData: Cons.ICONS_MAP, + onItemClick: _onTapNav, + color: Theme.of(context).primaryColor, + ), + ), + ), + + Expanded( + child: Container(), + flex: 1, + ), + Divider( + indent: 20, + color: Colors.white, + height: 1, + ), + Builder( + builder: (ctx) => FeedbackWidget( + onPressed: () => Scaffold.of(ctx).openDrawer(), + child: Padding( + padding: const EdgeInsets.only(bottom: 20, top: 20), + child: Icon( + Icons.settings, + color: Colors.white, + ), + ), + ), + ), + ], + ), + ); + } + + Widget buildIcons() { + return Padding( + padding: const EdgeInsets.only(bottom: 20, top: 20), + child: Wrap( + spacing: 5, + children: [ + FeedbackWidget( + onPressed: () => _launchURL("http://blog.toly1994.com"), + child: Icon( + TolyIcon.icon_item, + color: Colors.white, + ), + ), + FeedbackWidget( + onPressed: () => + _launchURL("https://github.com/toly1994328/FlutterUnit"), + child: Icon( + TolyIcon.icon_github, + color: Colors.white, + ), + ), + FeedbackWidget( + onPressed: () => + _launchURL("https://juejin.im/user/5b42c0656fb9a04fe727eb37"), + child: Icon( + TolyIcon.icon_juejin, + color: Colors.white, + ), + ), + ], + ), + ); + } + + _launchURL(String url) async { + if (await canLaunch(url)) { + await launch(url); + } else { + debugPrint('Could not launch $url'); + } + } +} + +class RightNavBar extends StatefulWidget { + final Color color; + final Map itemData; + final Function(int) onItemClick; + final Size itemSize; + + RightNavBar( + {this.color = Colors.blue, + this.itemData, + this.onItemClick, + this.itemSize = const Size(120, 35)}); + + @override + _RightNavBarState createState() => _RightNavBarState(); +} + +class _RightNavBarState extends State { + int _position = 0; + + List get info => widget.itemData.keys.toList(); + + @override + Widget build(BuildContext context) { + return Column( + mainAxisSize: MainAxisSize.min, + children: info + .map((e) => _buildChild(context, info.indexOf(e), widget.color)) + .toList(), + ); + } + + Widget _buildChild(BuildContext context, int i, Color color) { + var active = i == _position; + + return GestureDetector( + onTap: () => _tapTab(i), + child: Container( + alignment: Alignment.topLeft, + margin: EdgeInsets.only(top: 10), + width: widget.itemSize.width, + child: UnconstrainedBox( + child: Container( + alignment: Alignment.center, + decoration: BoxDecoration( + color: active ? widget.color : Colors.white.withAlpha(33), + borderRadius: BorderRadius.only( + topRight: Radius.circular(20), + bottomRight: Radius.circular(20))), + width: + active ? widget.itemSize.width*0.95 : widget.itemSize.width * 0.85, + height: widget.itemSize.height, + child: Wrap( + spacing: 10, + crossAxisAlignment: WrapCrossAlignment.center, + children: [ + Icon( + widget.itemData[info[i]], + size: active ? 24 : 20, + color: active ? Colors.white:Colors.white70, + ), + Text( + info[i], + style: TextStyle( + color: active ? Colors.white:Colors.white70, + ), + ), + ], + ), + ), + ), + )); + } + + _tapTab(int i) { + setState(() { + _position = i; + if (widget.onItemClick != null) { + widget.onItemClick(_position); + } + }); + } } diff --git a/lib/views/items/collect_widget_list_item.dart b/lib/views/items/collect_widget_list_item.dart index 6f8666d..187766b 100644 --- a/lib/views/items/collect_widget_list_item.dart +++ b/lib/views/items/collect_widget_list_item.dart @@ -50,7 +50,7 @@ class CollectWidgetListItem extends StatelessWidget { ), ), Positioned( - bottom: 5, + bottom: 20, right: 5, child: FeedbackWidget( onPressed: () { diff --git a/lib/views/items/coupon_widget_list_item.dart b/lib/views/items/coupon_widget_list_item.dart index 9b4d3ca..e499ca6 100644 --- a/lib/views/items/coupon_widget_list_item.dart +++ b/lib/views/items/coupon_widget_list_item.dart @@ -27,7 +27,7 @@ class CouponWidgetListItem extends StatelessWidget { @override Widget build(BuildContext context) { return Container( - margin: const EdgeInsets.symmetric(horizontal: 15, vertical: 8), +// margin: const EdgeInsets.symmetric(horizontal: 15, vertical: 8), child: Stack( children: [ isClip diff --git a/lib/views/items/techno_widget_list_item.dart b/lib/views/items/techno_widget_list_item.dart index 61bb2e5..ab47d70 100644 --- a/lib/views/items/techno_widget_list_item.dart +++ b/lib/views/items/techno_widget_list_item.dart @@ -20,7 +20,6 @@ class TechnoWidgetListItem extends StatelessWidget { @override Widget build(BuildContext context) { return Container( - margin: const EdgeInsets.symmetric(horizontal: 15, vertical: 8), child: Stack( children: [ Material( diff --git a/lib/views/pages/category/category_page.dart b/lib/views/pages/category/category_page.dart index fc3c54c..aabbc4d 100644 --- a/lib/views/pages/category/category_page.dart +++ b/lib/views/pages/category/category_page.dart @@ -16,10 +16,10 @@ import 'edit_category_panel.dart'; class CategoryPage extends StatelessWidget { final gridDelegate = const SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: 4, - mainAxisSpacing: 10, - crossAxisSpacing: 10, - childAspectRatio: 0.8, + crossAxisCount: 3, + mainAxisSpacing: 25, + crossAxisSpacing: 25, + childAspectRatio: 0.9, ); @override @@ -27,7 +27,7 @@ class CategoryPage extends StatelessWidget { return BlocBuilder(builder: (_, state) { if (state is CategoryLoadedState) { return GridView.builder( - padding: EdgeInsets.all(10), + padding: EdgeInsets.only(right: 20,left: 20,bottom: 20,top: 0), itemCount: state.categories.length, itemBuilder: (_, index) => Container( child: GestureDetector( @@ -70,40 +70,46 @@ class CategoryPage extends StatelessWidget { _editCollect(BuildContext context, CategoryModel model) { showDialog( context: context, - builder: (ctx) => Dialog( - backgroundColor:Color(0xFFF2F2F2), - elevation: 5, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.all(Radius.circular(10))), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - SizedBox( - height: 5, - ), - Row( + builder: (ctx) => UnconstrainedBox( + child: Container( + alignment: Alignment.center, + width: 400, + child: Dialog( + backgroundColor:Color(0xFFF2F2F2), + elevation: 5, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.all(Radius.circular(10))), + child: Column( + mainAxisSize: MainAxisSize.min, children: [ + SizedBox( + height: 5, + ), + Row( + children: [ + Padding( + padding: const EdgeInsets.only(left: 20, right: 10), + child: Circle( + color: Theme.of(context).primaryColor, + ), + ), + Text( + '修改收藏集', + style: TextStyle(fontSize: 20), + ), + Spacer(), + CloseButton() + ], + ), Padding( - padding: const EdgeInsets.only(left: 20, right: 10), - child: Circle( - color: Theme.of(context).primaryColor, - ), + padding: const EdgeInsets.all(8.0), + child: EditCategoryPanel(model: model,type: EditType.update,), ), - Text( - '修改收藏集', - style: TextStyle(fontSize: 20), - ), - Spacer(), - CloseButton() ], ), - Padding( - padding: const EdgeInsets.all(8.0), - child: EditCategoryPanel(model: model,type: EditType.update,), - ), - ], - ), - )); + ), + ), + )); } _toDetailPage(BuildContext context, CategoryModel model) { diff --git a/lib/views/pages/category/collect_page.dart b/lib/views/pages/category/collect_page.dart index 23cbe67..6e789f4 100644 --- a/lib/views/pages/category/collect_page.dart +++ b/lib/views/pages/category/collect_page.dart @@ -12,10 +12,10 @@ import 'category_page.dart'; class CollectPage extends StatelessWidget { final gridDelegate = const SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: 4, - mainAxisSpacing: 10, - crossAxisSpacing: 10, - childAspectRatio: 1 / 0.5, + crossAxisCount: 3, + mainAxisSpacing: 20, + crossAxisSpacing: 20, + childAspectRatio: 2, ); final _tabs = ['收藏集录','默认收藏', ]; @@ -104,21 +104,22 @@ class CollectPage extends StatelessWidget { Widget _buildContent(BuildContext context, CollectState state) { return SliverPadding( - padding: EdgeInsets.only(top:10, left: 10, right: 10, bottom: 40), + padding: EdgeInsets.only(left: 20,right: 20), sliver: SliverGrid( - delegate: SliverChildBuilderDelegate( - (_, index) => Container( - child: GestureDetector( - onTap: () => - _toDetailPage(context, state.widgets[index]), - child: CollectWidgetListItem( - data: state.widgets[index], - onDelectItemClick: (model) => - _deleteCollect(context, model), - )), - ), - childCount: state.widgets.length), - gridDelegate: gridDelegate), + delegate: SliverChildBuilderDelegate( + (_, index) => Container( + child: GestureDetector( + onTap: () => + _toDetailPage(context, state.widgets[index]), + child: CollectWidgetListItem( + data: state.widgets[index], + onDelectItemClick: (model) => + _deleteCollect(context, model), + )), + ), + childCount: state.widgets.length), + gridDelegate: gridDelegate + ), ); } diff --git a/lib/views/pages/home/home_page.dart b/lib/views/pages/home/home_page.dart index ea72ac3..e0c9fe2 100644 --- a/lib/views/pages/home/home_page.dart +++ b/lib/views/pages/home/home_page.dart @@ -32,7 +32,6 @@ class _HomePageState extends State { @override Widget build(BuildContext context) { var color = BlocProvider.of(context).state.homeColor; - var showBg = BlocProvider.of(context).state.showBackGround; return Scaffold( appBar: TolyAppBar( selectIndex: Cons.tabColors.indexOf(color.value), @@ -41,27 +40,34 @@ class _HomePageState extends State { ), body: Stack( children: [ - if (showBg) Background(), + BlocBuilder(builder: (_, state) { + if (state.showBackGround) { + return Background(); + } + return Container(); + }), BlocBuilder(builder: _buildContent) ], ), ); } + final gridDelegate = const SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 2, mainAxisSpacing: 10, - crossAxisSpacing: 10, - childAspectRatio: 3.5, + crossAxisSpacing: 20, + childAspectRatio: 3.0, ); + Widget _buildContent(BuildContext context, HomeState state) { if (state is WidgetsLoaded) { var items = state.widgets; - print(items.length); if (items.isEmpty) return EmptyPage(); return GridView.builder( - padding: EdgeInsets.all(10), + controller: _ctrl, + padding: EdgeInsets.all(20), itemCount: items.length, - itemBuilder: (_, index) =>_buildHomeItem(items[index]), + itemBuilder: (_, index) => _buildHomeItem(items[index]), gridDelegate: gridDelegate, ); } @@ -76,11 +82,16 @@ class _HomePageState extends State { Widget _buildHomeItem( WidgetModel model, ) => - FeedbackWidget( - duration: const Duration(milliseconds: 200), - onPressed: () => _toDetailPage(model), - child: HomeItemSupport.get(model, - BlocProvider.of(context).state.itemStyleIndex)); + BlocBuilder( + condition: (p, c) => (p.itemStyleIndex != c.itemStyleIndex), + builder: (_, state) { + return + FeedbackWidget( + duration: const Duration(milliseconds: 200), + onPressed: () => _toDetailPage(model), + child: HomeItemSupport.get(model, state.itemStyleIndex)); + }, + ); _updateAppBarHeight() { if (_ctrl.offset < _limitY * 4) { diff --git a/lib/views/pages/home/toly_app_bar.dart b/lib/views/pages/home/toly_app_bar.dart index 3fffa12..f8c66bc 100644 --- a/lib/views/pages/home/toly_app_bar.dart +++ b/lib/views/pages/home/toly_app_bar.dart @@ -31,6 +31,7 @@ class _TolyAppBarState extends State double _width = 0; int _selectIndex = 0; double factor = 1.0; + final navWidth =120; List colors = Cons.tabColors; List info = Cons.tabs; @@ -55,7 +56,7 @@ class _TolyAppBarState extends State @override Widget build(BuildContext context) { - _width = MediaQuery.of(context).size.width / colors.length; + _width = (MediaQuery.of(context).size.width-navWidth) / colors.length; return Container( alignment: Alignment.center, child: Flow( diff --git a/lib/views/pages/search/serach_page.dart b/lib/views/pages/search/serach_page.dart index 29b3bd2..10f3aa2 100644 --- a/lib/views/pages/search/serach_page.dart +++ b/lib/views/pages/search/serach_page.dart @@ -2,13 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_unit_mac/app/router.dart'; import 'package:flutter_unit_mac/app/style/TolyIcon.dart'; -import 'package:flutter_unit_mac/blocs/collect/collect_bloc.dart'; -import 'package:flutter_unit_mac/blocs/collect/collect_event.dart'; -import 'package:flutter_unit_mac/blocs/detail/detail_bloc.dart'; -import 'package:flutter_unit_mac/blocs/detail/detail_event.dart'; -import 'package:flutter_unit_mac/blocs/search/search_bloc.dart'; -import 'package:flutter_unit_mac/blocs/search/search_event.dart'; -import 'package:flutter_unit_mac/blocs/search/search_state.dart'; +import 'package:flutter_unit_mac/blocs/bloc_exp.dart'; import 'package:flutter_unit_mac/components/permanent/circle.dart'; import 'package:flutter_unit_mac/storage/dao/widget_dao.dart'; import 'package:flutter_unit_mac/model/widget_model.dart'; @@ -21,7 +15,6 @@ import 'package:flutter_unit_mac/views/pages/search/start_filter.dart'; import 'empty_page.dart'; - class SearchPage extends StatefulWidget { @override _SearchPageState createState() => _SearchPageState(); @@ -34,14 +27,16 @@ class _SearchPageState extends State { body: WillPopScope( onWillPop: () async { //返回时 情空搜索 - BlocProvider.of(context).add(EventTextChanged(args: SearchArgs())); + BlocProvider.of(context) + .add(EventTextChanged(args: SearchArgs())); return true; }, child: CustomScrollView( slivers: [ - _buildSliverAppBar(), + _buildSliverAppBar(), SliverToBoxAdapter(child: _buildStarFilter()), - BlocBuilder(builder: (_, state) => _buildBodyByState(state)) + BlocBuilder( + builder: (_, state) => _buildBodyByState(state)) ], ), ), @@ -50,15 +45,15 @@ class _SearchPageState extends State { Widget _buildSliverAppBar() { return SliverAppBar( - pinned: true, - title: AppSearchBar(), - actions: [ - Padding( - padding: const EdgeInsets.only(right: 15.0), - child: Icon(TolyIcon.icon_sound), - ) - ], - ); + pinned: true, + title: AppSearchBar(), + actions: [ + Padding( + padding: const EdgeInsets.only(right: 15.0), + child: Icon(TolyIcon.icon_sound), + ) + ], + ); } Widget _buildStarFilter() => Column( @@ -99,28 +94,56 @@ class _SearchPageState extends State { ); Widget _buildBodyByState(SearchState state) { - if (state is SearchStateNoSearch) return SliverToBoxAdapter(child: NotSearchPage(),); - if (state is SearchStateLoading) return SliverToBoxAdapter(child: LoadingPage()); - if (state is SearchStateError) return SliverToBoxAdapter(child: ErrorPage()); + if (state is SearchStateNoSearch) + return SliverToBoxAdapter( + child: NotSearchPage(), + ); + if (state is SearchStateLoading) + return SliverToBoxAdapter(child: LoadingPage()); + if (state is SearchStateError) + return SliverToBoxAdapter(child: ErrorPage()); if (state is SearchStateSuccess) return _buildSliverList(state.result); - if (state is SearchStateEmpty) return SliverToBoxAdapter(child: EmptyPage()); + if (state is SearchStateEmpty) + return SliverToBoxAdapter(child: EmptyPage()); return NotSearchPage(); } - Widget _buildSliverList(List models) => SliverList( - delegate: SliverChildBuilderDelegate( - (_, int index) => Container( - margin: EdgeInsets.symmetric(horizontal: 15, vertical: 5), + Widget _buildSliverList(List models) => SliverPadding( + padding: EdgeInsets.all(20), + sliver: SliverGrid.count( + crossAxisCount: 2, + mainAxisSpacing: 10, + crossAxisSpacing: 20, + childAspectRatio: 3.5, + children: models + .asMap() + .keys + .map((index) => Container( +// margin: EdgeInsets.symmetric(horizontal: 15, vertical: 5), child: InkWell( onTap: () => _toDetailPage(models[index]), child: TechnoWidgetListItem( data: models[index], - ))), - childCount: models.length), - ); + )), + )) + .toList(), +// delegate: SliverChildBuilderDelegate( +// (_, int index) => +// Container( +// margin: EdgeInsets.symmetric(horizontal: 15, vertical: 5), +// child: +// InkWell( +// onTap: () => _toDetailPage(models[index]), +// child: TechnoWidgetListItem( +// data: models[index], +// )) +// ), +// childCount: models.length), + ), + ); _doSelectStart(List select) { - var temp = select.map((e)=>e+1).toList(); + var temp = select.map((e) => e + 1).toList(); if (temp.length < 5) { temp.addAll(List.generate(5 - temp.length, (e) => -1)); } @@ -130,6 +153,6 @@ class _SearchPageState extends State { _toDetailPage(WidgetModel model) { BlocProvider.of(context).add(FetchWidgetDetail(model)); - Navigator.pushNamed(context, Router.widget_detail,arguments: model); + Navigator.pushNamed(context, Router.widget_detail, arguments: model); } } diff --git a/lib/views/pages/setting/code_style_setting.dart b/lib/views/pages/setting/code_style_setting.dart index 9d2d33a..02958c1 100644 --- a/lib/views/pages/setting/code_style_setting.dart +++ b/lib/views/pages/setting/code_style_setting.dart @@ -29,6 +29,14 @@ class Hello { }); }"""; + + final gridDelegate = const SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 2, + mainAxisSpacing: 10, + crossAxisSpacing: 20, + childAspectRatio: 1.5, + ); + @override Widget build(BuildContext context) { return Scaffold( @@ -43,9 +51,11 @@ class Hello { Widget _buildFontCell( BuildContext context, List styles, int index) { - return ListView.builder( - itemCount: styles.length, - itemBuilder: (_ctx, i) => FeedbackWidget( + return GridView.builder( + gridDelegate: gridDelegate, + padding: EdgeInsets.all(20), + itemCount: styles.length, + itemBuilder: (_, i) => FeedbackWidget( a: 0.95, duration: Duration(milliseconds: 200), onPressed: (){ diff --git a/lib/views/pages/setting/font_setting.dart b/lib/views/pages/setting/font_setting.dart index 0639fec..3e804f6 100644 --- a/lib/views/pages/setting/font_setting.dart +++ b/lib/views/pages/setting/font_setting.dart @@ -30,7 +30,7 @@ class FontSettingPage extends StatelessWidget { return GridView.count( padding: EdgeInsets.only(top: 20, left: 10, right: 10), shrinkWrap: true, - crossAxisCount: 2, + crossAxisCount: 3, mainAxisSpacing: 10, crossAxisSpacing: 10, childAspectRatio: 1.5, diff --git a/lib/views/pages/setting/item_style_setting.dart b/lib/views/pages/setting/item_style_setting.dart index fc517eb..3bbb1a7 100644 --- a/lib/views/pages/setting/item_style_setting.dart +++ b/lib/views/pages/setting/item_style_setting.dart @@ -15,6 +15,15 @@ import 'package:flutter_unit_mac/views/items/home_item_support.dart'; /// 说明: item样式切换支持 class ItemStyleSettingPage extends StatelessWidget { + + final gridDelegate = const SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 2, + mainAxisSpacing: 10, + crossAxisSpacing: 20, + childAspectRatio: 3.5, + ); + + @override Widget build(BuildContext context) { return Scaffold( @@ -31,33 +40,37 @@ class ItemStyleSettingPage extends StatelessWidget { get items=> HomeItemSupport.itemSimples(); Widget _buildFontCell(BuildContext context, int index) { - return ListView.builder( - itemCount: items.length, - itemBuilder: (_, i) => FeedbackWidget( - a: 0.95, - duration: Duration(milliseconds: 200), - onPressed: () { - BlocProvider.of(context) - .add(EventChangeItemStyle(i)); - }, - child: Stack( - children: [ - items[i], - if (index == i) - Positioned( - left: 25, - top: 15, - child: Circle( - color: Theme.of(context).primaryColor, - radius: 10, - child: Icon( - Icons.check, - color: Colors.white, - size: 15, - ), - ), - ) - ], - ))); + return GridView.builder( + padding: EdgeInsets.all(20), + itemCount: items.length, + itemBuilder: (_, i) => FeedbackWidget( + a: 0.95, + duration: Duration(milliseconds: 200), + onPressed: () { + BlocProvider.of(context) + .add(EventChangeItemStyle(i)); + }, + child: Stack( + children: [ + items[i], + if (index == i) + Positioned( + left: 25, + top: 15, + child: Circle( + color: Theme.of(context).primaryColor, + radius: 10, + child: Icon( + Icons.check, + color: Colors.white, + size: 15, + ), + ), + ) + ], + )), + gridDelegate: gridDelegate, + ); } + } diff --git a/lib/views/pages/setting/setting_page.dart b/lib/views/pages/setting/setting_page.dart index 602cb2c..b468844 100644 --- a/lib/views/pages/setting/setting_page.dart +++ b/lib/views/pages/setting/setting_page.dart @@ -1,13 +1,11 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:flutter_unit_mac/app/res/cons.dart'; import 'package:flutter_unit_mac/app/router.dart'; import 'package:flutter_unit_mac/app/style/TolyIcon.dart'; import 'package:flutter_unit_mac/blocs/global/global_bloc.dart'; import 'package:flutter_unit_mac/blocs/global/global_event.dart'; import 'package:flutter_unit_mac/blocs/global/global_state.dart'; -import 'package:flutter_unit_mac/components/permanent/feedback_widget.dart'; -import 'package:flutter_unit_mac/components/permanent/circle.dart'; + class SettingPage extends StatelessWidget { @override @@ -73,10 +71,7 @@ class SettingPage extends StatelessWidget { color: Theme.of(context).primaryColor, ), title: Text('显示背景'), - onChanged: (show) { - BlocProvider.of(context) - .add(EventSwitchShowBg(show)); - }, + onChanged: (show) => BlocProvider.of(context).add(EventSwitchShowBg(show)), )); Widget _nextIcon(BuildContext context) => diff --git a/lib/views/pages/setting/theme_color_setting.dart b/lib/views/pages/setting/theme_color_setting.dart index 8dc036c..693a5df 100644 --- a/lib/views/pages/setting/theme_color_setting.dart +++ b/lib/views/pages/setting/theme_color_setting.dart @@ -13,6 +13,8 @@ import 'package:flutter_unit_mac/components/permanent/circle.dart'; class ThemeColorSettingPage extends StatelessWidget { + + @override Widget build(BuildContext context) { return Scaffold( @@ -30,7 +32,7 @@ class ThemeColorSettingPage extends StatelessWidget { return GridView.count( padding: EdgeInsets.only(top: 20, left: 10, right: 10), shrinkWrap: true, - crossAxisCount: 2, + crossAxisCount: 4, mainAxisSpacing: 10, crossAxisSpacing: 10, childAspectRatio: 1.5, diff --git a/macos/Podfile.lock b/macos/Podfile.lock index 9bbf6ee..540eb5c 100644 --- a/macos/Podfile.lock +++ b/macos/Podfile.lock @@ -14,7 +14,7 @@ PODS: - FlutterMacOS DEPENDENCIES: - - FlutterMacOS (from `Flutter/ephemeral/.symlinks/flutter/darwin-x64`) + - FlutterMacOS (from `Flutter/ephemeral/.symlinks/flutter/darwin-x64-release`) - shared_preferences (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences/macos`) - shared_preferences_macos (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_macos/macos`) - sqflite (from `Flutter/ephemeral/.symlinks/plugins/sqflite/macos`) @@ -27,7 +27,7 @@ SPEC REPOS: EXTERNAL SOURCES: FlutterMacOS: - :path: Flutter/ephemeral/.symlinks/flutter/darwin-x64 + :path: Flutter/ephemeral/.symlinks/flutter/darwin-x64-release shared_preferences: :path: Flutter/ephemeral/.symlinks/plugins/shared_preferences/macos shared_preferences_macos: @@ -43,10 +43,10 @@ SPEC CHECKSUMS: FlutterMacOS: 15bea8a44d2fa024068daa0140371c020b4b6ff9 FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a shared_preferences: 9fec34d1bd906196a4da48fcf6c3ad521cc00b8d - shared_preferences_macos: 480ce071d0666e37cef23fe6c702293a3d21799e + shared_preferences_macos: 5e5c2839894accb56b7d23328905b757f2bafaf6 sqflite: 6c1f07e1d4399d619ea619fea9171251dd24d058 url_launcher: af78307ef9bafff91273b34f1c6c0c86a0004fd7 - url_launcher_macos: 45af3d61de06997666568a7149c1be98b41c95d4 + url_launcher_macos: 76867a28e24e0b6b98bfd65f157b64108e6d477a PODFILE CHECKSUM: d8ba9b3e9e93c62c74a660b46c6fcb09f03991a7 diff --git a/pubspec.lock b/pubspec.lock index afad29f..0bf8b72 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1,27 +1,13 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: - archive: - dependency: transitive - description: - name: archive - url: "https://pub.flutter-io.cn" - source: hosted - version: "2.0.11" - args: - dependency: transitive - description: - name: args - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.5.2" async: dependency: transitive description: name: async url: "https://pub.flutter-io.cn" source: hosted - version: "2.4.0" + version: "2.4.1" bloc: dependency: transitive description: @@ -35,35 +21,28 @@ packages: name: boolean_selector url: "https://pub.flutter-io.cn" source: hosted - version: "1.0.5" + version: "2.0.0" charcode: dependency: transitive description: name: charcode url: "https://pub.flutter-io.cn" source: hosted - version: "1.1.2" + version: "1.1.3" + clock: + dependency: transitive + description: + name: clock + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.0.1" collection: dependency: transitive description: name: collection url: "https://pub.flutter-io.cn" source: hosted - version: "1.14.11" - convert: - dependency: transitive - description: - name: convert - url: "https://pub.flutter-io.cn" - source: hosted - version: "2.1.1" - crypto: - dependency: transitive - description: - name: crypto - url: "https://pub.flutter-io.cn" - source: hosted - version: "2.1.3" + version: "1.14.12" cupertino_icons: dependency: "direct main" description: @@ -78,6 +57,13 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "1.1.1" + fake_async: + dependency: transitive + description: + name: fake_async + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.1.0" flutter: dependency: "direct main" description: flutter @@ -107,13 +93,6 @@ packages: description: flutter source: sdk version: "0.0.0" - image: - dependency: transitive - description: - name: image - url: "https://pub.flutter-io.cn" - source: hosted - version: "2.1.4" intl: dependency: "direct main" description: @@ -148,21 +127,7 @@ packages: name: path url: "https://pub.flutter-io.cn" source: hosted - version: "1.6.4" - pedantic: - dependency: transitive - description: - name: pedantic - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.8.0+1" - petitparser: - dependency: transitive - description: - name: petitparser - url: "https://pub.flutter-io.cn" - source: hosted - version: "2.4.0" + version: "1.7.0" plugin_platform_interface: dependency: transitive description: @@ -177,13 +142,6 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "4.0.4" - quiver: - dependency: transitive - description: - name: quiver - url: "https://pub.flutter-io.cn" - source: hosted - version: "2.0.5" rxdart: dependency: transitive description: @@ -237,7 +195,7 @@ packages: name: source_span url: "https://pub.flutter-io.cn" source: hosted - version: "1.5.5" + version: "1.7.0" sqflite: dependency: "direct main" description: @@ -293,7 +251,7 @@ packages: name: test_api url: "https://pub.flutter-io.cn" source: hosted - version: "0.2.11" + version: "0.2.15" toggle_rotate: dependency: "direct main" description: @@ -343,13 +301,6 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "2.0.8" - xml: - dependency: transitive - description: - name: xml - url: "https://pub.flutter-io.cn" - source: hosted - version: "3.5.0" sdks: dart: ">=2.7.0 <3.0.0" flutter: ">=1.12.13+hotfix.4 <2.0.0"