Problems (Draft) - ArtemMikhaylov/my_flutter_notes GitHub Wiki

FieldText, Keyboard, ScrollView, Weight (Draft)

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, я кстати даже не
уверен как это на нативке работало бы.

 */
⚠️ **GitHub.com Fallback** ⚠️