Problems (Draft) - ArtemMikhaylov/my_flutter_notes GitHub Wiki
-
https://gist.github.com/slightfoot/2baa44e8a35f5226cd4c9f41caf81d5f - стоит рассмотреть как решение (fill_viewport.dart)
-
https://stackoverflow.com/q/58668369/3165400 - это пример как работает нативка и флатер в лэндскейп при открытии клавы и текст филд
-
https://medium.com/flutter-nyc/avoiding-the-on-screen-keyboard-in-flutter-ae0e46ecb96c
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
class AuthPageProd extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: SingleChildScrollView(
child: Column(
children: <Widget>[
// Expanded(
// child:
Container(
child: Column(
children: <Widget>[
Image(
image: AssetImage('images/logo.png'),
),
],
),
margin: const EdgeInsets.only(top: 90.0, bottom: 150.0),
width: MediaQuery.of(context).size.width,
// color: Colors.amber.shade500,
),
// ),
Container(
child: Column(
children: <Widget>[
ButtonGoogle(),
TextFormField(
decoration: InputDecoration(
labelText: 'Email',
),
),
ButtonFacebook(),
],
),
// color: Colors.purple[100],
margin: EdgeInsets.only(bottom: 36.0),
)
],
),
),
// backgroundColor: BearColors.bkgr_main,
// resizeToAvoidBottomPadding: false,
);
}
}
double elementWidth = 248.0;
class ButtonGoogle extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ButtonOAuth('images/ic_google.svg', const Color(0xFFFE5244), 'Google');
}
}
class ButtonFacebook extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ButtonOAuth('images/ic_facebook.svg', const Color(0xFF3663A6), 'Facebook');
}
}
class ButtonOAuth extends StatelessWidget {
final String svgIconAsset;
final Color color;
final String text;
ButtonOAuth(this.svgIconAsset, this.color, this.text);
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.symmetric(vertical: 10.0),
child: Container(
child: FlatButton(
onPressed: (){},
child: Stack(
children: <Widget>[
Align(
alignment: Alignment.centerLeft,
child: SvgPicture.asset(
svgIconAsset,
color: Colors.white,
),
),
Align(
alignment: Alignment.center,
child: Text(
text,
style: TextStyle(
color: Colors.white,
fontSize: 16.0,
),
),
)
],
),
color: color,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(50),
),
),
width: elementWidth,
height: 50.0,
),
);
}
}
/*
Нужно еще посмотреть что и как я применял в EG в settings, Там вроде scroll view fillviewport
Значит предварительные выводы:
Разнос элементов по весу делать нельзя похоже если у нас возможно ситуация,
что они не влезут в экран.
Т.к. если они не влезут в экран, то их нужно обарачивать в ScrollView/ListView
А эти элементы не умеют работать с weight (в любой его форме).
В нативном android я решал эту проблему с помощью разной верстки в зависимости
от высоты экрана, если понимал, что не влезет, то убирал вес и делал скролл вью.
Если влезает, то делал LinearLayout с двумя чайлдами, и одному назначал вес.
(реализацию можно посмотреть в InterService LK проекте, левая менюшка)
Динамически такую задачу решать не приходилось, но по идее можно было бы если
программно определять высоту и программно динамически создавать в джававском коде
верстку. Ну это уже какое то извращение конечно.
Лучше уж отказаться от веса в дизайне в таком случае.
Если у нас есть горизонтальная ориентация, и мы не можем подставить отдельную
верстку как в android в зависимости от доступной высоты экрана, то практически
100% с весом в верстке работать не получится.
Если же ограничить только вертикальной ориентацией экран (ЧТО В НАШЕМ СЛУЧАЕ СТОИТ СДЕЛАТЬ)
то в принципе можно вес использовать при небольшом кол-ве элементов.
ЧТО ЕСЛИ В НАШЕМ СЛУЧАЕ ПОПРОБАВАТЬ НЕ COLUMN ? А какой-нибудь аля FrameLayout,
и разнести вьюхи по гравити. Так будет работать или нет, еще вопрос.
Сомнительно если честно. Но попробовать стоит.
И ОТДЕЛЬНАЯ СИТУАЦИЯ С TextField
Если на экране есть TextField - то вес использовать нельзя в принципе!
Т.к. при открытии клавиатуры экран уменьшится значительно, сравнимо с переходом
в горизонтальную ориентацию. И если на нативке в таком случае просто открывается
клавиатурный text_field поверх приложения, и нет проблем.
То во Flutter это не возможно, так не работает.
Единственная надежда возможная, это попробовать вместо Column использовать
какой то другой виджет аля FrameLayout или ConstrantLayout, я кстати даже не
уверен как это на нативке работало бы.
*/