• Как работают Stateless и Stateful widget и generics в Dart?

    MiT_73
    @MiT_73
    StatelessWidget – рекомендуется для неизменяемых виджетов. Это такие виджеты которые не имеют внутреннего состояния, зависят только от конфигурационных параметров и от родительских виджетов.
    Вот некоторые виджеты которые наследуются от StatelessWidget:
    • Text()
    • FlatButton()
    • Container()
    • и др.

    Самая простая конструкция для создания виджета от суперкласса StatelessWidget:
    class MyWidget extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return new Text('my text');
      }
    }

    StatelessWidget – нужен там где внутреннее состояние одно и оно сформировано параметрами и данными которые нам известны заранее.

    StatefulWidget – рекомендуется для изменяемых виджетов, с изменяемым внутренним состоянием (State). Под изменяемым состоянием понимается изменение внутреннего состояния экземпляра класса в зависимости от какого-то события (по нажатию, времени и пр.) Для этого нужно создавать виджет котопый наследует StatefulWidget.
    Вот некоторые виджеты, которые наследуются от StatefulWidget:
    • Image()
    • Form()
    • и др.

    Самая простая конструкция для создания виджета от суперкласса StatefulWidget:
    class MyWidget extends StatefulWidget {
      @override
      createState() => new MyWidgetState();
    }
    
    class MyWidgetState extends State<MyWidget> {
    
      @override
      initState() {
        super.initState();
        // ...
      }
    
      @override
      Widget build(BuildContext context) {
        return new Text('my text');
      }
    }

    StatefulWidget – нужен когда внутренних состояний больше одного и они могут сменять друг друга.

    Создатели Flutter рекомендуют использовать StatelessWidget везде, где можно обойтись без StatefulWidget. Это связано с тем что перестроение StatefulWidget стоит намного дороже (в плане потребления ресурсов и отрисовки). Так же рекомендуется сводить к минимуму дочерних виджетов в StatefulWidget. Оказывается это было ложным утверждением, разницы никакой нет.

    Generics или обобщения позволяют добавить программе гибкости и уйти от жесткой привязки к определенным типам. Иногда возникает необходимость, определить функционал таким образом, чтобы он мог использовать данные любых типов. Вот простой пример который поможет вам понять что такое Generics:
    void main (){
        Person bob = Person("324", "Bob");
        print(bob.id.runtimeType);  // String
        Person sam = Person(123, "Sam");
        print(sam.id.runtimeType);  // int
    }
     
    // T это Generic, если его не было, 
    //нам пришлось-бы использовать несколько классов для определения идентификатора пользователя, 
    //но в данном случае он Generic и мы можем передавать в него любой тип данных.
    class Person<T>{
        T id;   // идентификатор пользователя
        String name; // имя пользователя
        Person(this.id, this.name);
    }
    Ответ написан
    Комментировать
  • Сколько взять за Android проект "Счетчик калорий" начинающему разработчику?

    Вы делаете ошибку, которую делаю очень многие при оценке своего платного первого проекта. Ошибка в том, что вы боитесь продешевить, при том, что на данный момент (пока у вас нет ни одного оцененного проекта, полностью сделанного вами), вы стоите на рынке от 0 р., любая оценка выше будет только по доброй воле заказчика.
    Вы подсчитали объём работ в ваших 80-120 ч. Ваш час на данный момент можно оценить от 100 до 300 р. (и 300 - это уже многовато, скорее всего.)
    Соответственно, стоимость вашей работы будет от 8 до 45 т.р.
    Считаем по-другому: у высокопрофессионального разработчика со ставкой 1000 р./ч. эта работа займёт ориентировочно 16-20 часов.
    Соответственно, получается, что максимальная адекватная цена за такое приложение (не за вашу работу, а за результат) - 20 т.р.
    Ответ написан
    Комментировать
  • Что можете сказать о Dev Intensive?

    Rou1997
    @Rou1997
    Никуда не годные курсы, пустая трата времени - это явно не подход для Android, если вы новичок в программировании, то слишком тяжело и неэффективно, а если уже имеете общие знания, то проще обойтись без курсов, по крайней мере, такого качества.
    Ответ написан
    Комментировать