fix: fix sticky stats position on cold start

This commit is contained in:
Tien Nguyen 2021-05-14 17:03:51 +02:00
parent 295c1791bd
commit 70bb69d901
No known key found for this signature in database
GPG Key ID: 016B4AFEF38447D4
5 changed files with 79 additions and 78 deletions

View File

@ -23,14 +23,13 @@ class CoursesRowWidgetState extends State<CoursesRowWidget> {
@override
Widget build(BuildContext context) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: const EdgeInsets.only(top: 32.0, left: 16, bottom: 8.0),
child: Text('Courses', style: Theme.of(context).textTheme.headline3),
),
StreamBuilder<ApiResponse<CoursesResponse>>(
return Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
Padding(
padding: const EdgeInsets.only(top: 32.0, left: 16, bottom: 8.0),
child: Text('Courses', style: Theme.of(context).textTheme.headline3),
),
SizeChangedLayoutNotifier(
child: StreamBuilder<ApiResponse<CoursesResponse>>(
stream: _bloc.coursesList.stream,
initialData: ApiResponse.loading(),
builder: (context, snapshot) {
@ -48,8 +47,8 @@ class CoursesRowWidgetState extends State<CoursesRowWidget> {
}
return Container();
}),
],
);
),
]);
}
Widget _horizontalCoursesRow(

View File

@ -22,33 +22,37 @@ class DailyMessageWidgetState extends State<DailyMessageWidget> {
@override
Widget build(BuildContext context) {
return StreamBuilder<ApiResponse<DailyMessageResponse>>(
stream: _bloc.coursesList.stream,
builder: (context, snapshot) {
var widget;
return SizeChangedLayoutNotifier(
child: StreamBuilder<ApiResponse<DailyMessageResponse>>(
stream: _bloc.coursesList.stream,
builder: (context, snapshot) {
var widget;
if (!snapshot.hasData || snapshot.data == null || snapshot.data.body.body.isEmptyOrNull()) {
return Container();
}
if (!snapshot.hasData ||
snapshot.data == null ||
snapshot.data.body.body.isEmptyOrNull()) {
return Container();
}
switch (snapshot.data.status) {
case Status.LOADING:
widget = const CircularProgressIndicator();
break;
case Status.COMPLETED:
widget = _getMessageWidget(snapshot, context);
break;
case Status.ERROR:
widget = Container();
break;
}
switch (snapshot.data.status) {
case Status.LOADING:
widget = const CircularProgressIndicator();
break;
case Status.COMPLETED:
widget = _getMessageWidget(snapshot, context);
break;
case Status.ERROR:
widget = Container();
break;
}
return Padding(
padding: const EdgeInsets.only(
left: 16.0, right: 16.0, bottom: 32.0, top: 32.0),
child: widget,
);
});
return Padding(
padding: const EdgeInsets.only(
left: 16.0, right: 16.0, bottom: 32.0, top: 32.0),
child: widget,
);
}),
);
}
Widget _getMessageWidget(
@ -75,8 +79,6 @@ class DailyMessageWidgetState extends State<DailyMessageWidget> {
);
}
void _launchUrl(String text, String href, String title) {
launchUrl(href);
}

View File

@ -31,40 +31,42 @@ class SmallShortcutsRowWidgetState extends State<SmallShortcutsRowWidget> {
@override
Widget build(BuildContext context) {
return StreamBuilder<ApiResponse<ShortcutsResponse>>(
stream: _bloc.shortcutList.stream,
initialData: ApiResponse.loading(),
builder: (context, snapshot) {
switch (snapshot.data.status) {
case Status.LOADING:
return _getLoadingWidget();
break;
case Status.COMPLETED:
return GridView.count(
crossAxisCount: 2,
padding:
const EdgeInsets.only(left: 12.0, right: 12.0, top: 8.0),
scrollDirection: Axis.vertical,
childAspectRatio: 2.6,
physics: NeverScrollableScrollPhysics(),
shrinkWrap: true,
children:
List.generate(snapshot.data.body?.data?.length ?? 0, (index) {
return Card(
clipBehavior: Clip.antiAlias,
color: MeditoColors.deepNight,
child: SmallShortcutWidget(
snapshot.data.body.data[index], widget.onTap),
);
}),
);
break;
case Status.ERROR:
return Icon(Icons.error);
break;
}
return Container();
});
return SizeChangedLayoutNotifier(
child: StreamBuilder<ApiResponse<ShortcutsResponse>>(
stream: _bloc.shortcutList.stream,
initialData: ApiResponse.loading(),
builder: (context, snapshot) {
switch (snapshot.data.status) {
case Status.LOADING:
return _getLoadingWidget();
break;
case Status.COMPLETED:
return GridView.count(
crossAxisCount: 2,
padding:
const EdgeInsets.only(left: 12.0, right: 12.0, top: 8.0),
scrollDirection: Axis.vertical,
childAspectRatio: 2.6,
physics: NeverScrollableScrollPhysics(),
shrinkWrap: true,
children: List.generate(snapshot.data.body?.data?.length ?? 0,
(index) {
return Card(
clipBehavior: Clip.antiAlias,
color: MeditoColors.deepNight,
child: SmallShortcutWidget(
snapshot.data.body.data[index], widget.onTap),
);
}),
);
break;
case Status.ERROR:
return Icon(Icons.error);
break;
}
return Container();
}),
);
}
Widget _getLoadingWidget() => GridView.count(

View File

@ -18,15 +18,14 @@ class _StatsWidgetState extends State<StatsWidget> {
children: [
Padding(
padding: const EdgeInsets.only(left: 16.0, bottom: 8.0),
child: Text('Stats',
style: Theme.of(context).textTheme.headline3),
child: Text('Stats', style: Theme.of(context).textTheme.headline3),
),
SizedBox(
height: 73,
child: ListView.builder(
padding: const EdgeInsets.only(left: 8.0, right: 8.0),
itemBuilder: (context, i) => statsItem(context, i),
itemCount: 5,
itemCount: 4,
scrollDirection: Axis.horizontal,
shrinkWrap: true,
),

View File

@ -71,10 +71,9 @@ class _ExpandedSectionState extends State<ExpandedSection> with SingleTickerProv
@override
Widget build(BuildContext context) {
return SizeTransition(
axisAlignment: 1.0,
sizeFactor: animation,
child: widget.child
return SizeChangedLayoutNotifier(
child: SizeTransition(
axisAlignment: 1.0, sizeFactor: animation, child: widget.child),
);
}
}
}