CustomScrollview layout sequence throws when using 'center' property with 'CupertinoSliverRefreshControl' inside the slivers.

Steps to Reproduce

Create CustomScrollview
use center: _globalKey and in slivers: [.... , SliverPersistentHeader(key: _globalKey,....) ]  to center this header
put CupertinoSliverRefreshControl(...) in slivers: []
exception is thrown when navigate to this page

Expected results:
Actual results:

Logs

Stacktrace
E/flutter ( 3684): [ERROR:flutter/shell/common/shell.cc(242)] Dart Unhandled Exception: Null check operator used on a null value, stack trace: #0      RenderViewportBase.layoutChildSequence (package:flutter/src/rendering/viewport.dart:527:64)
E/flutter ( 3684): #1      RenderViewport._attemptLayout (package:flutter/src/rendering/viewport.dart:1552:29)
E/flutter ( 3684): #2      RenderViewport.performLayout (package:flutter/src/rendering/viewport.dart:1479:20)
E/flutter ( 3684): #3      RenderObject.layout (package:flutter/src/rendering/object.dart:1784:7)
E/flutter ( 3684): #4      RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:118:14)
E/flutter ( 3684): #5      RenderObject.layout (package:flutter/src/rendering/object.dart:1784:7)
E/flutter ( 3684): #6      RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:118:14)
E/flutter ( 3684): #7      RenderObject.layout (package:flutter/src/rendering/object.dart:1784:7)
E/flutter ( 3684): #8      RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:118:14)
E/flutter ( 3684): #9      RenderObject.layout (package:flutter/src/rendering/object.dart:1784:7)
E/flutter ( 3684): #10     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:118:14)
E/flutter ( 3684): #11     RenderObject.layout (package:flutter/src/rendering/object.dart:1784:7)
E/flutter ( 3684): #12     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:118:14)
E/flutter ( 3684): #13     RenderObject.layout (package:flutter/src/rendering/object.dart:1784:7)
E/flutter ( 3684): #14     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:118:14)
E/flutter ( 3684): #15     RenderObject.layout (package:flutter/src/rendering/object.dart:1784:7)
E/flutter ( 3684): #16     ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:54:11)
E/flutter ( 3684): #17     RenderStack._computeSize (package:flutter/src/rendering/stack.dart:570:43)
E/flutter ( 3684): #18     RenderStack.performLayout (package:flutter/src/rendering/stack.dart:597:12)
E/flutter ( 3684): #19     RenderObject.layout (package:flutter/src/rendering/object.dart:1784:7)
E/flutter ( 3684): #20     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:118:14)
E/flutter ( 3684): #21     RenderObject.layout (package:flutter/src/rendering/object.dart:1784:7)
E/flutter ( 3684): #22     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:118:14)
E/flutter ( 3684): #23     RenderObject.layout (package:flutter/src/rendering/object.dart:1784:7)
E/flutter ( 3684): #24     RenderPadding.performLayout (package:flutter/src/rendering/shifted_box.dart:226:12)
E/flutter ( 3684): #25     RenderObject.layout (package:flutter/src/rendering/object.dart:1784:7)
E/flutter ( 3684): #26     ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:54:11)
E/flutter ( 3684): #27     RenderStack._computeSize (package:flutter/src/rendering/stack.dart:570:43)
E/flutter ( 3684): #28     RenderStack.performLayout (package:flutter/src/rendering/stack.dart:597:12)
E/flutter ( 3684): #29     RenderObject.layout (package:flutter/src/rendering/object.dart:1784:7)
E/flutter ( 3684): #30     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:118:14)
E/flutter ( 3684): #31     RenderObject.layout (package:flutter/src/rendering/object.dart:1784:7)
E/flutter ( 3684): #32     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:118:14)
E/flutter ( 3684): #33     RenderObject.layout (package:flutter/src/rendering/object.dart:1784:7)
E/flutter ( 3684): #34     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:118:14)
E/flutter ( 3684): #35     RenderObject.layout (package:flutter/src/rendering/object.dart:1784:7)
E/flutter ( 3684): #36     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:118:14)
E/flutter ( 3684): #37     RenderObject.layout (package:flutter/src/rendering/object.dart:1784:7)
E/flutter ( 3684): #38     ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:54:11)
E/flutter ( 3684): #39     RenderStack._computeSize (package:flutter/src/rendering/stack.dart:570:43)
E/flutter ( 3684): #40     RenderStack.performLayout (package:flutter/src/rendering/stack.dart:597:12)
E/flutter ( 3684): #41     RenderObject.layout (package:flutter/src/rendering/object.dart:1784:7)
E/flutter ( 3684): #42     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:118:14)
E/flutter ( 3684): #43     RenderObject.layout (package:flutter/src/rendering/object.dart:1784:7)
E/flutter ( 3684): #44     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:118:14)
E/flutter ( 3684): #45

flutter analyze

Analyzing ulu_platform_demo...

   info • Unused import: 'package:provider/provider.dart' • lib/backend/data_provider.dart:2:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/helper/api_helper.dart' • lib/backend/data_provider.dart:3:8 • unused_import
   info • 'FlatButton' is deprecated and shouldn't be used. Use TextButton instead. See the migration guide in flutter.dev/go/material-button-migration-guide). This feature was deprecated after v1.25.0-8.1.pre. • lib/game_detail_widgets/upvote_number.dart:14:12 •
          deprecated_member_use
   info • Unused import: 'dart:math' • lib/helper/api_helper.dart:6:8 • unused_import
   info • Unused import: 'dart:typed_data' • lib/helper/api_helper.dart:7:8 • unused_import
   info • Unused import: 'package:flutter/cupertino.dart' • lib/helper/api_helper.dart:8:8 • unused_import
   info • Unused import: 'package:flutter/foundation.dart' • lib/helper/api_helper.dart:9:8 • unused_import
   info • 'await' applied to 'MultipartFile', which is not a 'Future' • lib/helper/api_helper.dart:89:21 • await_only_futures
   info • The value of the local variable 'concat' isn't used • lib/helper/api_helper.dart:202:9 • unused_local_variable
   info • Unused import: 'package:flutter/foundation.dart' • lib/lang/index.dart:4:8 • unused_import
   info • Unused import: 'package:dokit/dokit.dart' • lib/main.dart:1:8 • unused_import
   info • Avoid using braces in interpolation when not needed • lib/main.dart:61:46 • unnecessary_brace_in_string_interps
   info • The value of the field '_error' isn't used • lib/main.dart:104:8 • unused_field
   info • This function has a return type of 'Route<dynamic>', but doesn't end with a return statement • lib/main.dart:289:18 • missing_return
   info • Equality operator `==` invocation with references of unrelated types • lib/main.dart:439:22 • unrelated_type_equality_checks
   info • Equality operator `==` invocation with references of unrelated types • lib/main.dart:453:22 • unrelated_type_equality_checks
   info • Equality operator `==` invocation with references of unrelated types • lib/main.dart:467:22 • unrelated_type_equality_checks
   info • The value of the local variable 'controller' isn't used • lib/main.dart:476:15 • unused_local_variable
   info • The value of the local variable 'isUserCenter' isn't used • lib/main.dart:479:16 • unused_local_variable
   info • Equality operator `==` invocation with references of unrelated types • lib/main.dart:485:19 • unrelated_type_equality_checks
   info • This function has a return type of 'Widget', but doesn't end with a return statement • lib/main.dart:600:10 • missing_return
   info • This function has a return type of 'Route<dynamic>', but doesn't end with a return statement • lib/main.dart:633:18 • missing_return
   info • Avoid using braces in interpolation when not needed • lib/main.dart:634:58 • unnecessary_brace_in_string_interps
   info • The value of the local variable 'user' isn't used • lib/main.dart:635:11 • unused_local_variable
   info • Unused import: 'package:ulu_platform_demo/page_gift/gift.dart' • lib/model/model_class.dart:7:8 • unused_import
   info • Avoid using braces in interpolation when not needed • lib/model/model_class.dart:425:22 • unnecessary_brace_in_string_interps
   info • Avoid using braces in interpolation when not needed • lib/model/model_class.dart:425:45 • unnecessary_brace_in_string_interps
   info • Avoid using braces in interpolation when not needed • lib/model/model_class.dart:474:25 • unnecessary_brace_in_string_interps
   info • Avoid using braces in interpolation when not needed • lib/model/model_class.dart:474:55 • unnecessary_brace_in_string_interps
   info • Avoid using braces in interpolation when not needed • lib/model/model_class.dart:532:13 • unnecessary_brace_in_string_interps
   info • Avoid using braces in interpolation when not needed • lib/model/model_class.dart:532:30 • unnecessary_brace_in_string_interps
   info • Avoid using braces in interpolation when not needed • lib/model/model_class.dart:532:47 • unnecessary_brace_in_string_interps
   info • Avoid using braces in interpolation when not needed • lib/model/model_class.dart:532:64 • unnecessary_brace_in_string_interps
   info • Avoid using braces in interpolation when not needed • lib/model/model_class.dart:532:84 • unnecessary_brace_in_string_interps
   info • Avoid using braces in interpolation when not needed • lib/model/model_class.dart:532:109 • unnecessary_brace_in_string_interps
   info • Avoid using braces in interpolation when not needed • lib/model/model_class.dart:562:19 • unnecessary_brace_in_string_interps
   info • Avoid using braces in interpolation when not needed • lib/model/model_class.dart:562:41 • unnecessary_brace_in_string_interps
   info • Unused import: 'package:ulu_platform_demo/lang/index.dart' • lib/model/platform_info.dart:8:8 • unused_import
   info • Avoid wrapping fields in getters and setters just to be "safe" • lib/model/platform_info.dart:12:14 • unnecessary_getters_setters
   info • Avoid wrapping fields in getters and setters just to be "safe" • lib/model/platform_info.dart:14:14 • unnecessary_getters_setters
   info • Unused import: 'package:ulu_platform_demo/model/model_class.dart' • lib/page_games/download/download_button.dart:4:8 • unused_import
   info • This class (or a class that this class inherits from) is marked as '@immutable', but one or more of its instance fields aren't final: DownloadButton.packageName, DownloadButton.downloadUrl, DownloadButton.isGreyBackground, DownloadButton.downloadTitle •
          lib/page_games/download/download_button.dart:11:7 • must_be_immutable
   info • The value of the local variable 'isResume' isn't used • lib/page_games/download/download_button.dart:82:10 • unused_local_variable
   info • Avoid using braces in interpolation when not needed • lib/page_games/download/download_provider.dart:24:78 • unnecessary_brace_in_string_interps
   info • Avoid using braces in interpolation when not needed • lib/page_games/download/download_provider.dart:24:105 • unnecessary_brace_in_string_interps
   info • Avoid using braces in interpolation when not needed • lib/page_games/download/download_provider.dart:24:139 • unnecessary_brace_in_string_interps
   info • The value of the field '_timer' isn't used • lib/page_games/download/download_provider.dart:28:9 • unused_field
   info • Avoid using braces in interpolation when not needed • lib/page_games/download/download_provider.dart:74:32 • unnecessary_brace_in_string_interps
   info • Avoid using braces in interpolation when not needed • lib/page_games/download/download_provider.dart:74:42 • unnecessary_brace_in_string_interps
   info • Avoid using braces in interpolation when not needed • lib/page_games/download/download_provider.dart:79:51 • unnecessary_brace_in_string_interps
   info • Avoid using braces in interpolation when not needed • lib/page_games/download/download_provider.dart:83:44 • unnecessary_brace_in_string_interps
   info • Avoid using braces in interpolation when not needed • lib/page_games/download/download_provider.dart:128:66 • unnecessary_brace_in_string_interps
   info • Avoid using braces in interpolation when not needed • lib/page_games/download/download_provider.dart:180:18 • unnecessary_brace_in_string_interps
   info • Avoid using braces in interpolation when not needed • lib/page_games/download/download_provider.dart:205:36 • unnecessary_brace_in_string_interps
   info • Avoid using braces in interpolation when not needed • lib/page_games/download/download_provider.dart:215:36 • unnecessary_brace_in_string_interps
   info • Avoid using braces in interpolation when not needed • lib/page_games/download/download_provider.dart:237:36 • unnecessary_brace_in_string_interps
   info • Unused import: 'package:meta/meta.dart' • lib/page_games/download_status.dart:3:8 • unused_import
   info • Unused import: 'package:cached_network_image/cached_network_image.dart' • lib/page_games/fullscreen_image.dart:2:8 • unused_import
   info • Unused import: '../model/model_class.dart' • lib/page_games/fullscreen_image.dart:7:8 • unused_import
   info • This class (or a class that this class inherits from) is marked as '@immutable', but one or more of its instance fields aren't final: FullscreenImage.initial • lib/page_games/fullscreen_image.dart:10:7 • must_be_immutable
   info • The value of the field '_resize' isn't used • lib/page_games/fullscreen_image.dart:29:10 • unused_field
   info • Avoid using braces in interpolation when not needed • lib/page_games/fullscreen_image.dart:66:37 • unnecessary_brace_in_string_interps
   info • Unused import: 'dart:ui' • lib/page_games/game_api_provider.dart:4:8 • unused_import
   info • Unused import: 'dart:convert' • lib/page_games/game_detail.dart:1:8 • unused_import
   info • Unused import: 'dart:ffi' • lib/page_games/game_detail.dart:2:8 • unused_import
   info • Unused import: 'package:flutter/services.dart' • lib/page_games/game_detail.dart:9:8 • unused_import
   info • Unused import: 'package:http/http.dart' • lib/page_games/game_detail.dart:12:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/model/platform_info.dart' • lib/page_games/game_detail.dart:16:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/page_games/video_player.dart' • lib/page_games/game_detail.dart:19:8 • unused_import
   info • Unused import: 'package:url_launcher/url_launcher.dart' • lib/page_games/game_detail.dart:23:8 • unused_import
   info • Unused import: 'package:flushbar/flushbar.dart' • lib/page_games/game_detail.dart:26:8 • unused_import
   info • Unused import: 'package:webview_flutter/webview_flutter.dart' • lib/page_games/game_detail.dart:31:8 • unused_import
   info • Unused import: 'game_jump.dart' • lib/page_games/game_detail.dart:33:8 • unused_import
   info • The value of the field '_controller' isn't used • lib/page_games/game_detail.dart:67:27 • unused_field
   info • The value of the field '_hasVideo' isn't used • lib/page_games/game_detail.dart:68:8 • unused_field
   info • The value of the local variable 'task' isn't used • lib/page_games/game_detail.dart:112:17 • unused_local_variable
   info • The receiver uses '?.', so its value can be null • lib/page_games/game_detail.dart:115:40 • can_be_null_after_null_aware
   info • 'RaisedButton' is deprecated and shouldn't be used. Use ElevatedButton instead. See the migration guide in flutter.dev/go/material-button-migration-guide). This feature was deprecated after v1.25.0-8.1.pre. • lib/page_games/game_detail.dart:314:19 •
          deprecated_member_use
   info • Unused import: 'package:flutter/material.dart' • lib/page_games/game_jump.dart:3:8 • unused_import
   info • Avoid using braces in interpolation when not needed • lib/page_games/game_jump.dart:51:74 • unnecessary_brace_in_string_interps
   info • Unused import: 'package:flushbar/flushbar.dart' • lib/page_games/games_list_tab.dart:3:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/helper/appexceptions.dart' • lib/page_games/games_list_tab.dart:10:8 • unused_import
   info • Unused import: 'game_jump.dart' • lib/page_games/games_list_tab.dart:28:8 • unused_import
   info • 'List' is deprecated and shouldn't be used. Use a list literal, [], or the List.filled constructor instead • lib/page_games/games_list_tab.dart:60:32 • deprecated_member_use
   info • 'await' applied to 'void', which is not a 'Future' • lib/page_games/games_list_tab.dart:80:5 • await_only_futures
   info • The receiver uses '?.', so its value can be null • lib/page_games/games_list_tab.dart:91:25 • can_be_null_after_null_aware
   info • The value of the local variable 'lc' isn't used • lib/page_games/games_list_tab.dart:102:11 • unused_local_variable
   info • Avoid using braces in interpolation when not needed • lib/page_games/games_list_tab.dart:149:54 • unnecessary_brace_in_string_interps
   info • 'FlatButton' is deprecated and shouldn't be used. Use TextButton instead. See the migration guide in flutter.dev/go/material-button-migration-guide). This feature was deprecated after v1.25.0-8.1.pre. • lib/page_games/games_list_tab.dart:205:27 •
          deprecated_member_use
   info • The declaration '_buildRecommendedGames' isn't referenced • lib/page_games/games_list_tab.dart:280:16 • unused_element
   info • The receiver uses '?.', so its value can be null • lib/page_games/games_list_tab.dart:353:36 • can_be_null_after_null_aware
   info • Unused import: 'dart:math' • lib/page_games/video_player.dart:5:8 • unused_import
   info • Avoid using unnecessary statements • lib/page_games/video_player.dart:23:9 • unnecessary_statements
   info • Unused import: 'package:http/http.dart' • lib/page_gift/gift.dart:3:8 • unused_import
   info • Unused import: 'package:pull_to_refresh/pull_to_refresh.dart' • lib/page_gift/gift.dart:4:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/backend/data_provider.dart' • lib/page_gift/gift.dart:5:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/helper/api_helper.dart' • lib/page_gift/gift.dart:6:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/helper/appexceptions.dart' • lib/page_gift/gift.dart:7:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/model/platform_info.dart' • lib/page_gift/gift.dart:9:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/page_gift/gift_api.dart' • lib/page_gift/gift.dart:10:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/page_gift/gift_provider.dart' • lib/page_gift/gift.dart:11:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/page_gift/received_gift.dart' • lib/page_gift/gift.dart:12:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/page_me/user_center.dart' • lib/page_gift/gift.dart:13:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/user_controller.dart' • lib/page_gift/gift.dart:14:8 • unused_import
   info • The name AppLocalizationsDelegate is shown, but isn’t used • lib/page_gift/gift.dart:17:28 • unused_shown_name
   info • Unused import: 'package:ulu_platform_demo/widgets/list_item.dart' • lib/page_gift/gift.dart:19:8 • unused_import
   info • Duplicate import • lib/page_gift/gift.dart:21:8 • duplicate_import
   info • Unused import: 'gift_detail.dart' • lib/page_gift/gift.dart:23:8 • unused_import
   info • Avoid using braces in interpolation when not needed • lib/page_gift/gift_api.dart:53:78 • unnecessary_brace_in_string_interps
   info • Avoid using braces in interpolation when not needed • lib/page_gift/gift_api.dart:53:94 • unnecessary_brace_in_string_interps
   info • Avoid using braces in interpolation when not needed • lib/page_gift/gift_api.dart:69:53 • unnecessary_brace_in_string_interps
   info • Avoid using braces in interpolation when not needed • lib/page_gift/gift_api.dart:69:69 • unnecessary_brace_in_string_interps
   info • Avoid using braces in interpolation when not needed • lib/page_gift/gift_api.dart:88:73 • unnecessary_brace_in_string_interps
   info • Unused import: 'package:flutter/scheduler.dart' • lib/page_gift/gift_detail.dart:4:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/backend/data_provider.dart' • lib/page_gift/gift_detail.dart:6:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/page_gift/gift.dart' • lib/page_gift/gift_detail.dart:12:8 • unused_import
   info • The value of the local variable 'lc' isn't used • lib/page_gift/gift_detail.dart:49:11 • unused_local_variable
   info • The value of the local variable 'user' isn't used • lib/page_gift/gift_detail.dart:116:9 • unused_local_variable
   info • The value of the local variable 'loc' isn't used • lib/page_gift/gift_detail.dart:117:9 • unused_local_variable
   info • Unused import: 'package:flushbar/flushbar.dart' • lib/page_gift/gift_list_item.dart:1:8 • unused_import
   info • Unused import: 'package:fluttertoast/fluttertoast.dart' • lib/page_gift/gift_list_item.dart:5:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/helper/api_helper.dart' • lib/page_gift/gift_list_item.dart:6:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/helper/appexceptions.dart' • lib/page_gift/gift_list_item.dart:7:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/main.dart' • lib/page_gift/gift_list_item.dart:8:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/model/platform_info.dart' • lib/page_gift/gift_list_item.dart:10:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/page_gift/gift_provider.dart' • lib/page_gift/gift_list_item.dart:13:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/page_gift/select_server_role.dart' • lib/page_gift/gift_list_item.dart:14:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/widgets/toast_template.dart' • lib/page_gift/gift_list_item.dart:19:8 • unused_import
   info • Unused import: '../place_holder_img.dart' • lib/page_gift/gift_list_item.dart:20:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/widgets/rich_text_widget.dart' • lib/page_gift/gift_list_item.dart:23:8 • unused_import
   info • Unused import: 'package:provider/provider.dart' • lib/page_gift/gift_list_provider.dart:5:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/model/platform_info.dart' • lib/page_gift/gift_list_provider.dart:6:8 • unused_import
   info • Unused import: '../user_controller.dart' • lib/page_gift/gift_list_provider.dart:8:8 • unused_import
   info • Avoid using braces in interpolation when not needed • lib/page_gift/num_in_span_text.dart:18:31 • unnecessary_brace_in_string_interps
   info • Unused import: 'package:ulu_platform_demo/model/platform_info.dart' • lib/page_gift/received_gift.dart:9:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/page_gift/gift_list_item.dart' • lib/page_gift/received_gift.dart:10:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/page_gift/gift_provider.dart' • lib/page_gift/received_gift.dart:12:8 • unused_import
   info • The value of the local variable 'user' isn't used • lib/page_gift/received_gift.dart:28:11 • unused_local_variable
   info • Avoid using braces in interpolation when not needed • lib/page_gift/received_gift.dart:126:82 • unnecessary_brace_in_string_interps
   info • Unused import: 'dart:io' • lib/page_gift/server_role_popup.dart:3:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/page_games/game_jump.dart' • lib/page_gift/server_role_popup.dart:13:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/page_gift/gift_provider.dart' • lib/page_gift/server_role_popup.dart:15:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/page_gift/store_open.dart' • lib/page_gift/server_role_popup.dart:18:8 • unused_import
   info • Unused import: 'package:url_launcher/url_launcher.dart' • lib/page_gift/server_role_popup.dart:22:8 • unused_import
   info • The value of the field '_timer' isn't used • lib/page_gift/server_role_popup.dart:48:9 • unused_field
   info • Avoid using braces in interpolation when not needed • lib/page_gift/server_role_popup.dart:55:12 • unnecessary_brace_in_string_interps
   info • The value of the local variable 'jump' isn't used • lib/page_gift/server_role_popup.dart:272:24 • unused_local_variable
   info • The value of the local variable 'timeIsUp' isn't used • lib/page_gift/server_role_popup.dart:273:10 • unused_local_variable
   info • The value of the local variable 'errMsg' isn't used • lib/page_gift/server_role_popup.dart:333:14 • unused_local_variable
   info • Unused import: 'package:ulu_platform_demo/page_infos/widgets/comment_item.dart' • lib/page_infos/backend/story_api.dart:8:8 • unused_import
   info • Avoid using braces in interpolation when not needed • lib/page_infos/backend/story_api.dart:35:54 • unnecessary_brace_in_string_interps
   info • Avoid using braces in interpolation when not needed • lib/page_infos/backend/story_api.dart:35:72 • unnecessary_brace_in_string_interps
   info • Avoid using braces in interpolation when not needed • lib/page_infos/backend/story_api.dart:35:85 • unnecessary_brace_in_string_interps
   info • Avoid using braces in interpolation when not needed • lib/page_infos/backend/story_api.dart:65:61 • unnecessary_brace_in_string_interps
   info • Avoid using braces in interpolation when not needed • lib/page_infos/backend/story_api.dart:65:80 • unnecessary_brace_in_string_interps
   info • Avoid using braces in interpolation when not needed • lib/page_infos/backend/story_api.dart:65:93 • unnecessary_brace_in_string_interps
   info • Name non-constant identifiers using lowerCamelCase • lib/page_infos/backend/story_api.dart:85:11 • non_constant_identifier_names
   info • Avoid using braces in interpolation when not needed • lib/page_infos/backend/story_api.dart:106:63 • unnecessary_brace_in_string_interps
   info • Avoid using braces in interpolation when not needed • lib/page_infos/backend/story_api.dart:106:84 • unnecessary_brace_in_string_interps
   info • Avoid using braces in interpolation when not needed • lib/page_infos/backend/story_api.dart:106:97 • unnecessary_brace_in_string_interps
   info • Name non-constant identifiers using lowerCamelCase • lib/page_infos/backend/story_api.dart:122:11 • non_constant_identifier_names
   info • Avoid using braces in interpolation when not needed • lib/page_infos/backend/story_api.dart:143:67 • unnecessary_brace_in_string_interps
   info • Avoid using braces in interpolation when not needed • lib/page_infos/backend/story_api.dart:143:80 • unnecessary_brace_in_string_interps
   info • Avoid using braces in interpolation when not needed • lib/page_infos/backend/story_api.dart:168:59 • unnecessary_brace_in_string_interps
   info • Avoid using braces in interpolation when not needed • lib/page_infos/backend/story_api.dart:190:48 • unnecessary_brace_in_string_interps
   info • Avoid using braces in interpolation when not needed • lib/page_infos/backend/story_api.dart:190:63 • unnecessary_brace_in_string_interps
   info • Avoid using braces in interpolation when not needed • lib/page_infos/backend/story_api.dart:190:76 • unnecessary_brace_in_string_interps
   info • Avoid using braces in interpolation when not needed • lib/page_infos/backend/story_api.dart:300:117 • unnecessary_brace_in_string_interps
   info • Avoid using braces in interpolation when not needed • lib/page_infos/backend/story_api.dart:317:123 • unnecessary_brace_in_string_interps
   info • The getter doesn't override an inherited getter • lib/page_infos/backend/story_list_provider.dart:164:14 • override_on_non_overriding_member
   info • Unused import: 'package:provider/provider.dart' • lib/page_infos/backend/topic_list_provider.dart:9:8 • unused_import
   info • Unused import: '../../user_controller.dart' • lib/page_infos/backend/topic_list_provider.dart:10:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/widgets/back_button_custom.dart' • lib/page_infos/create_story.dart:9:8 • unused_import
   info • 'List' is deprecated and shouldn't be used. Use a list literal, [], or the List.filled constructor instead • lib/page_infos/create_story.dart:30:40 • deprecated_member_use
   info • 'List' is deprecated and shouldn't be used. Use a list literal, [], or the List.filled constructor instead • lib/page_infos/create_story.dart:31:33 • deprecated_member_use
   info • The value of the field '_error' isn't used • lib/page_infos/create_story.dart:32:10 • unused_field
   info • Unused import: 'package:flutter/scheduler.dart' • lib/page_infos/details/comment_detail.dart:5:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/main.dart' • lib/page_infos/details/comment_detail.dart:9:8 • unused_import
   info • 'List' is deprecated and shouldn't be used. Use a list literal, [], or the List.filled constructor instead • lib/page_infos/details/comment_detail.dart:53:31 • deprecated_member_use
   info • 'List' is deprecated and shouldn't be used. Use a list literal, [], or the List.filled constructor instead • lib/page_infos/details/comment_detail.dart:69:40 • deprecated_member_use
   info • 'List' is deprecated and shouldn't be used. Use a list literal, [], or the List.filled constructor instead • lib/page_infos/details/comment_detail.dart:71:33 • deprecated_member_use
   info • The value of the field '_error' isn't used • lib/page_infos/details/comment_detail.dart:75:10 • unused_field
   info • The value of the field '_loading' isn't used • lib/page_infos/details/comment_detail.dart:81:8 • unused_field
   info • The value of the '?.' operator can be 'null', which isn't appropriate as an operand of a logical operator • lib/page_infos/details/comment_detail.dart:210:58 • null_aware_in_logical_operator
   info • Unused import: 'package:ulu_platform_demo/main.dart' • lib/page_infos/details/story_detail.dart:9:8 • unused_import
   info • The value of the field '_error' isn't used • lib/page_infos/details/story_detail.dart:74:10 • unused_field
   info • The value of the field '_refreshController' isn't used • lib/page_infos/details/story_detail.dart:84:21 • unused_field
   info • The value of the local variable 'provider' isn't used • lib/page_infos/details/story_detail.dart:111:11 • unused_local_variable
   info • The value of the '?.' operator can be 'null', which isn't appropriate as an operand of a logical operator • lib/page_infos/details/story_detail.dart:178:58 • null_aware_in_logical_operator
   info • Unused import: 'package:webview_flutter/webview_flutter.dart' • lib/page_infos/info_list_detail.dart:12:8 • unused_import
   info • 'FlatButton' is deprecated and shouldn't be used. Use TextButton instead. See the migration guide in flutter.dev/go/material-button-migration-guide). This feature was deprecated after v1.25.0-8.1.pre. • lib/page_infos/info_list_detail.dart:96:19 •
          deprecated_member_use
   info • Unused import: 'package:flutter/foundation.dart' • lib/page_infos/info_list_tab.dart:4:8 • unused_import
   info • Unused import: 'package:http/http.dart' • lib/page_infos/info_list_tab.dart:6:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/page_me/user_info.dart' • lib/page_infos/info_list_tab.dart:8:8 • unused_import
   info • Unused import: 'info_list_tab_1_news.dart' • lib/page_infos/info_list_tab.dart:10:8 • unused_import
   info • Unused import: 'info_list_tab_2_movies.dart' • lib/page_infos/info_list_tab.dart:11:8 • unused_import
   info • Unused import: '../model/model_class.dart' • lib/page_infos/info_list_tab.dart:12:8 • unused_import
   info • This class (or a class that this class inherits from) is marked as '@immutable', but one or more of its instance fields aren't final: InfoListTab.onChangeTab, InfoListTab._refreshController • lib/page_infos/info_list_tab.dart:18:7 • must_be_immutable
   info • The value of the field '_refreshController' isn't used • lib/page_infos/info_list_tab.dart:23:21 • unused_field
warning • The parameter 'onPressed' is required • lib/page_infos/info_list_tab.dart:32:25 • missing_required_param
   info • Unused import: 'package:ulu_platform_demo/model/platform_info.dart' • lib/page_infos/info_list_tab_1_news.dart:7:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/page_games/game_detail.dart' • lib/page_infos/info_list_tab_1_news.dart:8:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/page_infos/pagelogic.dart' • lib/page_infos/info_list_tab_1_news.dart:13:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/page_infos/info_list_detail.dart' • lib/page_infos/info_list_tab_1_news.dart:14:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/place_holder_img.dart' • lib/page_infos/info_list_tab_1_news.dart:18:8 • unused_import
   info • Unused import: '../page_infos/news_api_provider.dart' • lib/page_infos/info_list_tab_1_news.dart:23:8 • unused_import
   info • The name AppLocalizationsDelegate is shown, but isn’t used • lib/page_infos/info_list_tab_1_news.dart:25:28 • unused_shown_name
   info • Unused import: 'package:carousel_slider/carousel_slider.dart' • lib/page_infos/info_list_tab_1_news.dart:26:8 • unused_import
   info • This class (or a class that this class inherits from) is marked as '@immutable', but one or more of its instance fields aren't final: InfoTab1.onChangeTab • lib/page_infos/info_list_tab_1_news.dart:42:7 • must_be_immutable
   info • The value of the field '_current' isn't used • lib/page_infos/info_list_tab_1_news.dart:54:13 • unused_field
   info • This method overrides a method annotated as '@mustCallSuper' in 'AutomaticKeepAliveClientMixin', but doesn't invoke the overridden method • lib/page_infos/info_list_tab_1_news.dart:73:10 • must_call_super
   info • The value of the local variable 'lc' isn't used • lib/page_infos/info_list_tab_1_news.dart:74:9 • unused_local_variable
   info • The declaration '_onStoryDelete' isn't referenced • lib/page_infos/info_list_tab_1_news.dart:201:8 • unused_element
   info • The value of the local variable 'provider' isn't used • lib/page_infos/info_list_tab_1_news.dart:230:9 • unused_local_variable
   info • Unused import: 'package:ulu_platform_demo/helper/api_helper.dart' • lib/page_infos/info_list_tab_2_movies.dart:4:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/page_infos/news_api_provider.dart' • lib/page_infos/info_list_tab_2_movies.dart:6:8 • unused_import
   info • This function has a return type of 'FutureOr<List<NewsRecord>>', but doesn't end with a return statement • lib/page_infos/info_list_tab_2_movies.dart:52:28 • missing_return
   info • Unused import: 'package:ulu_platform_demo/page_games/game_api_provider.dart' • lib/page_infos/news_api_provider.dart:10:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/model/platform_info.dart' • lib/page_infos/pagelogic.dart:7:8 • unused_import
   info • 'List' is deprecated and shouldn't be used. Use a list literal, [], or the List.filled constructor instead • lib/page_infos/pagelogic.dart:22:35 • deprecated_member_use
   info • 'List' is deprecated and shouldn't be used. Use a list literal, [], or the List.filled constructor instead • lib/page_infos/pagelogic.dart:58:22 • deprecated_member_use
   info • Unused import: 'package:ulu_platform_demo/model/platform_info.dart' • lib/page_infos/select_circle_page.dart:6:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/page_infos/backend/story_api.dart' • lib/page_infos/select_circle_page.dart:7:8 • unused_import
   info • The value of the local variable 'locale' isn't used • lib/page_infos/select_circle_page.dart:36:9 • unused_local_variable
   info • Unused import: 'package:ulu_platform_demo/lang/index.dart' • lib/page_infos/widgets/custom_popup_button.dart:6:8 • unused_import
   info • Avoid using braces in interpolation when not needed • lib/page_infos/widgets/custom_popup_button.dart:43:35 • unnecessary_brace_in_string_interps
   info • Avoid using braces in interpolation when not needed • lib/page_infos/widgets/custom_popup_button.dart:51:55 • unnecessary_brace_in_string_interps
   info • Unused import: 'package:flutter/cupertino.dart' • lib/page_infos/widgets/formated_creation_date.dart:3:8 • unused_import
   info • Avoid using braces in interpolation when not needed • lib/page_infos/widgets/formated_creation_date.dart:22:28 • unnecessary_brace_in_string_interps
   info • Avoid using braces in interpolation when not needed • lib/page_infos/widgets/formated_creation_date.dart:25:30 • unnecessary_brace_in_string_interps
   info • This class (or a class that this class inherits from) is marked as '@immutable', but one or more of its instance fields aren't final: MatrixImage.len • lib/page_infos/widgets/matrix_image.dart:11:7 • must_be_immutable
   info • This class (or a class that this class inherits from) is marked as '@immutable', but one or more of its instance fields aren't final: OverlayMenu.items • lib/page_infos/widgets/overlay_menu.dart:5:7 • must_be_immutable
   info • 'List' is deprecated and shouldn't be used. Use a list literal, [], or the List.filled constructor instead • lib/page_infos/widgets/replys_text.dart:22:29 • deprecated_member_use
   info • Unused import: 'package:ulu_platform_demo/page_infos/backend/story_api.dart' • lib/page_infos/widgets/story.dart:9:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/page_infos/widgets/story_more_menu.dart' • lib/page_infos/widgets/story.dart:12:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/widgets/PopupMenuItemCustomPadding.dart' • lib/page_infos/widgets/story.dart:14:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/widgets/free_menubutton.dart' • lib/page_infos/widgets/story.dart:15:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/user_controller.dart' • lib/page_infos/widgets/thumbup_button.dart:6:8 • unused_import
   info • This class (or a class that this class inherits from) is marked as '@immutable', but one or more of its instance fields aren't final: BindPhone._child • lib/page_me/bind_phone.dart:9:7 • must_be_immutable
   info • The value of the field '_cachedUserInfo' isn't used • lib/page_me/binding_bloc.dart:22:7 • unused_field
   info • A value of type 'void' can't be returned by the 'onError' handler because it must be assignable to 'FutureOr<UserInfo>' • lib/page_me/binding_bloc.dart:37:35 • return_of_invalid_type_from_catch_error
   info • A value of type 'void' can't be returned by the 'onError' handler because it must be assignable to 'FutureOr<UserInfo>' • lib/page_me/binding_bloc.dart:54:35 • return_of_invalid_type_from_catch_error
   info • This function has a return type of 'FutureOr<FacebookAccessToken>', but doesn't end with a return statement • lib/page_me/binding_bloc.dart:58:31 • missing_return
   info • The value of the local variable 'token' isn't used • lib/page_me/binding_bloc.dart:66:35 • unused_local_variable
   info • Unused import: 'package:flushbar/flushbar.dart' • lib/page_me/bindings.dart:5:8 • unused_import
   info • The value of the local variable 'lc' isn't used • lib/page_me/bindings.dart:29:11 • unused_local_variable
   info • The value of the field '_currentInfo' isn't used • lib/page_me/bindings.dart:49:18 • unused_field
   info • The value of the local variable 'params' isn't used • lib/page_me/change_avatar.dart:85:11 • unused_local_variable
   info • The value of the local variable 'header' isn't used • lib/page_me/change_avatar.dart:87:11 • unused_local_variable
   info • This function has a return type of 'FutureOr<bool>', but doesn't end with a return statement • lib/page_me/change_avatar.dart:96:16 • missing_return
   info • 'await' applied to 'void', which is not a 'Future' • lib/page_me/change_avatar.dart:106:5 • await_only_futures
   info • 'FlatButton' is deprecated and shouldn't be used. Use TextButton instead. See the migration guide in flutter.dev/go/material-button-migration-guide). This feature was deprecated after v1.25.0-8.1.pre. • lib/page_me/change_avatar.dart:124:16 •
          deprecated_member_use
   info • 'FlatButton' is deprecated and shouldn't be used. Use TextButton instead. See the migration guide in flutter.dev/go/material-button-migration-guide). This feature was deprecated after v1.25.0-8.1.pre. • lib/page_me/change_avatar.dart:137:16 •
          deprecated_member_use
   info • Unused import: 'package:ulu_platform_demo/helper/api_helper.dart' • lib/page_me/crop_avatar.dart:5:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/widgets/back_button_custom.dart' • lib/page_me/crop_avatar.dart:11:8 • unused_import
   info • This class (or a class that this class inherits from) is marked as '@immutable', but one or more of its instance fields aren't final: CropAvatar.image • lib/page_me/crop_avatar.dart:14:7 • must_be_immutable
   info • The value of the local variable 'size' isn't used • lib/page_me/crop_avatar.dart:32:11 • unused_local_variable
   info • Unused import: 'package:country_code_picker/country_code_picker.dart' • lib/page_me/email_binding.dart:3:8 • unused_import
   info • Unused import: 'package:flushbar/flushbar.dart' • lib/page_me/email_binding.dart:4:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/model/model_class.dart' • lib/page_me/email_binding.dart:8:8 • unused_import
   info • This class (or a class that this class inherits from) is marked as '@immutable', but one or more of its instance fields aren't final: EmailBind._child • lib/page_me/email_binding.dart:15:7 • must_be_immutable
   info • Name non-constant identifiers using lowerCamelCase • lib/page_me/email_binding.dart:52:16 • non_constant_identifier_names
   info • Name non-constant identifiers using lowerCamelCase • lib/page_me/email_binding.dart:59:13 • non_constant_identifier_names
warning • The parameter 'onPressed' is required • lib/page_me/email_binding.dart:152:24 • missing_required_param
warning • The parameter 'onPressed' is required • lib/page_me/email_binding.dart:162:22 • missing_required_param
   info • Unused import: 'dart:async' • lib/page_me/email_login.dart:1:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/helper/appexceptions.dart' • lib/page_me/email_login.dart:5:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/page_me/email_register.dart' • lib/page_me/email_login.dart:6:8 • unused_import
   info • The value of the local variable 'controller' isn't used • lib/page_me/email_login.dart:37:9 • unused_local_variable
   info • 'FlatButton' is deprecated and shouldn't be used. Use TextButton instead. See the migration guide in flutter.dev/go/material-button-migration-guide). This feature was deprecated after v1.25.0-8.1.pre. • lib/page_me/email_login.dart:108:24 •
          deprecated_member_use
   info • Unused import: 'package:flushbar/flushbar.dart' • lib/page_me/email_register.dart:5:8 • unused_import
   info • Unused import: 'package:flutter/services.dart' • lib/page_me/email_register.dart:9:8 • unused_import
   info • Unused import: 'package:url_launcher/url_launcher.dart' • lib/page_me/email_register.dart:20:8 • unused_import
   info • Unused import: 'package:flushbar/flushbar.dart' • lib/page_me/forget_password.dart:5:8 • unused_import
   info • This class (or a class that this class inherits from) is marked as '@immutable', but one or more of its instance fields aren't final: ForgetPasswordOuter._authCode • lib/page_me/forget_password.dart:17:7 • must_be_immutable
   info • Name non-constant identifiers using lowerCamelCase • lib/page_me/forget_password.dart:145:3 • non_constant_identifier_names
   info • This class (or a class that this class inherits from) is marked as '@immutable', but one or more of its instance fields aren't final: LoginContent._editingController • lib/page_me/login_refactor/login_page.dart:10:7 • must_be_immutable
   info • Unused import: 'package:ulu_platform_demo/page_me/user_info.dart' • lib/page_me/more_page_from_mypagetab.dart:9:8 • unused_import
   info • Unused import: 'package:provider/provider.dart' • lib/page_me/my_business_logic.dart:16:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/lang/index.dart' • lib/page_me/my_business_logic.dart:17:8 • unused_import
   info • Close instances of `dart.core.Sink` • lib/page_me/my_business_logic.dart:40:23 • close_sinks
   info • Close instances of `dart.core.Sink` • lib/page_me/my_business_logic.dart:43:34 • close_sinks
   info • Close instances of `dart.core.Sink` • lib/page_me/my_business_logic.dart:46:26 • close_sinks
   info • Close instances of `dart.core.Sink` • lib/page_me/my_business_logic.dart:49:26 • close_sinks
   info • Close instances of `dart.core.Sink` • lib/page_me/my_business_logic.dart:53:20 • close_sinks
   info • Close instances of `dart.core.Sink` • lib/page_me/my_business_logic.dart:56:28 • close_sinks
   info • Close instances of `dart.core.Sink` • lib/page_me/my_business_logic.dart:59:28 • close_sinks
   info • Close instances of `dart.core.Sink` • lib/page_me/my_business_logic.dart:62:28 • close_sinks
   info • Close instances of `dart.core.Sink` • lib/page_me/my_business_logic.dart:75:9 • close_sinks
   info • The value of the field '_controller' isn't used • lib/page_me/my_business_logic.dart:75:9 • unused_field
   info • This function has a return type of 'FutureOr<User>', but doesn't end with a return statement • lib/page_me/my_business_logic.dart:120:16 • missing_return
   info • This function has a return type of 'FutureOr<FacebookAccessToken>', but doesn't end with a return statement • lib/page_me/my_business_logic.dart:138:31 • missing_return
   info • The value of the local variable 'token' isn't used • lib/page_me/my_business_logic.dart:147:35 • unused_local_variable
   info • This function has a return type of 'FutureOr<GoogleSignInAccount>', but doesn't end with a return statement • lib/page_me/my_business_logic.dart:177:31 • missing_return
   info • This function has a return type of 'FutureOr<int>', but doesn't end with a return statement • lib/page_me/my_business_logic.dart:196:15 • missing_return
   info • Unused import: 'package:flutter/scheduler.dart' • lib/page_me/my_page_tab.dart:8:8 • unused_import
   info • Unused import: 'package:package_info/package_info.dart' • lib/page_me/my_page_tab.dart:9:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/helper/appexceptions.dart' • lib/page_me/my_page_tab.dart:11:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/main.dart' • lib/page_me/my_page_tab.dart:12:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/page_me/bindings.dart' • lib/page_me/my_page_tab.dart:18:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/page_me/security_page.dart' • lib/page_me/my_page_tab.dart:20:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/page_me/setting.dart' • lib/page_me/my_page_tab.dart:21:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/widgets/list_content_widget.dart' • lib/page_me/my_page_tab.dart:25:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/widgets/navigation_bar.dart' • lib/page_me/my_page_tab.dart:26:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/widgets/static_tablecell.dart' • lib/page_me/my_page_tab.dart:27:8 • unused_import
   info • This class (or a class that this class inherits from) is marked as '@immutable', but one or more of its instance fields aren't final: MyPageTab.added • lib/page_me/my_page_tab.dart:41:7 • must_be_immutable
   info • The value of the local variable 'lc' isn't used • lib/page_me/my_page_tab.dart:51:11 • unused_local_variable
   info • This class (or a class that this class inherits from) is marked as '@immutable', but one or more of its instance fields aren't final: MyPage.alreadyShowedLogin • lib/page_me/my_page_tab.dart:56:7 • must_be_immutable
   info • 'List' is deprecated and shouldn't be used. Use a list literal, [], or the List.filled constructor instead • lib/page_me/my_page_tab.dart:68:28 • deprecated_member_use
   info • The value of the local variable 'controller' isn't used • lib/page_me/my_page_tab.dart:119:11 • unused_local_variable
   info • The value of the local variable 'myBusinessLogic' isn't used • lib/page_me/my_page_tab.dart:125:11 • unused_local_variable
   info • This class (or a class that this class inherits from) is marked as '@immutable', but one or more of its instance fields aren't final: _SliverAppBarTitle.username • lib/page_me/my_page_tab.dart:519:7 • must_be_immutable
   info • Unused import: 'dart:async' • lib/page_me/password_reset.dart:3:8 • unused_import
   info • Unused import: 'package:flushbar/flushbar.dart' • lib/page_me/password_reset.dart:5:8 • unused_import
   info • Unused import: 'package:flutter/services.dart' • lib/page_me/password_reset.dart:8:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/page_me/email_binding.dart' • lib/page_me/password_reset.dart:10:8 • unused_import
   info • Close instances of `dart.core.Sink` • lib/page_me/register_business_logic.dart:22:27 • close_sinks
   info • Close instances of `dart.core.Sink` • lib/page_me/register_business_logic.dart:40:20 • close_sinks
   info • Name non-constant identifiers using lowerCamelCase • lib/page_me/register_business_logic.dart:56:8 • non_constant_identifier_names
   info • The declaration '_handleRegisterError' isn't referenced • lib/page_me/register_business_logic.dart:163:8 • unused_element
   info • This function has a return type of 'Future<dynamic>', but doesn't end with a return statement • lib/page_me/reigister_api.dart:130:19 • missing_return
   info • This class (or a class that this class inherits from) is marked as '@immutable', but one or more of its instance fields aren't final: CountryPicker._selected, CountryPicker.countries • lib/page_me/rename/country_picker.dart:8:7 • must_be_immutable
   info • The value of the field '_selected' isn't used • lib/page_me/rename/country_picker.dart:9:10 • unused_field
   info • Unused import: 'package:ulu_platform_demo/widgets/back_button_custom.dart' • lib/page_me/rename/rename_page.dart:5:8 • unused_import
   info • This class (or a class that this class inherits from) is marked as '@immutable', but one or more of its instance fields aren't final: RenamePage._text • lib/page_me/rename/rename_page.dart:8:7 • must_be_immutable
   info • Unused import: 'package:ulu_platform_demo/page_me/binding_bloc.dart' • lib/page_me/security_page.dart:10:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/page_me/email_register.dart' • lib/page_me/security_page.dart:11:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/user_controller.dart' • lib/page_me/security_page.dart:14:8 • unused_import
   info • The value of the local variable 'lc' isn't used • lib/page_me/security_page.dart:28:11 • unused_local_variable
   info • 'showSnackBar' is deprecated and shouldn't be used. Use ScaffoldMessenger.showSnackBar. This feature was deprecated after v1.23.0-14.0.pre. • lib/page_me/security_page.dart:96:46 • deprecated_member_use
   info • 'showSnackBar' is deprecated and shouldn't be used. Use ScaffoldMessenger.showSnackBar. This feature was deprecated after v1.23.0-14.0.pre. • lib/page_me/security_page.dart:105:46 • deprecated_member_use
   info • 'showSnackBar' is deprecated and shouldn't be used. Use ScaffoldMessenger.showSnackBar. This feature was deprecated after v1.23.0-14.0.pre. • lib/page_me/security_page.dart:118:42 • deprecated_member_use
   info • 'FlatButton' is deprecated and shouldn't be used. Use TextButton instead. See the migration guide in flutter.dev/go/material-button-migration-guide). This feature was deprecated after v1.25.0-8.1.pre. • lib/page_me/security_page.dart:134:17 •
          deprecated_member_use
   info • Unused import: 'package:ulu_platform_demo/widgets/snack_bar.dart' • lib/page_me/setting.dart:9:8 • unused_import
   info • Unused import: 'package:url_launcher/url_launcher.dart' • lib/page_me/setting.dart:21:8 • unused_import
   info • The value of the local variable 'lc' isn't used • lib/page_me/setting.dart:112:11 • unused_local_variable
   info • Unused import: 'package:country_code_picker/country_code_picker.dart' • lib/page_me/user_center.dart:4:8 • unused_import
   info • Unused import: 'package:flushbar/flushbar.dart' • lib/page_me/user_center.dart:5:8 • unused_import
   info • Unused import: 'package:sign_in_with_apple/sign_in_with_apple.dart' • lib/page_me/user_center.dart:8:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/page_me/email_login.dart' • lib/page_me/user_center.dart:10:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/page_me/register_business_logic.dart' • lib/page_me/user_center.dart:15:8 • unused_import
   info • 'FlatButton' is deprecated and shouldn't be used. Use TextButton instead. See the migration guide in flutter.dev/go/material-button-migration-guide). This feature was deprecated after v1.25.0-8.1.pre. • lib/page_me/user_center.dart:133:21 •
          deprecated_member_use
   info • Unused import: 'package:cached_network_image/cached_network_image.dart' • lib/page_me/user_info.dart:4:8 • unused_import
   info • Unused import: 'package:country_code_picker/selection_dialog.dart' • lib/page_me/user_info.dart:5:8 • unused_import
   info • Unused import: 'package:flutter/gestures.dart' • lib/page_me/user_info.dart:7:8 • unused_import
   info • Unused import: 'package:intl/intl.dart' • lib/page_me/user_info.dart:11:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/page_me/change_avatar.dart' • lib/page_me/user_info.dart:16:8 • unused_import
   info • The value of the field '_nickname' isn't used • lib/page_me/user_info.dart:41:10 • unused_field
   info • The value of the field '_name' isn't used • lib/page_me/user_info.dart:42:10 • unused_field
   info • The value of the field '_birthday' isn't used • lib/page_me/user_info.dart:43:10 • unused_field
   info • The value of the field '_gender' isn't used • lib/page_me/user_info.dart:44:7 • unused_field
   info • The value of the field '_country' isn't used • lib/page_me/user_info.dart:45:10 • unused_field
   info • The value of the local variable 'lc' isn't used • lib/page_me/user_info.dart:55:11 • unused_local_variable
   info • This class (or a class that this class inherits from) is marked as '@immutable', but one or more of its instance fields aren't final: InfoPageInner.currentInfo, InfoPageInner.editing • lib/page_me/user_info.dart:117:7 • must_be_immutable
   info • The value of the field '_selected' isn't used • lib/page_me/user_info.dart:144:11 • unused_field
   info • The value of the field '_dateTime' isn't used • lib/page_me/user_info.dart:146:12 • unused_field
warning • The parameter 'onPressed' is required • lib/page_me/user_info.dart:266:19 • missing_required_param
warning • The parameter 'onPressed' is required • lib/page_me/user_info.dart:321:21 • missing_required_param
warning • The parameter 'onPressed' is required • lib/page_me/user_info.dart:419:23 • missing_required_param
warning • The parameter 'onPressed' is required • lib/page_me/user_info.dart:521:23 • missing_required_param
warning • The parameter 'onPressed' is required • lib/page_me/user_info.dart:574:23 • missing_required_param
   info • Avoid using braces in interpolation when not needed • lib/page_me/user_info.dart:600:41 • unnecessary_brace_in_string_interps
   info • Avoid using braces in interpolation when not needed • lib/page_me/user_info.dart:617:41 • unnecessary_brace_in_string_interps
   info • The value of the local variable 'params' isn't used • lib/page_me/user_info.dart:661:11 • unused_local_variable
   info • The value of the local variable 'header' isn't used • lib/page_me/user_info.dart:663:11 • unused_local_variable
   info • This function has a return type of 'FutureOr<bool>', but doesn't end with a return statement • lib/page_me/user_info.dart:672:16 • missing_return
   info • 'await' applied to 'void', which is not a 'Future' • lib/page_me/user_info.dart:682:5 • await_only_futures
   info • Unused import: 'package:provider/provider.dart' • lib/user_controller.dart:6:8 • unused_import
   info • Unused import: 'package:path/path.dart' • lib/user_controller.dart:15:8 • unused_import
   info • Duplicate import • lib/user_controller.dart:17:8 • duplicate_import
   info • Avoid using braces in interpolation when not needed • lib/user_controller.dart:39:29 • unnecessary_brace_in_string_interps
   info • Avoid using braces in interpolation when not needed • lib/user_controller.dart:65:19 • unnecessary_brace_in_string_interps
   info • Avoid using braces in interpolation when not needed • lib/user_controller.dart:65:38 • unnecessary_brace_in_string_interps
   info • 'await' applied to 'void', which is not a 'Future' • lib/user_controller.dart:89:7 • await_only_futures
   info • This method overrides a method annotated as '@mustCallSuper' in 'ChangeNotifier', but doesn't invoke the overridden method • lib/user_controller.dart:126:3 • must_call_super
   info • 'await' applied to 'void', which is not a 'Future' • lib/user_controller.dart:133:5 • await_only_futures
   info • Unused import: 'package:flutter/scheduler.dart' • lib/widgets/list_content_widget.dart:4:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/miscellaneous/notification_provider.dart' • lib/widgets/list_content_widget.dart:9:8 • unused_import
   info • Unused import: 'package:ulu_platform_demo/page_infos/backend/story_list_provider.dart' • lib/widgets/list_content_widget.dart:10:8 • unused_import
   info • Unused import: '../user_controller.dart' • lib/widgets/list_content_widget.dart:11:8 • unused_import
   info • Avoid using braces in interpolation when not needed • lib/widgets/list_content_widget.dart:80:61 • unnecessary_brace_in_string_interps
   info • This method overrides a method annotated as '@mustCallSuper' in 'AutomaticKeepAliveClientMixin', but doesn't invoke the overridden method • lib/widgets/list_content_widget.dart:95:10 • must_call_super
   info • The value of the local variable 'lc' isn't used • lib/widgets/list_content_widget.dart:99:11 • unused_local_variable
   info • Avoid using braces in interpolation when not needed • lib/widgets/list_content_widget.dart:134:53 • unnecessary_brace_in_string_interps
   info • The receiver uses '?.', so its value can be null • lib/widgets/list_content_widget.dart:135:13 • can_be_null_after_null_aware
   info • Unused import: 'package:flutter_html/style.dart' • lib/widgets/mini_button.dart:5:8 • unused_import
   info • This class (or a class that this class inherits from) is marked as '@immutable', but one or more of its instance fields aren't final: ULUNavigationBar.title, ULUNavigationBar.onBackButtonPressed, ULUNavigationBar.showleading,
          ULUNavigationBar.leadingImage, ULUNavigationBar.trailingWidget • lib/widgets/navigation_bar.dart:6:7 • must_be_immutable
   info • This class (or a class that this class inherits from) is marked as '@immutable', but one or more of its instance fields aren't final: Flushbar.onStatusChanged, Flushbar._flushbarRoute • lib/widgets/snack_bar.dart:5:7 • must_be_immutable
   info • Unused import: 'package:ulu_platform_demo/model/model_class.dart' • lib/widgets/update_notice.dart:6:8 • unused_import
   info • Unused import: 'package:url_launcher/url_launcher.dart' • lib/widgets/update_notice.dart:11:8 • unused_import
   info • The value of the local variable 'args' isn't used • lib/widgets/update_notice.dart:29:11 • unused_local_variable
warning • Publishable packages can't have git dependencies • pubspec.yaml:55:5 • invalid_dependency

392 issues found. (ran in 9.3s)

flutter doctor -v
[✓] Flutter (Channel stable, 2.0.2, on Mac OS X 10.15.7 19H524 darwin-x64, locale zh-Hans-CN)
    • Flutter version 2.0.2 at /Users/wangshuzhu/flutter
    • Framework revision 8962f6dc68 (8 days ago), 2021-03-11 13:22:20 -0800
    • Engine revision 5d8bf811b3
    • Dart version 2.12.1
    • Pub download mirror https://pub.flutter-io.cn
    • Flutter download mirror https://storage.flutter-io.cn

[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
    • Android SDK at /Users/wangshuzhu/Library/Android/sdk
    • Platform android-30, build-tools 30.0.3
    • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6915495)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 12.4, Build version 12D4e
    • CocoaPods version 1.10.0

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 4.1)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6915495)

[✓] VS Code (version 1.53.0)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.19.0

Hi @Oklahomawhore
Can you please provide your flutter doctor -v and a minimal complete reproducible code sample? It unclear from the steps listed above how to recreate the reproducible code for me.
Thank you

Hi @Oklahomawhore
Can you please provide your flutter doctor -v and a minimal complete reproducible code sample? It unclear from the steps listed above how to recreate the reproducible code for me.
Thank you

here's a main.dart file in a fresh created flutter project:

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        // This is the theme of your application.
        //
        // Try running your application with "flutter run". You'll see the
        // application has a blue toolbar. Then, without quitting the app, try
        // changing the primarySwatch below to Colors.green and then invoke
        // "hot reload" (press "r" in the console where you ran "flutter run",
        // or simply save your changes to "hot reload" in a Flutter IDE).
        // Notice that the counter didn't reset back to zero; the application
        // is not restarted.
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  // This widget is the home page of your application. It is stateful, meaning
  // that it has a State object (defined below) that contains fields that affect
  // how it looks.

  // This class is the configuration for the state. It holds the values (in this
  // case the title) provided by the parent (in this case the App widget) and
  // used by the build method of the State. Fields in a Widget subclass are
  // always marked "final".

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;
  GlobalKey _key = GlobalKey(debugLabel: 'center_header');

  void _incrementCounter() {
    setState(() {
      // This call to setState tells the Flutter framework that something has
      // changed in this State, which causes it to rerun the build method below
      // so that the display can reflect the updated values. If we changed
      // _counter without calling setState(), then the build method would not be
      // called again, and so nothing would appear to happen.
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    // This method is rerun every time setState is called, for instance as done
    // by the _incrementCounter method above.
    //
    // The Flutter framework has been optimized to make rerunning build methods
    // fast, so that you can just rebuild anything that needs updating rather
    // than having to individually change instances of widgets.
    return Scaffold(
      appBar: AppBar(
        // Here we take the value from the MyHomePage object that was created by
        // the App.build method, and use it to set our appbar title.
        title: Text(widget.title),
      ),
      body: CustomScrollView(
        center: _key,
        slivers: [

          CupertinoSliverRefreshControl(
            onRefresh: () {
              print('refreshed!');
              return Future.delayed(Duration(seconds: 2), () {
                print('refresh complete');
              });
            },
          ),
          SliverToBoxAdapter(
            child: Container(
              height: 60,
              child: Center(
                child: Text('aha the content'),
              ),
            ),
          ),
          SliverPersistentHeader(
            key: _key,
            delegate: CommentTitleHeader(
              'you go girl'

            ),
          ),
          SliverToBoxAdapter(
            child: Container(
              height: 60,
              child: Center(
                child: Text('aha the details'),
              ),
            ),
          ),
        ],
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ), // This trailing comma makes auto-formatting nicer for build methods.
    );
  }
}

class CommentTitleHeader extends SliverPersistentHeaderDelegate {

  String title;

  CommentTitleHeader(this.title);

  @override
  Widget build(BuildContext context, double shrinkOffset, bool overlapsContent) {
    return Container(
      decoration: BoxDecoration(
        border: Border(
            bottom: BorderSide(
                color: CupertinoTheme.of(context).barBackgroundColor,
                width: 0.5
            )
        ),
        color: Colors.white,
      ),
      alignment: Alignment.centerLeft,
      padding: const EdgeInsets.symmetric(horizontal: 20),
      height: 46,
      child: Text(title, style: TextStyle(color: Colors.black, fontWeight: FontWeight.w400, fontSize: 16.0),),
    );
  }

  @override
  double get maxExtent => 46.0;

  @override
  double get minExtent => 46.0;

  @override
  bool shouldRebuild(covariant CommentTitleHeader oldDelegate) {
    return false;
  }

}

it will create the same exception with CustomScrollView in the perfromLayout sequence:
Logs:

════════ Exception caught by rendering library ═════════════════════════════════════════════════════
The following assertion was thrown during performLayout():
'package:flutter/src/cupertino/refresh.dart': Failed assertion: line 110 pos 12: 'constraints.growthDirection == GrowthDirection.forward': is not true.

Either the assertion indicates an error in the framework itself, or we should provide substantially more information in this error message to help you determine and fix the underlying cause.
In either case, please report this assertion by filing a bug on GitHub:
  https://github.com/flutter/flutter/issues/new?template=2_bug.md

The relevant error-causing widget was:
  CupertinoSliverRefreshControl file:///Users/wangshuzhu/Documents/TestDemoProjects/center_with_customscrollview/center_with_customscrollview/lib/main.dart:82:11
When the exception was thrown, this was the stack:
#2      _RenderCupertinoSliverRefresh.performLayout (package:flutter/src/cupertino/refresh.dart:110:12)
#3      RenderObject.layout (package:flutter/src/rendering/object.dart:1784:7)
#4      RenderViewportBase.layoutChildSequence (package:flutter/src/rendering/viewport.dart:512:13)
#5      RenderViewport._attemptLayout (package:flutter/src/rendering/viewport.dart:1552:29)
#6      RenderViewport.performLayout (package:flutter/src/rendering/viewport.dart:1479:20)
...
The following RenderObject was being processed when the exception was fired: _RenderCupertinoSliverRefresh#54cd5 relayoutBoundary=up1 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
...  parentData: paintOffset=Offset(0.0, 0.0) (can use size)
...  constraints: SliverConstraints(AxisDirection.down, GrowthDirection.reverse, ScrollDirection.idle, scrollOffset: 0.0, remainingPaintExtent: 0.0, crossAxisExtent: 360.0, crossAxisDirection: AxisDirection.right, viewportMainAxisExtent: 612.0, remainingCacheExtent: 190.0, cacheOrigin: 0.0)
...  geometry: null
  child: _RenderLayoutBuilder#f241c NEEDS-LAYOUT NEEDS-PAINT
    parentData: <none>
    constraints: MISSING
    size: MISSING
RenderObject: _RenderCupertinoSliverRefresh#54cd5 relayoutBoundary=up1 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
  parentData: paintOffset=Offset(0.0, 0.0) (can use size)
  constraints: SliverConstraints(AxisDirection.down, GrowthDirection.reverse, ScrollDirection.idle, scrollOffset: 0.0, remainingPaintExtent: 0.0, crossAxisExtent: 360.0, crossAxisDirection: AxisDirection.right, viewportMainAxisExtent: 612.0, remainingCacheExtent: 190.0, cacheOrigin: 0.0)
  geometry: null
  child: _RenderLayoutBuilder#f241c NEEDS-LAYOUT NEEDS-PAINT
    parentData: <none>
    constraints: MISSING
    size: MISSING
════════════════════════════════════════════════════════════════════════════════════════════════════

════════ Exception caught by rendering library ═════════════════════════════════════════════════════
Null check operator used on a null value
The relevant error-causing widget was:
  CustomScrollView file:///Users/wangshuzhu/Documents/TestDemoProjects/center_with_customscrollview/center_with_customscrollview/lib/main.dart:78:13
════════════════════════════════════════════════════════════════════════════════════════════════════

════════ Exception caught by rendering library ═════════════════════════════════════════════════════
Null check operator used on a null value
The relevant error-causing widget was:
  CustomScrollView file:///Users/wangshuzhu/Documents/TestDemoProjects/center_with_customscrollview/center_with_customscrollview/lib/main.dart:78:13
════════════════════════════════════════════════════════════════════════════════════════════════════

════════ Exception caught by scheduler library ═════════════════════════════════════════════════════
Null check operator used on a null value
════════════════════════════════════════════════════════════════════════════════════════════════════

════════ Exception caught by Flutter framework ═════════════════════════════════════════════════════
The following StateError was thrown while executing callbacks for FrameTiming:
Bad state: Future already completed

When the exception was thrown, this was the stack:
#1      WidgetsBinding.drawFrame.<anonymous closure> (package:flutter/src/widgets/binding.dart:863:30)
#2      SchedulerBinding._executeTimingsCallbacks (package:flutter/src/scheduler/binding.dart:289:19)
#6      _invoke1 (dart:ui/hooks.dart:180:10)
#7      PlatformDispatcher._reportTimings (dart:ui/platform_dispatcher.dart:378:5)
#8      _reportTimings (dart:ui/hooks.dart:114:31)
...
The TimingsCallback that gets executed was: Closure: (List<FrameTiming>) => void
════════════════════════════════════════════════════════════════════════════════════════════════════

════════ Exception caught by rendering library ═════════════════════════════════════════════════════
'package:flutter/src/cupertino/refresh.dart': Failed assertion: line 110 pos 12: 'constraints.growthDirection == GrowthDirection.forward': is not true.
The relevant error-causing widget was:
  CupertinoSliverRefreshControl file:///Users/wangshuzhu/Documents/TestDemoProjects/center_with_customscrollview/center_with_customscrollview/lib/main.dart:82:11
The following RenderObject was being processed when the exception was fired: _RenderCupertinoSliverRefresh#54cd5 relayoutBoundary=up1 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
  parentData: paintOffset=Offset(0.0, 0.0) (can use size)
  constraints: SliverConstraints(AxisDirection.down, GrowthDirection.reverse, ScrollDirection.idle, scrollOffset: 0.0, remainingPaintExtent: 0.0, crossAxisExtent: 360.0, crossAxisDirection: AxisDirection.right, viewportMainAxisExtent: 612.0, remainingCacheExtent: 190.0, cacheOrigin: 0.0)
  geometry: null
  child: _RenderLayoutBuilder#f241c NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
    parentData: <none>
    constraints: MISSING
    size: MISSING
RenderObject: _RenderCupertinoSliverRefresh#54cd5 relayoutBoundary=up1 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
  parentData: paintOffset=Offset(0.0, 0.0) (can use size)
  constraints: SliverConstraints(AxisDirection.down, GrowthDirection.reverse, ScrollDirection.idle, scrollOffset: 0.0, remainingPaintExtent: 0.0, crossAxisExtent: 360.0, crossAxisDirection: AxisDirection.right, viewportMainAxisExtent: 612.0, remainingCacheExtent: 190.0, cacheOrigin: 0.0)
  geometry: null
  child: _RenderLayoutBuilder#f241c NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
    parentData: <none>
    constraints: MISSING
    size: MISSING
════════════════════════════════════════════════════════════════════════════════════════════════════

════════ Exception caught by rendering library ═════════════════════════════════════════════════════
Null check operator used on a null value
The relevant error-causing widget was:
  CustomScrollView file:///Users/wangshuzhu/Documents/TestDemoProjects/center_with_customscrollview/center_with_customscrollview/lib/main.dart:78:13
════════════════════════════════════════════════════════════════════════════════════════════════════

════════ Exception caught by rendering library ═════════════════════════════════════════════════════
Null check operator used on a null value
The relevant error-causing widget was:
  CustomScrollView file:///Users/wangshuzhu/Documents/TestDemoProjects/center_with_customscrollview/center_with_customscrollview/lib/main.dart:78:13
════════════════════════════════════════════════════════════════════════════════════════════════════

Flutter doctor -v
```
[✓] Flutter (Channel stable, 2.0.2, on Mac OS X 10.15.7 19H524 darwin-x64, locale zh-Hans-CN)
    • Flutter version 2.0.2 at /Users/wangshuzhu/flutter
    • Framework revision 8962f6dc68 (8 days ago), 2021-03-11 13:22:20 -0800
    • Engine revision 5d8bf811b3
    • Dart version 2.12.1
    • Pub download mirror https://pub.flutter-io.cn
    • Flutter download mirror https://storage.flutter-io.cn
[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
• Android SDK at /Users/wangshuzhu/Library/Android/sdk
• Platform android-30, build-tools 30.0.3
• Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
• Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6915495)
• All Android licenses accepted.
[✓] Xcode - develop for iOS and macOS
• Xcode at /Applications/Xcode.app/Contents/Developer
• Xcode 12.4, Build version 12D4e
• CocoaPods version 1.10.0
[✓] Chrome - develop for the web
• Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
[✓] Android Studio (version 4.1)
• Android Studio at /Applications/Android Studio.app/Contents
• Flutter plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/9212-flutter
• Dart plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/6351-dart
• Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6915495)
[✓] VS Code (version 1.53.0)
• VS Code at /Applications/Visual Studio Code.app/Contents
• Flutter extension version 3.19.0
</details>

I think the center property makes widgets before the  centered sliver GrowthDirection.reverse
flutter/lib/src/widgets/viewport.dart:119
/// The first child in the [GrowthDirection.forward] growth direction.
  ///
  /// Children after [center] will be placed in the [axisDirection] relative to
  /// the [center]. Children before [center] will be placed in the opposite of
  /// the [axisDirection] relative to the [center].
  ///
  /// The [center] must be the key of a child of the viewport.
  final Key? center;

but
it's conflicting with this assertion in
flutter/lib/src/cupertino/refresh.dart:110
final SliverConstraints constraints = this.constraints;
    // Only pulling to refresh from the top is currently supported.
    assert(constraints.axisDirection == AxisDirection.down);
    assert(constraints.growthDirection == GrowthDirection.forward);

I guess it's what the comment states it does not allow pulling from bottom,
but I don't know why.

flutter doctor -v
[✓] Flutter (Channel stable, 2.0.2, on macOS 11.2.3 20D91 darwin-x64, locale en-AO)
    • Flutter version 2.0.2 at /Users/pedromassango/Code/flutter_stable
    • Framework revision 8962f6dc68 (7 days ago), 2021-03-11 13:22:20 -0800
    • Engine revision 5d8bf811b3
    • Dart version 2.12.1

[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.2)
    • Android SDK at /Users/pedromassango/Library/Android/sdk
    • Platform android-30, build-tools 30.0.2
    • ANDROID_HOME = /Users/pedromassango/Library/Android/sdk
    • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6915495)
    • All Android licenses accepted.

[!] Xcode - develop for iOS and macOS
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 12.4, Build version 12D4e
    ! CocoaPods 1.9.3 out of date (1.10.0 is recommended).
        CocoaPods is used to retrieve the iOS and macOS platform side's plugin code that responds to your plugin usage on the Dart side.
        Without CocoaPods, plugins will not work on iOS or macOS.
        For more info, see https://flutter.dev/platform-plugins
      To upgrade see https://guides.cocoapods.org/using/getting-started.html#installation for instructions.

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 4.1)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6915495)

[✓] IntelliJ IDEA Community Edition (version 2020.3.2)
    • IntelliJ at /Applications/IntelliJ IDEA CE.app
    • Flutter plugin version 54.0.3
    • Dart plugin version 203.7759

[✓] VS Code (version 1.54.3)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.16.0

[✓] Connected device (2 available)
    • macOS (desktop) • macos  • darwin-x64     • macOS 11.2.3 20D91 darwin-x64
    • Chrome (web)    • chrome • web-javascript • Google Chrome 89.0.4389.90

! Doctor found issues in 1 category.

Issue is still reproducible in latest stable and master channels.
Logs
══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════
The following assertion was thrown during performLayout():
'package:flutter/src/cupertino/refresh.dart': Failed assertion: line 110 pos 12:
'constraints.growthDirection == GrowthDirection.forward': is not true.

Either the assertion indicates an error in the framework itself, or we should provide substantially
more information in this error message to help you determine and fix the underlying cause.
In either case, please report this assertion by filing a bug on GitHub:
  https://github.com/flutter/flutter/issues/new?template=2_bug.md

The relevant error-causing widget was:
  CupertinoSliverRefreshControl
  CupertinoSliverRefreshControl:file:///Users/nabeelparkar/dev/nevercode/issue_78602/lib/main.dart:36:11

When the exception was thrown, this was the stack:
#2      _RenderCupertinoSliverRefresh.performLayout (package:flutter/src/cupertino/refresh.dart:110:12)
#3      RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#4      RenderViewportBase.layoutChildSequence (package:flutter/src/rendering/viewport.dart:510:13)
#5      RenderViewport._attemptLayout (package:flutter/src/rendering/viewport.dart:1562:29)
#6      RenderViewport.performLayout (package:flutter/src/rendering/viewport.dart:1489:20)
#7      RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#8      RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#9      RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#10     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#11     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#12     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#13     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#14     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#15     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#16     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#17     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#18     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#19     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#20     MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:171:12)
#21     _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:1003:7)
#22     MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:240:7)
#23     RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:403:14)
#24     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#25     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#26     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#27     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#28     _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1376:11)
#29     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#30     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#31     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#32     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#33     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#34     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#35     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#36     ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:56:11)
#37     RenderStack._computeSize (package:flutter/src/rendering/stack.dart:552:43)
#38     RenderStack.performLayout (package:flutter/src/rendering/stack.dart:579:12)
#39     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#40     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#41     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#42     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#43     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#44     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#45     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#46     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#47     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#48     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#49     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#50     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#51     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#52     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#53     RenderOffstage.performLayout (package:flutter/src/rendering/proxy_box.dart:3462:13)
#54     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#55     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#56     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#57     _RenderTheatre.performLayout (package:flutter/src/widgets/overlay.dart:749:15)
#58     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#59     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#60     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#61     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#62     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#63     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#64     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#65     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#66     RenderCustomPaint.performLayout (package:flutter/src/rendering/custom_paint.dart:545:11)
#67     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#68     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#69     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#70     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#71     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#72     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#73     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#74     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#75     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#76     RenderView.performLayout (package:flutter/src/rendering/view.dart:165:14)
#77     RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:1757:7)
#78     PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:887:18)
#79     RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:504:19)
#80     WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:892:13)
#81     RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:370:5)
#82     SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1146:15)
#83     SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1083:9)
#84     SchedulerBinding.scheduleWarmUpFrame.<anonymous closure> (package:flutter/src/scheduler/binding.dart:864:7)
(elided 13 frames from class _AssertionError, class _RawReceivePortImpl, class _Timer, dart:async, and dart:async-patch)

The following RenderObject was being processed when the exception was fired: _RenderCupertinoSliverRefresh#c58f8 relayoutBoundary=up1 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE:
  creator: _CupertinoSliverRefresh ← CupertinoSliverRefreshControl ← Viewport ←
    IgnorePointer-[GlobalKey#d01c0] ← Semantics ← Listener ← _GestureSemantics ←
    RawGestureDetector-[LabeledGlobalKey<RawGestureDetectorState>#4f53f] ← Listener ← _ScrollableScope
    ← _ScrollSemantics-[GlobalKey#38f46] ← NotificationListener<ScrollMetricsNotification> ← ⋯
  parentData: paintOffset=Offset(0.0, 0.0) (can use size)
  constraints: SliverConstraints(AxisDirection.down, GrowthDirection.reverse, ScrollDirection.idle,
    scrollOffset: 0.0, remainingPaintExtent: 0.0, crossAxisExtent: 428.0, crossAxisDirection:
    AxisDirection.right, viewportMainAxisExtent: 926.0, remainingCacheExtent: 190.0, cacheOrigin: 0.0)
  geometry: null
This RenderObject had the following child:
    child: _RenderLayoutBuilder#891b4 NEEDS-LAYOUT NEEDS-PAINT
════════════════════════════════════════════════════════════════════════════════════════════════════

Code sample
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: 'Flutter Demo',
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key}) : super(key: key);

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final GlobalKey _key = GlobalKey();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: CustomScrollView(
        center: _key,
        slivers: [
          CupertinoSliverRefreshControl(
            onRefresh: () {
              print('refreshed!');
              return Future.delayed(const Duration(seconds: 2), () {
                print('refresh complete');
              });
            },
          ),
          const SliverToBoxAdapter(
            child: SizedBox(
              height: 60,
              child: Center(
                child: Text('aha the content'),
              ),
            ),
          ),
          SliverPersistentHeader(
            key: _key,
            delegate: CommentTitleHeader('you go girl'),
          ),
          const SliverToBoxAdapter(
            child: SizedBox(
              height: 60,
              child: Center(
                child: Text('aha the details'),
              ),
            ),
          ),
        ],
      ),
    );
  }
}

class CommentTitleHeader extends SliverPersistentHeaderDelegate {
  String title;

  CommentTitleHeader(this.title);

  @override
  Widget build(
      BuildContext context, double shrinkOffset, bool overlapsContent) {
    return Container(
      alignment: Alignment.centerLeft,
      padding: const EdgeInsets.symmetric(horizontal: 20),
      height: 46,
      child: Text(
        title,
        style: const TextStyle(
            color: Colors.black, fontWeight: FontWeight.w400, fontSize: 16.0),
      ),
    );
  }

  @override
  double get maxExtent => 46.0;

  @override
  double get minExtent => 46.0;

  @override
  bool shouldRebuild(covariant CommentTitleHeader oldDelegate) {
    return false;
  }
}

flutter doctor -v (Stable)
[✓] Flutter (Channel stable, 3.0.0, on macOS 12.3.1 21E258 darwin-arm, locale en-US)
    • Flutter version 3.0.0 at /Users/nabeelparkar/fvm/versions/stable
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision ee4e09cce0 (7 days ago), 2022-05-09 16:45:18 -0700
    • Engine revision d1b9a6938a
    • Dart version 2.17.0
    • DevTools version 2.12.2

[✓] Android toolchain - develop for Android devices (Android SDK version 32.1.0-rc1)
    • Android SDK at /Users/nabeelparkar/Library/Android/sdk/
    • Platform android-32, build-tools 32.1.0-rc1
    • ANDROID_SDK_ROOT = /Users/nabeelparkar/Library/Android/sdk/
    • Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 13.3.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • CocoaPods version 1.11.3

[✓] Chrome - develop for the web
    • CHROME_EXECUTABLE = /Applications/Brave Browser.app/Contents/MacOS/Brave Browser

[✓] Android Studio (version 2021.2)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840)

[✓] IntelliJ IDEA Ultimate Edition (version 2022.1.1)
    • IntelliJ at /Applications/IntelliJ IDEA.app
    • Flutter plugin version 67.1.4
    • Dart plugin version 221.5591.52

[✓] VS Code (version 1.67.1)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.40.0

[✓] Connected device (2 available)
    • macOS (desktop) • macos  • darwin-arm64   • macOS 12.3.1 21E258 darwin-arm
    • Chrome (web)    • chrome • web-javascript • Brave Browser <IP_ADDRESS>

[✓] HTTP Host Availability
    • All required HTTP hosts are available

• No issues found!

flutter doctor -v (Master)
[✓] Flutter (Channel master, 3.1.0-0.0.pre.799, on macOS 12.3.1 21E258 darwin-arm, locale en-US)
    • Flutter version 3.1.0-0.0.pre.799 at /Users/nabeelparkar/fvm/versions/master
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 348a2b4f2f (2 hours ago), 2022-05-19 00:33:08 -0400
    • Engine revision 1965c92ea4
    • Dart version 2.18.0 (build 2.18.0-130.0.dev)
    • DevTools version 2.13.1

[✓] Android toolchain - develop for Android devices (Android SDK version 32.1.0-rc1)
    • Android SDK at /Users/nabeelparkar/Library/Android/sdk/
    • Platform android-32, build-tools 32.1.0-rc1
    • ANDROID_SDK_ROOT = /Users/nabeelparkar/Library/Android/sdk/
    • Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 13.4)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • CocoaPods version 1.11.3

[✓] Chrome - develop for the web
    • CHROME_EXECUTABLE = /Applications/Brave Browser.app/Contents/MacOS/Brave Browser

[✓] Android Studio (version 2021.2)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840)

[✓] IntelliJ IDEA Ultimate Edition (version 2022.1.1)
    • IntelliJ at /Applications/IntelliJ IDEA.app
    • Flutter plugin version 67.1.4
    • Dart plugin version 221.5591.52

[✓] VS Code (version 1.67.1)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.40.0

[✓] Connected device (4 available)
    • V2050 (mobile)            •<PHONE_NUMBER>000NM • android-arm64  • Android 12 (API 31)
    • sdk gphone arm64 (mobile) • emulator-5554   • android-arm64  • Android 11 (API 30) (emulator)
    • macOS (desktop)           • macos           • darwin-arm64   • macOS 12.3.1 21E258 darwin-arm
    • Chrome (web)              • chrome          • web-javascript • Brave Browser <IP_ADDRESS>

[✓] HTTP Host Availability
    • All required HTTP hosts are available

• No issues found!


Move WebGLConstants from Renderer to Core

Justification:
Currently we use WebGLConstants in Core (ComponentDataType, IndexDataType, PixelFormat, PrimitiveType, ...), but WebGLConstants lives in Renderer. Moving WebGLConstants to Core makes Core completely self contained with no dependencies on the rest of Cesium.
This PR also makes WebGLConstants public and updates the reference doc for it. We use WebGLConstants as part of the Cesium API in gltf-pipeline, so this seemed appropriate.
There were also a few members missing @memberof declarations in other modules which were being added to global in the doc, so this corrects those as well.

@lasalvavida this is perfect, just one request: for maintenance and conciseness, it is perfectly OK to not document each individual enum vale in this case; instead, the reference doc for WebGLConstants can say that these match the WebGL spec constants and provide a link to the WebGL 1 and WebGL 2 specs.

@lasalvavida this is perfect, just one request: for maintenance and conciseness, it is perfectly OK to not document each individual enum vale in this case; instead, the reference doc for WebGLConstants can say that these match the WebGL spec constants and provide a link to the WebGL 1 and WebGL 2 specs.

Okay. I need to see if I can make jsdoc hide the description column here for this. I added the comment because having a completely empty column looked a bit odd.

This is updated removing the per entry comments and I've added links to the WebGL 1.0 and 2.0 specifications. I can't find a good way to hide the description column, so it is still there currently. Let me know if there are any other changes you would like to see, otherwise this is good to go.

Thanks @lasalvavida!