Skip to main content

Custom Aspect Ratio for VideoView

This guide shows how to force a specific aspect ratio for VideoView widgets in your Flutter app. This works consistently on both iOS and Android.

The Problem​

By default, VideoView expands to fill its parent container. If you need a specific aspect ratio (like 1:1 for square videos), you need to constrain it using Flutter's layout widgets.

Solution​

Wrap VideoView in an AspectRatio widget and use ClipRRect to clip any overflow.

Self Video (1:1)​

AspectRatio(
aspectRatio: 1.0, // 1:1 square
child: ClipRRect(
borderRadius: BorderRadius.circular(12),
child: Container(
color: Colors.black,
child: const VideoView(isSelfParticipant: true),
),
),
)

Remote Participant Video (1:1)​

AspectRatio(
aspectRatio: 1.0,
child: ClipRRect(
borderRadius: BorderRadius.circular(12),
child: Container(
color: Colors.black,
child: VideoView(meetingParticipant: participant),
),
),
)

Grid of Participants (1:1 tiles)​

Use childAspectRatio in GridView:

GridView.builder(
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
crossAxisSpacing: 8,
mainAxisSpacing: 8,
childAspectRatio: 1.0, // 1:1 aspect ratio
),
itemCount: participants.length,
itemBuilder: (context, index) {
final participant = participants[index];
return ClipRRect(
borderRadius: BorderRadius.circular(12),
child: Container(
color: Colors.black,
child: VideoView(
key: ValueKey(participant.id),
meetingParticipant: participant,
),
),
);
},
)

Other Aspect Ratios​

RatioValue
1:1 (Square)1.0
16:9 (Landscape)16 / 9
9:16 (Portrait)9 / 16
4:34 / 3
// Example: 16:9 aspect ratio
AspectRatio(
aspectRatio: 16 / 9,
child: ClipRRect(
child: VideoView(isSelfParticipant: true),
),
)

Key Points​

  • AspectRatio constrains the child to the specified ratio
  • ClipRRect clips overflow and optionally adds rounded corners
  • Container with color: Colors.black provides a background for letterboxing
  • ValueKey on VideoView ensures proper widget recycling in lists

This approach works identically on iOS and Android.