优化收藏集显示

This commit is contained in:
toly
2020-04-21 06:52:42 +08:00
parent 98bb07c245
commit 068d99cb9f
4 changed files with 99 additions and 25 deletions

View File

@@ -28,13 +28,10 @@ class CollectBloc extends Bloc<CollectEvent, CollectState> {
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);
}
}

View File

@@ -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,

View File

@@ -75,7 +75,6 @@ class WidgetDbRepository implements WidgetRepository {
Future<List<CollectModel>> loadCollects() async {
var data = await _collectDao.queryAll();
var collects = data.map((e) => CollectPo.fromJson(e)).toList();
print(collects);
return null;
}

View File

@@ -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<HomeBloc>(context).state.homeColor,
title: Text('收藏集'),
actions: <Widget>[_buildAddActionBuilder(context)],
),
body: BlocBuilder<CollectBloc, CollectState>(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<HomeBloc>(context).state.homeColor.withAlpha(11),
body: DefaultTabController(
length: _tabs.length, // This is the number of tabs.
child: NestedScrollView(
headerSliverBuilder:
(BuildContext context, bool innerBoxIsScrolled) {
return <Widget>[
SliverOverlapAbsorber(
handle: NestedScrollView.sliverOverlapAbsorberHandleFor(
context),
child: _buildAppBar(_topContext, innerBoxIsScrolled)),
];
},
body: TabBarView(
children: <Widget>[
BlocBuilder<CollectBloc, CollectState>(
builder: (_, state) => CustomScrollView(
slivers: <Widget>[_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<HomeBloc>(context).state.homeColor,
actions: <Widget>[_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<CollectBloc>(context)
.add(ToggleCollectEvent(id: model.id));