fix(mining-app): unify color scheme and fix scroll issues

- Update login/register pages to use orange color scheme (#FF6B00)
  matching the navigation pages design
- Fix SafeArea bottom: false on all navigation pages since MainShell
  handles bottom safe area via bottomNavigationBar
- Add AlwaysScrollableScrollPhysics to asset page for consistent scroll
- Increase bottom padding to 100px on all navigation pages to clear
  the navigation bar

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
hailin 2026-01-12 12:41:41 -08:00
parent c31d64550b
commit 94d8075970
6 changed files with 232 additions and 86 deletions

View File

@ -30,11 +30,13 @@ class AssetPage extends ConsumerWidget {
return Scaffold( return Scaffold(
backgroundColor: Colors.white, backgroundColor: Colors.white,
body: SafeArea( body: SafeArea(
bottom: false,
child: RefreshIndicator( child: RefreshIndicator(
onRefresh: () async { onRefresh: () async {
ref.invalidate(shareAccountProvider(accountSequence)); ref.invalidate(shareAccountProvider(accountSequence));
}, },
child: SingleChildScrollView( child: SingleChildScrollView(
physics: const AlwaysScrollableScrollPhysics(),
child: Column( child: Column(
children: [ children: [
// //

View File

@ -2,7 +2,6 @@ import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import '../../../core/router/routes.dart'; import '../../../core/router/routes.dart';
import '../../../core/constants/app_colors.dart';
import '../../providers/user_providers.dart'; import '../../providers/user_providers.dart';
class LoginPage extends ConsumerStatefulWidget { class LoginPage extends ConsumerStatefulWidget {
@ -13,6 +12,14 @@ class LoginPage extends ConsumerStatefulWidget {
} }
class _LoginPageState extends ConsumerState<LoginPage> { class _LoginPageState extends ConsumerState<LoginPage> {
// -
static const Color _orange = Color(0xFFFF6B00);
static const Color _darkText = Color(0xFF1F2937);
static const Color _grayText = Color(0xFF6B7280);
static const Color _lightGray = Color(0xFF9CA3AF);
static const Color _bgGray = Color(0xFFF3F4F6);
static const Color _borderGray = Color(0xFFE5E7EB);
final _formKey = GlobalKey<FormState>(); final _formKey = GlobalKey<FormState>();
final _phoneController = TextEditingController(); final _phoneController = TextEditingController();
final _passwordController = TextEditingController(); final _passwordController = TextEditingController();
@ -113,17 +120,19 @@ class _LoginPageState extends ConsumerState<LoginPage> {
const SizedBox(height: 60), const SizedBox(height: 60),
// Logo // Logo
Container( Center(
width: 80, child: Container(
height: 80, width: 80,
decoration: BoxDecoration( height: 80,
color: AppColors.primary.withOpacity(0.1), decoration: BoxDecoration(
borderRadius: BorderRadius.circular(20), color: _orange.withOpacity(0.1),
), borderRadius: BorderRadius.circular(20),
child: const Icon( ),
Icons.eco, child: const Icon(
size: 48, Icons.eco,
color: AppColors.primary, size: 48,
color: _orange,
),
), ),
), ),
@ -134,17 +143,18 @@ class _LoginPageState extends ConsumerState<LoginPage> {
style: TextStyle( style: TextStyle(
fontSize: 28, fontSize: 28,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
color: _darkText,
), ),
textAlign: TextAlign.center, textAlign: TextAlign.center,
), ),
const SizedBox(height: 8), const SizedBox(height: 8),
Text( const Text(
'登录您的榴莲挖矿账户', '登录您的榴莲生态账户',
style: TextStyle( style: TextStyle(
fontSize: 16, fontSize: 16,
color: Colors.grey[600], color: _grayText,
), ),
textAlign: TextAlign.center, textAlign: TextAlign.center,
), ),
@ -152,59 +162,66 @@ class _LoginPageState extends ConsumerState<LoginPage> {
const SizedBox(height: 48), const SizedBox(height: 48),
// //
Row( Container(
children: [ decoration: const BoxDecoration(
Expanded( border: Border(
child: GestureDetector( bottom: BorderSide(color: _borderGray, width: 1),
onTap: () => setState(() => _isPasswordLogin = true), ),
child: Container( ),
padding: const EdgeInsets.symmetric(vertical: 12), child: Row(
decoration: BoxDecoration( children: [
border: Border( Expanded(
bottom: BorderSide( child: GestureDetector(
color: _isPasswordLogin ? AppColors.primary : Colors.transparent, onTap: () => setState(() => _isPasswordLogin = true),
width: 2, child: Container(
padding: const EdgeInsets.symmetric(vertical: 12),
decoration: BoxDecoration(
border: Border(
bottom: BorderSide(
color: _isPasswordLogin ? _orange : Colors.transparent,
width: 2,
),
), ),
), ),
), child: Text(
child: Text( '密码登录',
'密码登录', textAlign: TextAlign.center,
textAlign: TextAlign.center, style: TextStyle(
style: TextStyle( fontSize: 16,
fontSize: 16, fontWeight: _isPasswordLogin ? FontWeight.bold : FontWeight.normal,
fontWeight: _isPasswordLogin ? FontWeight.bold : FontWeight.normal, color: _isPasswordLogin ? _orange : _lightGray,
color: _isPasswordLogin ? AppColors.primary : Colors.grey, ),
), ),
), ),
), ),
), ),
), Expanded(
Expanded( child: GestureDetector(
child: GestureDetector( onTap: () => setState(() => _isPasswordLogin = false),
onTap: () => setState(() => _isPasswordLogin = false), child: Container(
child: Container( padding: const EdgeInsets.symmetric(vertical: 12),
padding: const EdgeInsets.symmetric(vertical: 12), decoration: BoxDecoration(
decoration: BoxDecoration( border: Border(
border: Border( bottom: BorderSide(
bottom: BorderSide( color: !_isPasswordLogin ? _orange : Colors.transparent,
color: !_isPasswordLogin ? AppColors.primary : Colors.transparent, width: 2,
width: 2, ),
), ),
), ),
), child: Text(
child: Text( '验证码登录',
'验证码登录', textAlign: TextAlign.center,
textAlign: TextAlign.center, style: TextStyle(
style: TextStyle( fontSize: 16,
fontSize: 16, fontWeight: !_isPasswordLogin ? FontWeight.bold : FontWeight.normal,
fontWeight: !_isPasswordLogin ? FontWeight.bold : FontWeight.normal, color: !_isPasswordLogin ? _orange : _lightGray,
color: !_isPasswordLogin ? AppColors.primary : Colors.grey, ),
), ),
), ),
), ),
), ),
), ],
], ),
), ),
const SizedBox(height: 24), const SizedBox(height: 24),
@ -213,12 +230,25 @@ class _LoginPageState extends ConsumerState<LoginPage> {
TextFormField( TextFormField(
controller: _phoneController, controller: _phoneController,
keyboardType: TextInputType.phone, keyboardType: TextInputType.phone,
style: const TextStyle(color: _darkText),
decoration: InputDecoration( decoration: InputDecoration(
labelText: '手机号', labelText: '手机号',
prefixIcon: const Icon(Icons.phone), labelStyle: const TextStyle(color: _grayText),
prefixIcon: const Icon(Icons.phone_outlined, color: _grayText),
border: OutlineInputBorder( border: OutlineInputBorder(
borderRadius: BorderRadius.circular(12), borderRadius: BorderRadius.circular(12),
borderSide: const BorderSide(color: _borderGray),
), ),
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(12),
borderSide: const BorderSide(color: _borderGray),
),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(12),
borderSide: const BorderSide(color: _orange, width: 2),
),
filled: true,
fillColor: Colors.white,
), ),
validator: (value) { validator: (value) {
if (value == null || value.isEmpty) { if (value == null || value.isEmpty) {
@ -238,18 +268,32 @@ class _LoginPageState extends ConsumerState<LoginPage> {
TextFormField( TextFormField(
controller: _passwordController, controller: _passwordController,
obscureText: _obscurePassword, obscureText: _obscurePassword,
style: const TextStyle(color: _darkText),
decoration: InputDecoration( decoration: InputDecoration(
labelText: '密码', labelText: '密码',
prefixIcon: const Icon(Icons.lock), labelStyle: const TextStyle(color: _grayText),
prefixIcon: const Icon(Icons.lock_outline, color: _grayText),
suffixIcon: IconButton( suffixIcon: IconButton(
icon: Icon( icon: Icon(
_obscurePassword ? Icons.visibility_off : Icons.visibility, _obscurePassword ? Icons.visibility_off_outlined : Icons.visibility_outlined,
color: _grayText,
), ),
onPressed: () => setState(() => _obscurePassword = !_obscurePassword), onPressed: () => setState(() => _obscurePassword = !_obscurePassword),
), ),
border: OutlineInputBorder( border: OutlineInputBorder(
borderRadius: BorderRadius.circular(12), borderRadius: BorderRadius.circular(12),
borderSide: const BorderSide(color: _borderGray),
), ),
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(12),
borderSide: const BorderSide(color: _borderGray),
),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(12),
borderSide: const BorderSide(color: _orange, width: 2),
),
filled: true,
fillColor: Colors.white,
), ),
validator: (value) { validator: (value) {
if (value == null || value.isEmpty) { if (value == null || value.isEmpty) {
@ -266,13 +310,26 @@ class _LoginPageState extends ConsumerState<LoginPage> {
controller: _smsCodeController, controller: _smsCodeController,
keyboardType: TextInputType.number, keyboardType: TextInputType.number,
maxLength: 6, maxLength: 6,
style: const TextStyle(color: _darkText),
decoration: InputDecoration( decoration: InputDecoration(
labelText: '验证码', labelText: '验证码',
prefixIcon: const Icon(Icons.sms), labelStyle: const TextStyle(color: _grayText),
prefixIcon: const Icon(Icons.sms_outlined, color: _grayText),
counterText: '', counterText: '',
border: OutlineInputBorder( border: OutlineInputBorder(
borderRadius: BorderRadius.circular(12), borderRadius: BorderRadius.circular(12),
borderSide: const BorderSide(color: _borderGray),
), ),
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(12),
borderSide: const BorderSide(color: _borderGray),
),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(12),
borderSide: const BorderSide(color: _orange, width: 2),
),
filled: true,
fillColor: Colors.white,
), ),
validator: (value) { validator: (value) {
if (value == null || value.isEmpty) { if (value == null || value.isEmpty) {
@ -292,13 +349,16 @@ class _LoginPageState extends ConsumerState<LoginPage> {
child: ElevatedButton( child: ElevatedButton(
onPressed: _countDown > 0 ? null : _sendSmsCode, onPressed: _countDown > 0 ? null : _sendSmsCode,
style: ElevatedButton.styleFrom( style: ElevatedButton.styleFrom(
backgroundColor: _countDown > 0 ? _bgGray : _orange.withOpacity(0.1),
foregroundColor: _countDown > 0 ? _lightGray : _orange,
elevation: 0,
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12), borderRadius: BorderRadius.circular(12),
), ),
), ),
child: Text( child: Text(
_countDown > 0 ? '${_countDown}s' : '获取验证码', _countDown > 0 ? '${_countDown}s' : '获取验证码',
style: const TextStyle(fontSize: 14), style: const TextStyle(fontSize: 14, fontWeight: FontWeight.w500),
), ),
), ),
), ),
@ -313,7 +373,9 @@ class _LoginPageState extends ConsumerState<LoginPage> {
child: ElevatedButton( child: ElevatedButton(
onPressed: userState.isLoading ? null : _login, onPressed: userState.isLoading ? null : _login,
style: ElevatedButton.styleFrom( style: ElevatedButton.styleFrom(
backgroundColor: AppColors.primary, backgroundColor: _orange,
disabledBackgroundColor: _orange.withOpacity(0.5),
elevation: 0,
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12), borderRadius: BorderRadius.circular(12),
), ),
@ -346,9 +408,9 @@ class _LoginPageState extends ConsumerState<LoginPage> {
alignment: Alignment.centerRight, alignment: Alignment.centerRight,
child: TextButton( child: TextButton(
onPressed: () => context.push(Routes.forgotPassword), onPressed: () => context.push(Routes.forgotPassword),
child: Text( child: const Text(
'忘记密码?', '忘记密码?',
style: TextStyle(color: Colors.grey[600]), style: TextStyle(color: _grayText),
), ),
), ),
), ),
@ -359,13 +421,19 @@ class _LoginPageState extends ConsumerState<LoginPage> {
Row( Row(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
Text( const Text(
'还没有账号?', '还没有账号?',
style: TextStyle(color: Colors.grey[600]), style: TextStyle(color: _grayText),
), ),
TextButton( TextButton(
onPressed: () => context.push(Routes.register), onPressed: () => context.push(Routes.register),
child: const Text('立即注册'), child: const Text(
'立即注册',
style: TextStyle(
color: _orange,
fontWeight: FontWeight.w600,
),
),
), ),
], ],
), ),

View File

@ -2,7 +2,6 @@ import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import '../../../core/router/routes.dart'; import '../../../core/router/routes.dart';
import '../../../core/constants/app_colors.dart';
import '../../providers/user_providers.dart'; import '../../providers/user_providers.dart';
class RegisterPage extends ConsumerStatefulWidget { class RegisterPage extends ConsumerStatefulWidget {
@ -13,6 +12,14 @@ class RegisterPage extends ConsumerStatefulWidget {
} }
class _RegisterPageState extends ConsumerState<RegisterPage> { class _RegisterPageState extends ConsumerState<RegisterPage> {
// -
static const Color _orange = Color(0xFFFF6B00);
static const Color _darkText = Color(0xFF1F2937);
static const Color _grayText = Color(0xFF6B7280);
static const Color _lightGray = Color(0xFF9CA3AF);
static const Color _bgGray = Color(0xFFF3F4F6);
static const Color _borderGray = Color(0xFFE5E7EB);
final _formKey = GlobalKey<FormState>(); final _formKey = GlobalKey<FormState>();
final _phoneController = TextEditingController(); final _phoneController = TextEditingController();
final _passwordController = TextEditingController(); final _passwordController = TextEditingController();
@ -100,7 +107,7 @@ class _RegisterPageState extends ConsumerState<RegisterPage> {
backgroundColor: Colors.transparent, backgroundColor: Colors.transparent,
elevation: 0, elevation: 0,
leading: IconButton( leading: IconButton(
icon: const Icon(Icons.arrow_back, color: Colors.black), icon: const Icon(Icons.arrow_back_ios, color: _darkText),
onPressed: () => context.pop(), onPressed: () => context.pop(),
), ),
), ),
@ -117,16 +124,17 @@ class _RegisterPageState extends ConsumerState<RegisterPage> {
style: TextStyle( style: TextStyle(
fontSize: 28, fontSize: 28,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
color: _darkText,
), ),
), ),
const SizedBox(height: 8), const SizedBox(height: 8),
Text( const Text(
'加入榴莲挖矿,开启绿色财富之旅', '加入榴莲生态,开启绿色财富之旅',
style: TextStyle( style: TextStyle(
fontSize: 16, fontSize: 16,
color: Colors.grey[600], color: _grayText,
), ),
), ),
@ -136,12 +144,25 @@ class _RegisterPageState extends ConsumerState<RegisterPage> {
TextFormField( TextFormField(
controller: _phoneController, controller: _phoneController,
keyboardType: TextInputType.phone, keyboardType: TextInputType.phone,
style: const TextStyle(color: _darkText),
decoration: InputDecoration( decoration: InputDecoration(
labelText: '手机号', labelText: '手机号',
prefixIcon: const Icon(Icons.phone), labelStyle: const TextStyle(color: _grayText),
prefixIcon: const Icon(Icons.phone_outlined, color: _grayText),
border: OutlineInputBorder( border: OutlineInputBorder(
borderRadius: BorderRadius.circular(12), borderRadius: BorderRadius.circular(12),
borderSide: const BorderSide(color: _borderGray),
), ),
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(12),
borderSide: const BorderSide(color: _borderGray),
),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(12),
borderSide: const BorderSide(color: _orange, width: 2),
),
filled: true,
fillColor: Colors.white,
), ),
validator: (value) { validator: (value) {
if (value == null || value.isEmpty) { if (value == null || value.isEmpty) {
@ -164,13 +185,26 @@ class _RegisterPageState extends ConsumerState<RegisterPage> {
controller: _smsCodeController, controller: _smsCodeController,
keyboardType: TextInputType.number, keyboardType: TextInputType.number,
maxLength: 6, maxLength: 6,
style: const TextStyle(color: _darkText),
decoration: InputDecoration( decoration: InputDecoration(
labelText: '验证码', labelText: '验证码',
prefixIcon: const Icon(Icons.sms), labelStyle: const TextStyle(color: _grayText),
prefixIcon: const Icon(Icons.sms_outlined, color: _grayText),
counterText: '', counterText: '',
border: OutlineInputBorder( border: OutlineInputBorder(
borderRadius: BorderRadius.circular(12), borderRadius: BorderRadius.circular(12),
borderSide: const BorderSide(color: _borderGray),
), ),
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(12),
borderSide: const BorderSide(color: _borderGray),
),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(12),
borderSide: const BorderSide(color: _orange, width: 2),
),
filled: true,
fillColor: Colors.white,
), ),
validator: (value) { validator: (value) {
if (value == null || value.isEmpty) { if (value == null || value.isEmpty) {
@ -190,13 +224,16 @@ class _RegisterPageState extends ConsumerState<RegisterPage> {
child: ElevatedButton( child: ElevatedButton(
onPressed: _countDown > 0 ? null : _sendSmsCode, onPressed: _countDown > 0 ? null : _sendSmsCode,
style: ElevatedButton.styleFrom( style: ElevatedButton.styleFrom(
backgroundColor: _countDown > 0 ? _bgGray : _orange.withOpacity(0.1),
foregroundColor: _countDown > 0 ? _lightGray : _orange,
elevation: 0,
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12), borderRadius: BorderRadius.circular(12),
), ),
), ),
child: Text( child: Text(
_countDown > 0 ? '${_countDown}s' : '获取验证码', _countDown > 0 ? '${_countDown}s' : '获取验证码',
style: const TextStyle(fontSize: 14), style: const TextStyle(fontSize: 14, fontWeight: FontWeight.w500),
), ),
), ),
), ),
@ -209,18 +246,32 @@ class _RegisterPageState extends ConsumerState<RegisterPage> {
TextFormField( TextFormField(
controller: _passwordController, controller: _passwordController,
obscureText: _obscurePassword, obscureText: _obscurePassword,
style: const TextStyle(color: _darkText),
decoration: InputDecoration( decoration: InputDecoration(
labelText: '密码', labelText: '密码',
prefixIcon: const Icon(Icons.lock), labelStyle: const TextStyle(color: _grayText),
prefixIcon: const Icon(Icons.lock_outline, color: _grayText),
suffixIcon: IconButton( suffixIcon: IconButton(
icon: Icon( icon: Icon(
_obscurePassword ? Icons.visibility_off : Icons.visibility, _obscurePassword ? Icons.visibility_off_outlined : Icons.visibility_outlined,
color: _grayText,
), ),
onPressed: () => setState(() => _obscurePassword = !_obscurePassword), onPressed: () => setState(() => _obscurePassword = !_obscurePassword),
), ),
border: OutlineInputBorder( border: OutlineInputBorder(
borderRadius: BorderRadius.circular(12), borderRadius: BorderRadius.circular(12),
borderSide: const BorderSide(color: _borderGray),
), ),
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(12),
borderSide: const BorderSide(color: _borderGray),
),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(12),
borderSide: const BorderSide(color: _orange, width: 2),
),
filled: true,
fillColor: Colors.white,
), ),
validator: (value) { validator: (value) {
if (value == null || value.isEmpty) { if (value == null || value.isEmpty) {
@ -239,18 +290,32 @@ class _RegisterPageState extends ConsumerState<RegisterPage> {
TextFormField( TextFormField(
controller: _confirmPasswordController, controller: _confirmPasswordController,
obscureText: _obscureConfirmPassword, obscureText: _obscureConfirmPassword,
style: const TextStyle(color: _darkText),
decoration: InputDecoration( decoration: InputDecoration(
labelText: '确认密码', labelText: '确认密码',
prefixIcon: const Icon(Icons.lock_outline), labelStyle: const TextStyle(color: _grayText),
prefixIcon: const Icon(Icons.lock_outline, color: _grayText),
suffixIcon: IconButton( suffixIcon: IconButton(
icon: Icon( icon: Icon(
_obscureConfirmPassword ? Icons.visibility_off : Icons.visibility, _obscureConfirmPassword ? Icons.visibility_off_outlined : Icons.visibility_outlined,
color: _grayText,
), ),
onPressed: () => setState(() => _obscureConfirmPassword = !_obscureConfirmPassword), onPressed: () => setState(() => _obscureConfirmPassword = !_obscureConfirmPassword),
), ),
border: OutlineInputBorder( border: OutlineInputBorder(
borderRadius: BorderRadius.circular(12), borderRadius: BorderRadius.circular(12),
borderSide: const BorderSide(color: _borderGray),
), ),
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(12),
borderSide: const BorderSide(color: _borderGray),
),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(12),
borderSide: const BorderSide(color: _orange, width: 2),
),
filled: true,
fillColor: Colors.white,
), ),
validator: (value) { validator: (value) {
if (value == null || value.isEmpty) { if (value == null || value.isEmpty) {
@ -271,7 +336,9 @@ class _RegisterPageState extends ConsumerState<RegisterPage> {
child: ElevatedButton( child: ElevatedButton(
onPressed: userState.isLoading ? null : _register, onPressed: userState.isLoading ? null : _register,
style: ElevatedButton.styleFrom( style: ElevatedButton.styleFrom(
backgroundColor: AppColors.primary, backgroundColor: _orange,
disabledBackgroundColor: _orange.withOpacity(0.5),
elevation: 0,
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12), borderRadius: BorderRadius.circular(12),
), ),
@ -302,13 +369,19 @@ class _RegisterPageState extends ConsumerState<RegisterPage> {
Row( Row(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
Text( const Text(
'已有账号?', '已有账号?',
style: TextStyle(color: Colors.grey[600]), style: TextStyle(color: _grayText),
), ),
TextButton( TextButton(
onPressed: () => context.pop(), onPressed: () => context.pop(),
child: const Text('立即登录'), child: const Text(
'立即登录',
style: TextStyle(
color: _orange,
fontWeight: FontWeight.w600,
),
),
), ),
], ],
), ),

View File

@ -34,6 +34,7 @@ class ContributionPage extends ConsumerWidget {
return Scaffold( return Scaffold(
backgroundColor: const Color(0xFFF5F5F5), backgroundColor: const Color(0xFFF5F5F5),
body: SafeArea( body: SafeArea(
bottom: false,
child: RefreshIndicator( child: RefreshIndicator(
onRefresh: () async { onRefresh: () async {
ref.invalidate(contributionProvider(accountSequence)); ref.invalidate(contributionProvider(accountSequence));
@ -67,7 +68,7 @@ class ContributionPage extends ConsumerWidget {
const SizedBox(height: 16), const SizedBox(height: 16),
// //
_buildExpirationCard(contribution, recordsAsync), _buildExpirationCard(contribution, recordsAsync),
const SizedBox(height: 24), const SizedBox(height: 100),
]), ]),
), ),
), ),

View File

@ -24,6 +24,7 @@ class ProfilePage extends ConsumerWidget {
return Scaffold( return Scaffold(
backgroundColor: _bgGray, backgroundColor: _bgGray,
body: SafeArea( body: SafeArea(
bottom: false,
child: SingleChildScrollView( child: SingleChildScrollView(
child: Column( child: Column(
children: [ children: [
@ -76,7 +77,7 @@ class ProfilePage extends ConsumerWidget {
), ),
), ),
const SizedBox(height: 32), const SizedBox(height: 100),
], ],
), ),
), ),

View File

@ -46,6 +46,7 @@ class _TradingPageState extends ConsumerState<TradingPage> {
return Scaffold( return Scaffold(
backgroundColor: const Color(0xFFF5F5F5), backgroundColor: const Color(0xFFF5F5F5),
body: SafeArea( body: SafeArea(
bottom: false,
child: Column( child: Column(
children: [ children: [
// //
@ -73,7 +74,7 @@ class _TradingPageState extends ConsumerState<TradingPage> {
_buildTradingPanel(accountSequence), _buildTradingPanel(accountSequence),
// //
_buildMyOrdersCard(), _buildMyOrdersCard(),
const SizedBox(height: 24), const SizedBox(height: 100),
], ],
), ),
), ),