forked from lxm_flutter/FlutterUnit
优化收藏集显示
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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));
|
||||
|
||||
Reference in New Issue
Block a user