PurchaseScreen: Fix scrolling

Putting a column inside a SingleChildScrollView is way way too complex.
There are lots of different solutions, and not all seem to work for me.

Also adjust the loading screen.
This commit is contained in:
Vishesh Handa
2020-07-09 12:50:24 +02:00
parent 4109563293
commit 51d79fdbf2
2 changed files with 19 additions and 79 deletions

View File

@ -1,6 +1,5 @@
import 'dart:async'; import 'dart:async';
import 'dart:io'; import 'dart:io';
import 'dart:math';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -48,6 +47,7 @@ class PurchaseScreen extends StatelessWidget {
var body = Column( var body = Column(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: <Widget>[ children: <Widget>[
Text( Text(
'Support GitJournal by going Pro and additionally get -', 'Support GitJournal by going Pro and additionally get -',
@ -77,10 +77,13 @@ class PurchaseScreen extends StatelessWidget {
style: titleStyle, style: titleStyle,
textAlign: TextAlign.center, textAlign: TextAlign.center,
), ),
const SizedBox(height: 32.0),
body, body,
const SizedBox(height: 32.0),
PurchaseWidget(), PurchaseWidget(),
], ],
mainAxisAlignment: MainAxisAlignment.spaceAround, mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
); );
if (Platform.isIOS) { if (Platform.isIOS) {
@ -99,10 +102,17 @@ class PurchaseScreen extends StatelessWidget {
); );
} }
return _SingleChildScrollViewExpanded( w = Padding(padding: const EdgeInsets.all(16.0), child: w);
child: SafeArea(child: w),
padding: const EdgeInsets.all(16.0), return SafeArea(
); child: CustomScrollView(
slivers: [
SliverFillRemaining(
hasScrollBody: false,
child: w,
),
],
));
} }
Future<bool> _onWillPop() async { Future<bool> _onWillPop() async {
@ -122,26 +132,3 @@ class EmptyAppBar extends StatelessWidget implements PreferredSizeWidget {
@override @override
Size get preferredSize => const Size(0.0, 0.0); Size get preferredSize => const Size(0.0, 0.0);
} }
class _SingleChildScrollViewExpanded extends StatelessWidget {
final Widget child;
final EdgeInsetsGeometry padding;
_SingleChildScrollViewExpanded({this.child, this.padding});
@override
Widget build(BuildContext context) {
return LayoutBuilder(
builder: (BuildContext context, BoxConstraints constraints) {
return SingleChildScrollView(
child: ConstrainedBox(
constraints: BoxConstraints.tightFor(
height: max(100, constraints.maxHeight)),
child: child,
),
padding: padding,
);
},
);
}
}

View File

@ -77,55 +77,6 @@ class PurchaseButton extends StatelessWidget {
} }
} }
class LoadingWidget extends StatelessWidget {
const LoadingWidget({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
var theme = Theme.of(context);
var children = <Widget>[
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
"Loading",
textAlign: TextAlign.center,
style: Theme.of(context).textTheme.headline4,
),
),
const SizedBox(height: 8.0),
const Padding(
padding: EdgeInsets.all(8.0),
child: CircularProgressIndicator(
value: null,
),
),
];
var w = Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: children,
);
return WillPopScope(
onWillPop: _onWillPopLoading,
child: Container(
child: w,
color: theme.scaffoldBackgroundColor,
padding: const EdgeInsets.all(16.0),
constraints: const BoxConstraints.expand(),
),
);
}
Future<bool> _onWillPopLoading() async {
getAnalytics().logEvent(
name: "purchase_screen_close_loading",
);
return true;
}
}
class PurchaseWidget extends StatefulWidget { class PurchaseWidget extends StatefulWidget {
@override @override
_PurchaseWidgetState createState() => _PurchaseWidgetState(); _PurchaseWidgetState createState() => _PurchaseWidgetState();
@ -207,7 +158,9 @@ class _PurchaseWidgetState extends State<PurchaseWidget> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return _offerings == null ? const LoadingWidget() : buildBody(context); return _offerings == null
? const CircularProgressIndicator()
: buildBody(context);
} }
Widget buildBody(BuildContext context) { Widget buildBody(BuildContext context) {