diff --git a/lib/blocs/collect/collect_bloc.dart b/lib/blocs/collect/collect_bloc.dart index 0ee29c5..528fb77 100644 --- a/lib/blocs/collect/collect_bloc.dart +++ b/lib/blocs/collect/collect_bloc.dart @@ -28,13 +28,10 @@ class CollectBloc extends Bloc { if (event is ToggleCollectEvent) { await repository.toggleCollect(event.id); final widgets = await repository.loadCollectWidgets(); - yield CollectState(widgets: widgets); } if( event is EventSetCollectData){ final widgets = await repository.loadCollectWidgets(); - final collect = await repository.loadCollects(); - print(collect); yield CollectState(widgets: widgets); } } diff --git a/lib/components/permanent/circle_image.dart b/lib/components/permanent/circle_image.dart index 5b27783..724bd11 100644 --- a/lib/components/permanent/circle_image.dart +++ b/lib/components/permanent/circle_image.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; class CircleImage extends StatelessWidget { CircleImage( {Key key, + this.borderSize =3, @required this.image, this.size = 70, this.shadowColor, @@ -12,6 +13,7 @@ class CircleImage extends StatelessWidget { final double size; //大小 final Color shadowColor; //阴影颜色 final Color roundColor; //边框颜色 + final double borderSize; @override Widget build(BuildContext context) { var headIcon = Container( @@ -29,7 +31,7 @@ class CircleImage extends StatelessWidget { ], ), child: Padding( - padding: EdgeInsets.all(3), + padding: EdgeInsets.all(borderSize), child: CircleAvatar( backgroundImage: image, diff --git a/lib/repositories/widget_db_repository.dart b/lib/repositories/widget_db_repository.dart index 49627eb..9dbdf36 100644 --- a/lib/repositories/widget_db_repository.dart +++ b/lib/repositories/widget_db_repository.dart @@ -75,7 +75,6 @@ class WidgetDbRepository implements WidgetRepository { Future> loadCollects() async { var data = await _collectDao.queryAll(); var collects = data.map((e) => CollectPo.fromJson(e)).toList(); - print(collects); return null; } diff --git a/lib/views/pages/collect/default_collect_page.dart b/lib/views/pages/collect/default_collect_page.dart index 1691e36..67a2b6a 100644 --- a/lib/views/pages/collect/default_collect_page.dart +++ b/lib/views/pages/collect/default_collect_page.dart @@ -1,3 +1,4 @@ +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_unit/app/router.dart'; @@ -7,6 +8,7 @@ import 'package:flutter_unit/blocs/collect/collect_state.dart'; import 'package:flutter_unit/blocs/detail/detail_bloc.dart'; import 'package:flutter_unit/blocs/detail/detail_event.dart'; import 'package:flutter_unit/blocs/widgets/home_bloc.dart'; +import 'package:flutter_unit/components/permanent/circle_image.dart'; import 'package:flutter_unit/model/widget_model.dart'; import 'package:flutter_unit/views/items/collect_widget_list_item.dart'; @@ -18,29 +20,104 @@ class DefaultCollectPage extends StatelessWidget { childAspectRatio: 1 / 0.5, ); + final _tabs = ['默认收藏', '收藏集录']; + + + @override Widget build(BuildContext context) { + var _topContext = context; return Scaffold( - appBar: AppBar( - backgroundColor: BlocProvider.of(context).state.homeColor, - title: Text('收藏集'), - actions: [_buildAddActionBuilder(context)], - ), - body: BlocBuilder(builder: (_, state) { - return GridView.builder( - padding: EdgeInsets.all(10), - itemCount: state.widgets.length, - itemBuilder: (_, index) => Container( - child: GestureDetector( - onTap: () => _toDetailPage(context, state.widgets[index]), - child: CollectWidgetListItem( - data: state.widgets[index], - onDelectItemClick: (model) => _deleteCollect(context, model), - )), + backgroundColor: + BlocProvider.of(context).state.homeColor.withAlpha(11), + body: DefaultTabController( + length: _tabs.length, // This is the number of tabs. + child: NestedScrollView( + headerSliverBuilder: + (BuildContext context, bool innerBoxIsScrolled) { + return [ + SliverOverlapAbsorber( + handle: NestedScrollView.sliverOverlapAbsorberHandleFor( + context), + child: _buildAppBar(_topContext, innerBoxIsScrolled)), + ]; + }, + body: TabBarView( + children: [ + BlocBuilder( + builder: (_, state) => CustomScrollView( + slivers: [_buildContent(context, state)], + )), + Container( + alignment: Alignment.center, + child: Text('开发中...'), +// color: Colors.purpleAccent, + ) + ], + ), ), - gridDelegate: gridDelegate, - ); - }), + )); + } + + Widget _buildAppBar(BuildContext context, bool index) { + return SliverAppBar( + leading: Container( + margin: EdgeInsets.all(10), + child: CircleImage( + image: AssetImage('assets/images/icon_head.png'), + borderSize: 1.5, + )), + backgroundColor: BlocProvider.of(context).state.homeColor, + actions: [_buildAddActionBuilder(context)], + title: Text( + '收藏集 CollectUnit', + style: TextStyle(color: Colors.white, //标题 + shadows: [ + Shadow(color: Colors.blue, offset: Offset(1, 1), blurRadius: 2) + ]), + ), + pinned: true, + expandedHeight: 180.0, + flexibleSpace: FlexibleSpaceBar( + collapseMode: CollapseMode.parallax, //视差效果 + background: Image.asset( + "assets/images/caver.jpeg", + fit: BoxFit.cover, + ), + ), + forceElevated: index, + bottom: TabBar( + indicatorColor: Colors.transparent, + labelColor: Colors.white, + labelStyle: TextStyle(fontSize: 16, shadows: [ + Shadow( + color: Theme.of(context).primaryColor, + offset: Offset(1, 1), + blurRadius: 10) + ]), + tabs: _tabs.map((String name) => Tab(text: name)).toList(), + ), + ); + } + + Widget _buildContent(BuildContext context, CollectState state) { + return SliverPadding( + padding: EdgeInsets.only( + top: 180 - kTextTabBarHeight + 20, left: 10, right: 10, bottom: 40), + 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), ); } @@ -51,7 +128,6 @@ class DefaultCollectPage extends StatelessWidget { ), onPressed: () => Scaffold.of(context).openEndDrawer()); - _deleteCollect(BuildContext context, WidgetModel model) => BlocProvider.of(context) .add(ToggleCollectEvent(id: model.id));