Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何使用提供者在REST分页上无限滚动?_Flutter - Fatal编程技术网

Flutter 如何使用提供者在REST分页上无限滚动?

Flutter 如何使用提供者在REST分页上无限滚动?,flutter,Flutter,我用provider包创建了一个flatter项目 以前,它在项目之后使用ScopedModel运行良好 我想用同样的逻辑实现v3提供程序 //主飞镖 @override Widget build(BuildContext context) { return MultiProvider( providers: [ ChangeNotifierProvider(builder: (context) => NoteContentModel()),

我用provider包创建了一个flatter项目 以前,它在项目之后使用ScopedModel运行良好

我想用同样的逻辑实现v3提供程序

//主飞镖

  @override
  Widget build(BuildContext context) {
    return MultiProvider(
      providers: [
        ChangeNotifierProvider(builder: (context) => NoteContentModel()),
      ],
     ...
        home: NoteContentPage(),
      ),
    );
  }

//注释\u内容\u模型.dart


class NoteContentModel extends ChangeNotifier {
  final _pageSize = 30;

  List<Content> _content = [];
  bool _isLoading = false;
  int _totalResults;
  int _totalPages;
  bool _hasMorePages = true;
  String _placeName;
  bool _isLoadingMore = false;

  // .. other setter getter

  int getNoteCount() => _content.length;

  Future<dynamic> _getData([int page = 1]) async {
    var res = await http.get(getUrl(page));
    return jsonDecode(res.body);
  }

  Future getNoteContent([int page = 1]) async {
    if (page == 1) {
      _isLoading = true;
      _content.clear();
    } else {
      _isLoadingMore = true;
    }

    notifyListeners();

    var responseData = await _getData();

    List noteContent = responseData['content'];
    noteContent.forEach((content) {
      _content.add(Content.fromJson(content));
    });

    _totalResults = responseData['total_count'];
    _totalPages = responseData['page_count'];

    if (responseData['page_number'] == totalPages) {
      _hasMorePages = false;
    }

    if (page == 1) {
      _isLoading = false;
    } else {
      _isLoadingMore = false;
    }
    notifyListeners();
  }

}


所有这些,任何响应都将不胜感激。

您必须将函数包装在
addPostFrameCallback()
中,以便在构建函数完成工作并在屏幕上绘制小部件后提交调用

改变

noteModel.getNoteContent(page);


发布stacktraceok编辑的4-5个顶部框架,添加更多的跟踪我在这里看不到任何框架-看起来应该是哦,对不起,我添加了顶部框架:我的意思是#1、#2、#3、#4、#5-不只是#4和#5-或者更好:最多#8
I/flutter ( 2525): ══╡ EXCEPTION CAUGHT BY FOUNDATION LIBRARY ╞════════════════════════════════════════════════════════
I/flutter ( 2525): The following assertion was thrown while dispatching notifications for NoteContentModel:
I/flutter ( 2525): setState() or markNeedsBuild() called during build.
I/flutter ( 2525): This ListenableProvider<NoteContentModel> widget cannot be marked as needing to build because the
...
I/flutter ( 2525): #0      Element.markNeedsBuild.<anonymous closure> (package:flutter/src/widgets/framework.dart:3670:11)
I/flutter ( 2525): #1      Element.markNeedsBuild (package:flutter/src/widgets/framework.dart:3685:6)
I/flutter ( 2525): #2      State.setState (package:flutter/src/widgets/framework.dart:1161:14)
I/flutter ( 2525): #3      __BuilderListenableDelegate&BuilderStateDelegate&_ListenableDelegateMixin.startListening.<anonymous closure> (package:provider/src/listenable_provider.dart:186:36)
I/flutter ( 2525): #4      ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart:206:21)
I/flutter ( 2525): #5      NoteContentModel.getNoteContent (package:paging_provider/providers/note_content_model.dart:42:5)
I/flutter ( 2525): <asynchronous suspension>
I/flutter ( 2525): #6      _NoteContentPageState.build (package:paging_provider/pages/note_content_page.dart:44:15)
I/flutter ( 2525): #7      StatefulElement.build (package:flutter/src/widgets/framework.dart:4012:27)
I/flutter ( 2525): #8      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3924:15)
I/flutter ( 2525): #9      Element.rebuild (package:flutter/src/widgets/framework.dart:3721:5)
I/flutter ( 2525): #10     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3907:5)
...
// This trace always loop on app running
I/flutter ( 2525): Another exception was thrown: setState() or markNeedsBuild() called during build....
noteModel.getNoteContent(page);
WidgetsBinding.instance.addPostFrameCallback((_) => noteModel.getNoteContent(page);
 );