Exo*_*uid 5 dart flutter flutter-layout flutter-listview flutter-scrollbar
我正在使用scrollable_positioned_list包,并让它渲染一个大的动态列表。它运作得很好。但是,我需要我的列表有一个滚动条(类似这样)。到目前为止,这是不可能的。
\n有谁知道该怎么做?
\n我的代码如下所示:
\nScrollbar(\n child: ScrollablePositionedList.builder(\n physics: const ClampingScrollPhysics(\n parent: AlwaysScrollableScrollPhysics(),\n ),\n itemCount: posts.length + 1,\n itemBuilder: (context, index) {\n if (index == 0) {\n return Container(\n height: 200,\n color: Colors.green,\n child: const Center(\n child: Text(\'post content\'),\n ),\n );\n } else if (posts[index - 1].isRoot) {\n return Container(\n padding: const EdgeInsets.symmetric(vertical: 15),\n margin: const EdgeInsets.symmetric(vertical: 5),\n color: Colors.redAccent,\n child: Text(\'ROOT COMMENT, index: ${index - 1}\'),\n );\n } else {\n return Container(\n padding: const EdgeInsets.symmetric(vertical: 15),\n margin: const EdgeInsets.symmetric(vertical: 5),\n color: Colors.lightBlueAccent,\n child: Text(\'Threaded comment, index: ${index - 1}\'),\n );\n }\n },\n itemScrollController: itemScrollController,\n itemPositionsListener: itemPositionsListener,\n ),\n ),\nRun Code Online (Sandbox Code Playgroud)\n我意识到ScrollBar需要与它所包装的滚动视图相同ScrollController,但是,我不确定如何获得它,因为ScrollablePositionedList没有ScrollController.
使用提供的解决方案运行项目后,我的终端出现错误(其中的一小段):
\nPerforming hot restart... \n../../tools/flutter/.pub-cache/git/flutter.widgets-6\nd6dac5f19b577338d912d3c9a45d26593e0a475/packages/scr\nollable_positioned_list/lib/src/scrollable_positione\nd_list.dart:437:24: Warning: Operand of null-aware\noperation \'!\' has type \'SchedulerBinding\' which\nexcludes null.\nPerforming hot restart... \n - \'SchedulerBinding\' is from\n \'package:flutter/src/scheduler/binding.dart\'\n (\'../../tools/flutter/packages/flutter/lib/src/sche\n duler/binding.dart\').\nPerforming hot restart... \n SchedulerBinding.instance!.addPostFrameCallbac\n k((_) {\nPerforming hot restart... \n ^\nPerforming hot restart... \n../../tools/flutter/.pub-cache/git/flutter.widgets-6\nd6dac5f19b577338d912d3c9a45d26593e0a475/packages/scr\nollable_positioned_list/lib/src/scrollable_positione\nd_list.dart:484:26: Warning: Operand of null-aware\noperation \'!\' has type \'SchedulerBinding\' which\nexcludes null.\nPerforming hot restart... \n - \'SchedulerBinding\' is from\n \'package:flutter/src/scheduler/binding.dart\'\n (\'../../tools/flutter/packages/flutter/lib/src/sche\n duler/binding.dart\').\nPerforming hot restart... \n SchedulerBinding.instance!.addPostFrameCallb\n ack((_) {\nPerforming hot restart... \n ^\nPerforming hot restart... \n../../tools/flutter/.pub-cache/git/flutter.widgets-6\nd6dac5f19b577338d912d3c9a45d26593e0a475/packages/scr\nollable_positioned_list/lib/src/positioned_list.dart\n:298:24: Warning: Operand of null-aware operation\n\'!\' has type \'SchedulerBinding\' which excludes null.\nPerforming hot restart... \n - \'SchedulerBinding\' is from\n \'package:flutter/src/scheduler/binding.dart\'\n (\'../../tools/flutter/packages/flutter/lib/src/sche\n duler/binding.dart\').\nPerforming hot restart... \n SchedulerBinding.instance!.addPostFrameCallbac\n k((_) {\nPerforming hot restart... \n ^\nPerforming hot restart... \nRestarted application in 195ms.\nRun Code Online (Sandbox Code Playgroud)\n修复警告(回复评论)后,现在使用它时会随机发生:
\nThe following assertion was thrown while notifying status listeners for AnimationController:\nThe Scrollbar\'s ScrollController has no ScrollPosition attached.\nA Scrollbar cannot be painted without a ScrollPosition.\nThe Scrollbar attempted to use the provided ScrollController. This ScrollController should be\nassociated with the ScrollView that the Scrollbar is being applied to. When providing your\nown\nScrollController, ensure both the Scrollbar and the Scrollable widget use the same one.\n\nWhen the exception was thrown, this was the stack:\n#0 RawScrollbarState._debugCheckHasValidScrollPosition.<anonymous closure>\n(package:flutter/src/widgets/scrollbar.dart:1475:9)\n#1 RawScrollbarState._debugCheckHasValidScrollPosition\n(package:flutter/src/widgets/scrollbar.dart:1500:6)\n#2 RawScrollbarState._validateInteractions\n(package:flutter/src/widgets/scrollbar.dart:1445:14)\n#3 AnimationLocalStatusListenersMixin.notifyStatusListeners\n(package:flutter/src/animation/listener_helpers.dart:233:19)\n#4 AnimationController._checkStatusChanged\n(package:flutter/src/animation/animation_controller.dart:815:7)\n#5 AnimationController._startSimulation\n(package:flutter/src/animation/animation_controller.dart:749:5)\n#6 AnimationController._animateToInternal\n(package:flutter/src/animation/animation_controller.dart:612:12)\n#7 AnimationController.reverse\n(package:flutter/src/animation/animation_controller.dart:494:12)\n#8 RawScrollbarState._maybeStartFadeoutTimer.<anonymous closure>\n(package:flutter/src/widgets/scrollbar.dart:1630:37)\n(elided 11 frames from class _RawReceivePortImpl, class _Timer, dart:async, and\ndart:async-patch)\n\nThe AnimationController notifying status listeners was:\n AnimationController#72402(\xe2\x97\x80 1.000)\nRun Code Online (Sandbox Code Playgroud)\n
用一个ScrollConfiguration:
void main(List<String> args) {
runApp(
MaterialApp(
home: Scaffold(
appBar: AppBar(),
body: ScrollConfiguration(
behavior: _ScrollbarBehavior(),
child: ScrollablePositionedList.builder(
itemCount: 100,
itemBuilder: (context, index) => ListTile(title: Text('$index')),
),
),
),
),
);
}
class _ScrollbarBehavior extends ScrollBehavior {
@override
Widget buildScrollbar(BuildContext context, Widget child, ScrollableDetails details) {
return Scrollbar(child: child, controller: details.controller);
}
}
Run Code Online (Sandbox Code Playgroud)
你可以修改,但bug应用时仍然有一些ScrollController
尝试一些来自issue#305的替代方案,它不够好,但你可以应用它。
final ItemScrollController itemSctr = ItemScrollController();
...
body: Scrollbar(
controller: itemSctr.scrollController,
child: ScrollablePositionedList.builder(
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1732 次 |
| 最近记录: |