Jonatas

fix GetWidget

1 import 'package:flutter/foundation.dart'; 1 import 'package:flutter/foundation.dart';
2 import 'package:flutter/material.dart'; 2 import 'package:flutter/material.dart';
3 import 'package:flutter/scheduler.dart'; 3 import 'package:flutter/scheduler.dart';
  4 +
4 import '../../../instance_manager.dart'; 5 import '../../../instance_manager.dart';
5 import '../../get_state_manager.dart'; 6 import '../../get_state_manager.dart';
6 import '../simple/list_notifier.dart'; 7 import '../simple/list_notifier.dart';
@@ -123,10 +124,11 @@ abstract class GetNotifier<T> extends Value<T> with GetLifeCycleBase { @@ -123,10 +124,11 @@ abstract class GetNotifier<T> extends Value<T> with GetLifeCycleBase {
123 124
124 extension StateExt<T> on StateMixin<T> { 125 extension StateExt<T> on StateMixin<T> {
125 Widget obx( 126 Widget obx(
126 - NotifierBuilder<T> widget, {  
127 - Widget Function(String error) onError,  
128 - Widget onLoading,  
129 - }) { 127 + NotifierBuilder<T> widget, {
  128 + Widget Function(String error) onError,
  129 + Widget onLoading,
  130 + Widget onEmpty,
  131 + }) {
130 assert(widget != null); 132 assert(widget != null);
131 return SimpleBuilder(builder: (_) { 133 return SimpleBuilder(builder: (_) {
132 if (status.isLoading) { 134 if (status.isLoading) {
@@ -134,10 +136,13 @@ extension StateExt<T> on StateMixin<T> { @@ -134,10 +136,13 @@ extension StateExt<T> on StateMixin<T> {
134 } else if (status.isError) { 136 } else if (status.isError) {
135 return onError != null 137 return onError != null
136 ? onError(status.errorMessage) 138 ? onError(status.errorMessage)
137 - : Center(child: Text('A error occured: ${status.errorMessage}'));  
138 - } else {  
139 - return widget(value); 139 + : Center(child: Text('A error occurred: ${status.errorMessage}'));
  140 + } else if (status.isEmpty) {
  141 + return onEmpty != null
  142 + ? onEmpty
  143 + : SizedBox.shrink(); // Also can be widget(null); but is risky
140 } 144 }
  145 + return widget(value);
141 }); 146 });
142 } 147 }
143 } 148 }
@@ -146,8 +151,11 @@ class RxStatus { @@ -146,8 +151,11 @@ class RxStatus {
146 final bool isLoading; 151 final bool isLoading;
147 final bool isError; 152 final bool isError;
148 final bool isSuccess; 153 final bool isSuccess;
  154 + final bool isEmpty;
149 final String errorMessage; 155 final String errorMessage;
  156 +
150 RxStatus._({ 157 RxStatus._({
  158 + this.isEmpty,
151 this.isLoading, 159 this.isLoading,
152 this.isError, 160 this.isError,
153 this.isSuccess, 161 this.isSuccess,
@@ -159,6 +167,7 @@ class RxStatus { @@ -159,6 +167,7 @@ class RxStatus {
159 isLoading: true, 167 isLoading: true,
160 isError: false, 168 isError: false,
161 isSuccess: false, 169 isSuccess: false,
  170 + isEmpty: false,
162 ); 171 );
163 } 172 }
164 173
@@ -167,6 +176,7 @@ class RxStatus { @@ -167,6 +176,7 @@ class RxStatus {
167 isLoading: false, 176 isLoading: false,
168 isError: false, 177 isError: false,
169 isSuccess: true, 178 isSuccess: true,
  179 + isEmpty: false,
170 ); 180 );
171 } 181 }
172 182
@@ -175,9 +185,19 @@ class RxStatus { @@ -175,9 +185,19 @@ class RxStatus {
175 isLoading: false, 185 isLoading: false,
176 isError: true, 186 isError: true,
177 isSuccess: false, 187 isSuccess: false,
  188 + isEmpty: false,
178 errorMessage: message, 189 errorMessage: message,
179 ); 190 );
180 } 191 }
  192 +
  193 + factory RxStatus.empty() {
  194 + return RxStatus._(
  195 + isLoading: false,
  196 + isError: false,
  197 + isSuccess: false,
  198 + isEmpty: true,
  199 + );
  200 + }
181 } 201 }
182 202
183 typedef NotifierBuilder<T> = Widget Function(T state); 203 typedef NotifierBuilder<T> = Widget Function(T state);