An Interest In:
Web News this Week
- April 1, 2024
- March 31, 2024
- March 30, 2024
- March 29, 2024
- March 28, 2024
- March 27, 2024
- March 26, 2024
May 27, 2021 05:05 am GMT
Original Link: https://dev.to/ushieru/responsive-in-flutter-5dil
Responsive in flutter
La forma ms sencilla de tener control en nuestros diseos es imaginar que dividimos nuestra pantalla entre 100 bloques iguales, a lo ancho y a lo alto. De esta manera podremos definir que widgets abarquen un 10% de ancho o un 35% de alto.
La siguiente clase me ayuda a definir los tamaos.
import 'package:flutter/widgets.dart';class SizeConfig { static double screenWidth = 0; static double screenHeight = 0; static double _blockSizeHorizontal = 0; static double _blockSizeVertical = 0; static double _safeAreaHorizontal = 0; static double _safeAreaVertical = 0; static double _safeBlockHorizontal = 0; static double _safeBlockVertical = 0; SizeConfig(BuildContext context) { var mediaQueryContext = MediaQuery.of(context); screenWidth = mediaQueryContext.size.width; screenHeight = mediaQueryContext.size.height; _blockSizeHorizontal = screenWidth / 100; _blockSizeVertical = screenHeight / 100; _safeAreaHorizontal = mediaQueryContext.padding.left + mediaQueryContext.padding.right; _safeAreaVertical = mediaQueryContext.padding.top + mediaQueryContext.padding.bottom; _safeBlockHorizontal = (screenWidth - _safeAreaHorizontal) / 100; _safeBlockVertical = (screenHeight - _safeAreaVertical) / 100; } static double blockSizeHorizontal(double porcent) { return _blockSizeHorizontal * porcent; } static double blockSizeVertical(double porcent) { return _blockSizeVertical * porcent; } static double safeBlockSizeHorizontal(double porcent) { return _safeBlockHorizontal * porcent; } static double safeBlockSizeVertical(double porcent) { return _safeBlockVertical * porcent; }}
Para inicializarla solo debes inicializar el constructor de SizeConfig en tu initialRoute o en tu home, dependiendo que utilices. Solo recuerda inicializarlo en el primer Widget consecuente de tu MaterialApp.
class Ushieru extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Ushieru ', theme: ThemeData( primarySwatch: Colors.blue, ), routes: { IndexScreen.routeName: (context) => IndexScreen(), }, initialRoute: IndexScreen.routeName, home: IndexScreen(), ); }}
Ejemplo:
class IndexScreen extends StatelessWidget { static final routeName = "IndexScreen"; @override Widget build(BuildContext context) { SizeConfig(context); return Container( width: SizeConfig.screenWidth, // Toma todo el ancho de la pantalla height: SizeConfig.blockSizeVertical(50), // Toma el 50% del alto de la pantalla ); }}
Al ser estticas las variables de clase estas podrn ser utilizadas por cualquier otro widget a partir solo del nombre de la clase SizeConfig.
class SecondScreen extends StatelessWidget { static final routeName = "SecondScreen"; @override Widget build(BuildContext context) { // SizeConfig(context); No se necesita inicializar otra vez return Container( width: SizeConfig.screenWidth, height: SizeConfig.blockSizeVertical(50), ); }}
Y que pasa si utilizo un SafeArea para mi aplicacin?
Tambin ya est previsto solo cambias del mtodo blockSizeVertical asafeBlockSizeVertical, asi de simple.
class ThirdScreen extends StatelessWidget { static final routeName = "ThirdScreen"; @override Widget build(BuildContext context) { return SafeArea( child: Container( width: SizeConfig.screenWidth, height: SizeConfig.safeBlockSizeVertical(50), // Usamos el metodo safeBlockSizeVertical ), ); }}
Original Link: https://dev.to/ushieru/responsive-in-flutter-5dil
Share this article:
Tweet
View Full Article
Dev To
An online community for sharing and discovering great ideas, having debates, and making friendsMore About this Source Visit Dev To