From 65bda2b3ebd3f8cc5f86ad7d185ec74b15276f15 Mon Sep 17 00:00:00 2001 From: Alaa Elattar Date: Thu, 29 May 2025 11:27:28 +0300 Subject: [PATCH 1/3] sort nodes by status --- app/lib/screens/farm_details.dart | 110 +++++++++++++++++------------- 1 file changed, 63 insertions(+), 47 deletions(-) diff --git a/app/lib/screens/farm_details.dart b/app/lib/screens/farm_details.dart index 48612cb5..0f2feb4b 100644 --- a/app/lib/screens/farm_details.dart +++ b/app/lib/screens/farm_details.dart @@ -343,11 +343,13 @@ class _FarmDetailsState extends State { .text, wallets: widget.wallets .where((w) => - double.tryParse(w - .stellarBalances['TFT']!) != + double.tryParse( + w.stellarBalances[ + 'TFT']!) != null && - double.parse(w - .stellarBalances['TFT']!) >= + double.parse( + w.stellarBalances[ + 'TFT']!) >= 0) .toList(), onSelectToAddress: @@ -505,51 +507,65 @@ class _FarmDetailsState extends State { ), ], if (widget.farm.nodes.isNotEmpty) - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - const Divider(height: 20, thickness: 1), - Padding( - padding: const EdgeInsets.symmetric(vertical: 8.0), - child: Text( - 'Nodes (${widget.farm.nodes.length})', - style: Theme.of(context) - .textTheme - .titleMedium - ?.copyWith( - color: - Theme.of(context).colorScheme.onSurface, - ), + if (widget.farm.nodes.isNotEmpty) + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Divider(height: 20, thickness: 1), + Padding( + padding: const EdgeInsets.symmetric(vertical: 8.0), + child: Text( + 'Nodes (${widget.farm.nodes.length})', + style: Theme.of(context) + .textTheme + .titleMedium + ?.copyWith( + color: + Theme.of(context).colorScheme.onSurface, + ), + ), ), - ), - ListView.builder( - shrinkWrap: true, - physics: const NeverScrollableScrollPhysics(), - itemCount: widget.farm.nodes.length, - itemBuilder: (context, index) { - final node = widget.farm.nodes[index]; - return Card( - margin: const EdgeInsets.symmetric( - vertical: 4.0, horizontal: 0.0), - elevation: 1.0, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(5.0), - side: BorderSide( - color: Theme.of(context).dividerColor, - width: 1.0, + ListView.builder( + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + itemCount: widget.farm.nodes.length, + itemBuilder: (context, index) { + final sortedNodes = List.from(widget.farm.nodes) + ..sort((a, b) { + if (a.status == NodeStatus.Up && + b.status != NodeStatus.Up) { + return -1; + } else if (a.status != NodeStatus.Up && + b.status == NodeStatus.Up) { + return 1; + } else { + return 0; + } + }); + + final node = sortedNodes[index]; + return Card( + margin: const EdgeInsets.symmetric( + vertical: 4.0, horizontal: 0.0), + elevation: 1.0, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(5.0), + side: BorderSide( + color: Theme.of(context).dividerColor, + width: 1.0, + ), ), - ), - clipBehavior: Clip.antiAlias, - child: FarmNodeItemWidget( - node: node, - isV4: widget.isV4, - farmName: widget.farm.name, - ), - ); - }, - ), - ], - ), + clipBehavior: Clip.antiAlias, + child: FarmNodeItemWidget( + node: node, + isV4: widget.isV4, + farmName: widget.farm.name, + ), + ); + }, + ), + ], + ), ], ), ), From fe0e58b9a686dffc23fe13705fac2f828c7c13cc Mon Sep 17 00:00:00 2001 From: Alaa Elattar Date: Thu, 19 Jun 2025 13:43:53 +0300 Subject: [PATCH 2/3] move sorted nodes computations outside ListView.builder --- app/lib/screens/farm_details.dart | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/app/lib/screens/farm_details.dart b/app/lib/screens/farm_details.dart index 0f2feb4b..2c7003b3 100644 --- a/app/lib/screens/farm_details.dart +++ b/app/lib/screens/farm_details.dart @@ -251,6 +251,16 @@ class _FarmDetailsState extends State { @override Widget build(BuildContext context) { + final sortedNodes = List.from(widget.farm.nodes) + ..sort((a, b) { + if (a.status == NodeStatus.Up && b.status != NodeStatus.Up) { + return -1; + } else if (a.status != NodeStatus.Up && b.status == NodeStatus.Up) { + return 1; + } else { + return 0; + } + }); return Scaffold( appBar: AppBar( title: Text(widget.farm.name), @@ -528,21 +538,8 @@ class _FarmDetailsState extends State { ListView.builder( shrinkWrap: true, physics: const NeverScrollableScrollPhysics(), - itemCount: widget.farm.nodes.length, + itemCount: sortedNodes.length, itemBuilder: (context, index) { - final sortedNodes = List.from(widget.farm.nodes) - ..sort((a, b) { - if (a.status == NodeStatus.Up && - b.status != NodeStatus.Up) { - return -1; - } else if (a.status != NodeStatus.Up && - b.status == NodeStatus.Up) { - return 1; - } else { - return 0; - } - }); - final node = sortedNodes[index]; return Card( margin: const EdgeInsets.symmetric( From 58102437424b4c344be5364f00f7ef809ceaf9bf Mon Sep 17 00:00:00 2001 From: Alaa Elattar Date: Thu, 19 Jun 2025 13:58:28 +0300 Subject: [PATCH 3/3] fix conflict --- app/lib/screens/farm_details.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/lib/screens/farm_details.dart b/app/lib/screens/farm_details.dart index c41334d5..daa06ed8 100644 --- a/app/lib/screens/farm_details.dart +++ b/app/lib/screens/farm_details.dart @@ -536,9 +536,9 @@ class _FarmDetailsState extends State { ListView.builder( shrinkWrap: true, physics: const NeverScrollableScrollPhysics(), - itemCount: widget.farm.nodes.length, + itemCount: sortedNodes.length, itemBuilder: (context, index) { - final node = widget.farm.nodes[index]; + final node = sortedNodes[index]; return Card( margin: const EdgeInsets.symmetric( vertical: 4.0, horizontal: 0.0),