Метод сборки Flutter HookWidget с неограниченной перезагрузкой
В нашем приложении, которое реализовано с библиотекой, у нас есть неограниченный метод перезагрузки, и он не завершается,
у нас такая проблема только на не
debug
режим, и я не знаю, в чем проблема
release
режим, вызывающий неограниченную перезагрузку
build
и мы не получаем никаких ошибок или предупреждений в
logcat
наши реализованные
HookWidget
:
class Home extends HookWidget {
@override
Widget build(BuildContext context) {
useProvider(articleProvider.notifier).getPosts();
return Directionality(
textDirection: TextDirection.rtl,
child: Scaffold(
body: ProviderListener<NetworkRequestState<Article>>(
provider: articleProvider,
onChange: (BuildContext context,
NetworkRequestState<Article>? postListener) {
postListener?.when(
idle: () {},
success: (value) {},
error: (error, stackTrace) {
//...
},
loading: () {
//...
});
},
child: Container(
child: useProvider(articleProvider).when(
idle: () {
return const SizedBox();
},
loading: () => const SpinKitHourGlass(
color: DefaultColors.$darkBlue,
size: 45.0,
),
success: (value) {
final Article article = value as Article;
final List<Posts> posts = article.posts;
return ListView.separated(
//...
);
},
error: (error, stackTrace) {
return Container(
width: double.infinity,
height: double.infinity,
child: Column(
children: [
//...
),
],
),
);
},
)),
),
),
);
}
}
и
Riverpod
репозиторий:
final getPostProvider = Provider((ref) => PostRepository(ref.read));
final articleProvider =
StateNotifierProvider<ArticleNotifier, NetworkRequestState<Article>>(
(ref) => ArticleNotifier(
ref.watch(getPostProvider),
),
);
class PostRepository {
final Reader _reader;
PostRepository(this._reader);
Future<Article> requestGetPosts() async {
try {
const r = RetryOptions(maxAttempts: 3);
final response = await r.retry(
() => _reader(dioProvider)
.get(Server.$posts,
options: Options(
headers: {'Content-Type': 'application/json'},
))
.timeout(const Duration(seconds: 30)),
retryIf: (e) => e is SocketException || e is TimeoutException,
);
return Article.fromJson(response.data as Map<String, dynamic>);
} on DioError catch (e) {
throw e.error as Object;
}
}
}
class ArticleNotifier extends RequestStateNotifier<Article> {
final PostRepository _postRepository;
ArticleNotifier(this._postRepository);
Future<NetworkRequestState<Article>> getPosts() =>
makeRequest(() =>_postRepository.requestGetPosts());
}