provider selector syntax sugar

This commit is contained in:
Thibault Deckers 2020-05-08 10:37:29 +09:00
parent a6409a3956
commit 9bd9332ae6

View file

@ -97,61 +97,57 @@ class VideoControlOverlayState extends State<VideoControlOverlay> with SingleTic
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Selector<MediaQueryData, Tuple3<double, EdgeInsets, EdgeInsets>>( final mq = context.select((MediaQueryData mq) => Tuple3(mq.size.width, mq.viewInsets, mq.viewPadding));
selector: (c, mq) => Tuple3(mq.size.width, mq.viewInsets, mq.viewPadding), final mqWidth = mq.item1;
builder: (c, mq, child) { final mqViewInsets = mq.item2;
final mqWidth = mq.item1; final mqViewPadding = mq.item3;
final mqViewInsets = mq.item2;
final mqViewPadding = mq.item3;
final viewInsets = widget.viewInsets ?? mqViewInsets; final viewInsets = widget.viewInsets ?? mqViewInsets;
final viewPadding = widget.viewPadding ?? mqViewPadding; final viewPadding = widget.viewPadding ?? mqViewPadding;
final safePadding = (viewInsets + viewPadding).copyWith(bottom: 8) + const EdgeInsets.symmetric(horizontal: 8.0); final safePadding = (viewInsets + viewPadding).copyWith(bottom: 8) + const EdgeInsets.symmetric(horizontal: 8.0);
return Padding( return Padding(
padding: safePadding, padding: safePadding,
child: SizedBox( child: SizedBox(
width: mqWidth - safePadding.horizontal, width: mqWidth - safePadding.horizontal,
child: StreamBuilder<IjkStatus>( child: StreamBuilder<IjkStatus>(
stream: controller.ijkStatusStream, stream: controller.ijkStatusStream,
builder: (context, snapshot) { builder: (context, snapshot) {
// do not use stream snapshot because it is obsolete when switching between videos // do not use stream snapshot because it is obsolete when switching between videos
final status = controller.ijkStatus; final status = controller.ijkStatus;
return Row( return Row(
mainAxisAlignment: MainAxisAlignment.end, mainAxisAlignment: MainAxisAlignment.end,
children: status == IjkStatus.error children: status == IjkStatus.error
? [ ? [
OverlayButton( OverlayButton(
scale: scale, scale: scale,
child: IconButton( child: IconButton(
icon: const Icon(OMIcons.openInNew), icon: const Icon(OMIcons.openInNew),
onPressed: () => AndroidAppService.open(entry.uri, entry.mimeTypeAnySubtype), onPressed: () => AndroidAppService.open(entry.uri, entry.mimeTypeAnySubtype),
tooltip: 'Open', tooltip: 'Open',
), ),
),
]
: [
Expanded(
child: _buildProgressBar(),
),
const SizedBox(width: 8),
OverlayButton(
scale: scale,
child: IconButton(
icon: AnimatedIcon(
icon: AnimatedIcons.play_pause,
progress: _playPauseAnimation,
), ),
] onPressed: _playPause,
: [ tooltip: isPlaying ? 'Pause' : 'Play',
Expanded( ),
child: _buildProgressBar(), ),
), ],
const SizedBox(width: 8), );
OverlayButton( }),
scale: scale, ),
child: IconButton(
icon: AnimatedIcon(
icon: AnimatedIcons.play_pause,
progress: _playPauseAnimation,
),
onPressed: _playPause,
tooltip: isPlaying ? 'Pause' : 'Play',
),
),
],
);
}),
),
);
},
); );
} }