0
投反对票
class _ConferenceScaffoldState extends CommonScaffoldState<ConferenceScaffold> with TickerProviderStateMixin {
final ScrollController controller = ScrollController();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(conference_title),
centerTitle: true,
),
body: getBody(),
);
}
Widget getBody() {
return ListView(
controller: controller,
children: <Widget>[buildHeaderRow(), buildPagerRow()],
);
}
Widget buildPagerRow() => _EventSpeakerPager(scrollCallback);
scrollCallback(double position) => controller.position.jumpTo(controller.position.pixels - position);
@override
void dispose() {
controller.dispose();
super.dispose();
}
}
typedef ScrollCallback = void Function(double position);
class _EventSpeakerPager extends StatefulWidget {
_EventSpeakerPager(this.callback);
final ScrollCallback callback;
@override
State<StatefulWidget> createState() => _EventSpeakerPagerState();
}
class _EventSpeakerPagerState extends CommonListState<_EventSpeakerPager> with SingleTickerProviderStateMixin {
final GlobalKey tabKey = GlobalKey();
@override
Widget build(BuildContext context) {
ListView eventList = ListView.builder(
controller: ScrollController(),
itemBuilder: (buildContext, position) {
if (position.isOdd) return CommonDivider();
return buildEventRow(getEventList()[position ~/ 2], false, null);
},
itemCount: getEventList().length * 2,
);
return Listener(
onPointerMove: (event) {
double pixels = eventList.controller.position.pixels;
if (event.delta.dy > 0.0 && pixels == 0.0) widget.callback(event.delta.dy);
},
child: ...,
);
}
}