Метод сборки 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());
}

0 ответов

Другие вопросы по тегам