Reputation: 1
I tried some plugins also for responsive this app screen.But it doesn't worked.How to create this responsive with mediaquery ? Does mediaquery is enough for this ?
Upvotes: 0
Views: 1639
Reputation: 2658
You can also use LayoutBuilder
to return widget based on screen size like this:
import 'package:flutter/material.dart';
class ResponsiveWidget extends StatelessWidget {
//here I just use small and large screens .
final Widget largeScreen;
// final Widget mediumScreen;
final Widget smallScreen;
const ResponsiveWidget({Key key, @required this.largeScreen, this.smallScreen}) : super(key: key);
static bool isSmallScreen(BuildContext context) {
return MediaQuery.of(context).size.width <800;
}
static bool isMediumScreen(BuildContext context) {
return MediaQuery.of(context).size.width >= 700 && MediaQuery.of(context).size.width < 1000;
}
static bool isLargeScreen(BuildContext context) {
return MediaQuery.of(context).size.width >=800;
}
@override
Widget build(BuildContext context) {
return LayoutBuilder(
builder: (context, constraints) {
if (constraints.maxWidth > 800) {
return largeScreen;
} else
return smallScreen;
},
);
}
}
Then call this ReposnsiveWidget
and pass small and large screen widgets:
@override
Widget build(BuildContext context) {
return Scaffold(
body: ResponsiveWidget(
largeScreen: Row(
children: <Widget>[
Expanded(
flex: 1,
child: Container(),
),
Expanded(
flex: 2,
child: blogList(),
),
Expanded(
flex: 1,
child: Container(),
)
],
),
smallScreen: blogList(),
)
);
}
Upvotes: 0
Reputation: 1106
To make a Flutter app responsive using MediaQuery class, you can modify the build function like:
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Theme.of(context).accentColor,
body: MediaQuery.of(context).size.width > 600
? _landscapeforWeb()
: _portraitLayout());
}
If the width is greater than 600, it'd return a larger view accordingly. MediaQuery does work for me and is enough for responsive design in Flutter.
Upvotes: 1