51 lines
1.3 KiB
Dart
51 lines
1.3 KiB
Dart
|
import 'package:flutter/material.dart';
|
||
|
|
||
|
enum FocusPage { FIRST, SECOND }
|
||
|
|
||
|
class AdaptivePageLayout extends StatelessWidget {
|
||
|
final Widget firstScaffold;
|
||
|
final Widget secondScaffold;
|
||
|
final FocusPage primaryPage;
|
||
|
final double minWidth;
|
||
|
|
||
|
static const double defaultMinWidth = 400;
|
||
|
static bool columnMode(BuildContext context) =>
|
||
|
MediaQuery.of(context).size.width > 2 * defaultMinWidth;
|
||
|
|
||
|
AdaptivePageLayout(
|
||
|
{this.firstScaffold,
|
||
|
this.secondScaffold,
|
||
|
this.primaryPage = FocusPage.FIRST,
|
||
|
this.minWidth = defaultMinWidth,
|
||
|
Key key})
|
||
|
: super(key: key);
|
||
|
|
||
|
@override
|
||
|
Widget build(BuildContext context) {
|
||
|
return OrientationBuilder(builder: (context, orientation) {
|
||
|
if (orientation == Orientation.portrait ||
|
||
|
columnMode(context)) if (primaryPage == FocusPage.FIRST)
|
||
|
return firstScaffold;
|
||
|
else
|
||
|
return secondScaffold;
|
||
|
return Row(
|
||
|
children: <Widget>[
|
||
|
Container(
|
||
|
width: minWidth,
|
||
|
child: firstScaffold,
|
||
|
),
|
||
|
Container(
|
||
|
width: 1,
|
||
|
color: Color(0xFFE8E8E8),
|
||
|
),
|
||
|
Expanded(
|
||
|
child: Container(
|
||
|
child: secondScaffold,
|
||
|
),
|
||
|
)
|
||
|
],
|
||
|
);
|
||
|
});
|
||
|
}
|
||
|
}
|