From 5ab9377f82ffe766883da8ccde3e17c24b7868eb Mon Sep 17 00:00:00 2001 From: poka Date: Wed, 15 Mar 2023 22:57:30 +0100 Subject: [PATCH] fix: use different pageInfo on activityscreen when pop multiple accounts --- lib/screens/activity.dart | 45 ++++++++----- lib/widgets/history_query.dart | 103 ++---------------------------- lib/widgets/history_view.dart | 112 +++++++++++++++++++++++++++++++++ 3 files changed, 148 insertions(+), 112 deletions(-) create mode 100644 lib/widgets/history_view.dart diff --git a/lib/screens/activity.dart b/lib/screens/activity.dart index 7e768ef..47cd84b 100644 --- a/lib/screens/activity.dart +++ b/lib/screens/activity.dart @@ -1,13 +1,14 @@ // ignore_for_file: must_be_immutable import 'package:easy_localization/easy_localization.dart'; - import 'package:gecko/globals.dart'; import 'package:gecko/models/widgets_keys.dart'; import 'package:flutter/material.dart'; +import 'package:gecko/providers/duniter_indexer.dart'; import 'package:gecko/widgets/bottom_app_bar.dart'; import 'package:gecko/widgets/header_profile.dart'; import 'package:gecko/widgets/history_query.dart'; +import 'package:provider/provider.dart'; class ActivityScreen extends StatelessWidget with ChangeNotifier { ActivityScreen({required this.address, required this.avatar, this.username}) @@ -18,19 +19,35 @@ class ActivityScreen extends StatelessWidget with ChangeNotifier { @override Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - elevation: 0, - toolbarHeight: 60 * ratio, - title: SizedBox( - height: 22, - child: Text('accountActivity'.tr()), + final duniterIndexer = Provider.of(context, listen: true); + + return WillPopScope( + onWillPop: () { + duniterIndexer.fetchMoreCursor = + duniterIndexer.pageInfo = duniterIndexer.transBC = null; + return Future.value(true); + }, + child: Scaffold( + appBar: AppBar( + elevation: 0, + toolbarHeight: 60 * ratio, + leading: IconButton( + icon: const Icon(Icons.arrow_back, color: Colors.black), + onPressed: () { + duniterIndexer.fetchMoreCursor = + duniterIndexer.pageInfo = duniterIndexer.transBC = null; + Navigator.of(context).pop(); + }), + title: SizedBox( + height: 22, + child: Text('accountActivity'.tr()), + ), ), - ), - bottomNavigationBar: const GeckoBottomAppBar(), - body: Column(children: [ - HeaderProfile(address: address, username: username), - HistoryQuery(address: address), - ])); + bottomNavigationBar: const GeckoBottomAppBar(), + body: Column(children: [ + HeaderProfile(address: address, username: username), + HistoryQuery(address: address), + ])), + ); } } diff --git a/lib/widgets/history_query.dart b/lib/widgets/history_query.dart index ef7728a..c1f19e8 100644 --- a/lib/widgets/history_query.dart +++ b/lib/widgets/history_query.dart @@ -4,7 +4,7 @@ import 'package:gecko/globals.dart'; import 'package:gecko/models/queries_indexer.dart'; import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/providers/duniter_indexer.dart'; -import 'package:gecko/widgets/transaction_tile.dart'; +import 'package:gecko/widgets/history_view.dart'; import 'package:graphql_flutter/graphql_flutter.dart'; import 'package:provider/provider.dart'; @@ -116,11 +116,14 @@ class HistoryQuery extends StatelessWidget { child: ListView( key: keyListTransactions, controller: scrollController, - children: [historyView(context, result)], + children: [HistoryView(result: result)], ), ), ), onNotification: (dynamic t) { + if (duniterIndexer.pageInfo == null) { + duniterIndexer.reload(); + } if (t is ScrollEndNotification && scrollController.position.pixels >= scrollController.position.maxScrollExtent * 0.7 && @@ -136,100 +139,4 @@ class HistoryQuery extends StatelessWidget { )), ); } - - Widget historyView(context, result) { - final duniterIndexer = Provider.of(context, listen: false); - int keyID = 0; - const double avatarSize = 200; - bool isMigrationPassed = false; - List pastDelimiters = []; - - return duniterIndexer.transBC == null - ? Column(children: [ - const SizedBox(height: 50), - Text( - "noTransactionToDisplay".tr(), - style: const TextStyle(fontSize: 18), - ) - ]) - : Column(children: [ - Column( - children: duniterIndexer.transBC!.map((repository) { - final answer = computeHistoryView(repository); - pastDelimiters.add(answer['dateDelimiter']); - - bool isMigrationTime = false; - if (answer['isMigrationTime'] && !isMigrationPassed) { - isMigrationPassed = true; - isMigrationTime = true; - } - - return Column(children: [ - if (isMigrationTime) - Padding( - padding: const EdgeInsets.symmetric(vertical: 30), - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - const Image( - image: AssetImage('assets/party.png'), height: 40), - const SizedBox(width: 40), - Text( - 'blockchainStart'.tr(), - style: const TextStyle( - fontSize: 25, - color: Colors.blueAccent, - fontWeight: FontWeight.w500), - ), - const SizedBox(width: 40), - const Image( - image: AssetImage('assets/party.png'), height: 40), - ], - ), - ), - // if ((countsDelimiter[answer['dateDelimiter']] ?? 0) >= 1) - - if (pastDelimiters.length == 1 || - pastDelimiters.length >= 2 && - !(pastDelimiters[pastDelimiters.length - 2] == - answer['dateDelimiter'])) - Padding( - padding: const EdgeInsets.symmetric(vertical: 30), - child: Text( - answer['dateDelimiter'], - style: const TextStyle( - fontSize: 23, - color: orangeC, - fontWeight: FontWeight.w300), - ), - ), - TransactionTile( - keyID: keyID, - avatarSize: avatarSize, - repository: repository, - dateForm: answer['dateForm'], - finalAmount: answer['finalAmount'], - duniterIndexer: duniterIndexer, - context: context), - ]); - }).toList()), - if (result.isLoading && duniterIndexer.pageInfo!['hasPreviousPage']) - Row( - mainAxisAlignment: MainAxisAlignment.center, - children: const [ - CircularProgressIndicator(), - ], - ), - if (!duniterIndexer.pageInfo!['hasNextPage']) - Column( - children: [ - const SizedBox(height: 15), - Text("historyStart".tr(), - textAlign: TextAlign.center, - style: const TextStyle(fontSize: 20)), - const SizedBox(height: 15) - ], - ) - ]); - } } diff --git a/lib/widgets/history_view.dart b/lib/widgets/history_view.dart new file mode 100644 index 0000000..65ac235 --- /dev/null +++ b/lib/widgets/history_view.dart @@ -0,0 +1,112 @@ +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:gecko/globals.dart'; +import 'package:gecko/providers/duniter_indexer.dart'; +import 'package:gecko/widgets/transaction_tile.dart'; +import 'package:graphql_flutter/graphql_flutter.dart'; +import 'package:provider/provider.dart'; + +class HistoryView extends StatelessWidget { + const HistoryView({ + Key? key, + required this.result, + }) : super(key: key); + final QueryResult result; + + @override + Widget build(BuildContext context) { + final duniterIndexer = Provider.of(context, listen: false); + int keyID = 0; + const double avatarSize = 200; + bool isMigrationPassed = false; + List pastDelimiters = []; + + return duniterIndexer.transBC == null + ? Column(children: [ + const SizedBox(height: 50), + Text( + "noTransactionToDisplay".tr(), + style: const TextStyle(fontSize: 18), + ) + ]) + : Column(children: [ + Column( + children: duniterIndexer.transBC!.map((repository) { + final answer = computeHistoryView(repository); + pastDelimiters.add(answer['dateDelimiter']); + + bool isMigrationTime = false; + if (answer['isMigrationTime'] && !isMigrationPassed) { + isMigrationPassed = true; + isMigrationTime = true; + } + + return Column(children: [ + if (isMigrationTime) + Padding( + padding: const EdgeInsets.symmetric(vertical: 30), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const Image( + image: AssetImage('assets/party.png'), height: 40), + const SizedBox(width: 40), + Text( + 'blockchainStart'.tr(), + style: const TextStyle( + fontSize: 25, + color: Colors.blueAccent, + fontWeight: FontWeight.w500), + ), + const SizedBox(width: 40), + const Image( + image: AssetImage('assets/party.png'), height: 40), + ], + ), + ), + // if ((countsDelimiter[answer['dateDelimiter']] ?? 0) >= 1) + + if (pastDelimiters.length == 1 || + pastDelimiters.length >= 2 && + !(pastDelimiters[pastDelimiters.length - 2] == + answer['dateDelimiter'])) + Padding( + padding: const EdgeInsets.symmetric(vertical: 30), + child: Text( + answer['dateDelimiter'], + style: const TextStyle( + fontSize: 23, + color: orangeC, + fontWeight: FontWeight.w300), + ), + ), + TransactionTile( + keyID: keyID, + avatarSize: avatarSize, + repository: repository, + dateForm: answer['dateForm'], + finalAmount: answer['finalAmount'], + duniterIndexer: duniterIndexer, + context: context), + ]); + }).toList()), + if (result.isLoading && duniterIndexer.pageInfo!['hasPreviousPage']) + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: const [ + CircularProgressIndicator(), + ], + ), + if (!duniterIndexer.pageInfo!['hasNextPage']) + Column( + children: [ + const SizedBox(height: 15), + Text("historyStart".tr(), + textAlign: TextAlign.center, + style: const TextStyle(fontSize: 20)), + const SizedBox(height: 15) + ], + ) + ]); + } +} \ No newline at end of file