Size: a a a

Flutter Developers — русскоговорящее сообщество

2020 August 21

AS

Alina Sib in Flutter Developers — русскоговорящее сообщество
К сожалению писала все это счастье не я. У меня вообще стоит задача добавить аналитику. И вот это дурацкое пересоздание всего дерева на каждый чих очень мне мешает.
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
Alina Sib
Вот это хороший вопрос. И ответ на него: да. там есть setState() в двух местах. Сижу сейчас, втыкаю в архитектуру и понимаю что: 1) архитектура приложения  - действительно какашка 2) HomeScreen можно переписать без setState(), т.к. то для чего этот метод там используется нужно как раз делать в тех виджетах, которые находятся внутри PageView.
Возьми провайдыр или get_it, если новичок.
Оформи в своем экране в initState создание контроллера (стрим контроллер).
А по месту уже слушай из гет_ит из провайдыра стрим состояний и на его основе перерендеривай через стрим билдер
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
Но это костыльное решение
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
И отсутсвующая архитектура
источник

PK

Pavel K in Flutter Developers — русскоговорящее сообщество
Alina Sib
К сожалению писала все это счастье не я. У меня вообще стоит задача добавить аналитику. И вот это дурацкое пересоздание всего дерева на каждый чих очень мне мешает.
Только недавно натыкался где-то на книгу, по-моему того же Роберта Мартина :) , о том как работать с легаси
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
Логика должна быть вынесена в отдельный слой
источник

ИК

Игорь Кравченко... in Flutter Developers — русскоговорящее сообщество
🅵🅾️🆇
Возьми провайдыр или get_it, если новичок.
Оформи в своем экране в initState создание контроллера (стрим контроллер).
А по месту уже слушай из гет_ит из провайдыра стрим состояний и на его основе перерендеривай через стрим билдер
э, чем, get_it плох?)
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
Игорь Кравченко
э, чем, get_it плох?)
Ничем не плох)
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
Кроме того, что дает соблазн понапихать все и вся
источник

AS

Alina Sib in Flutter Developers — русскоговорящее сообщество
Pavel K
Только недавно натыкался где-то на книгу, по-моему того же Роберта Мартина :) , о том как работать с легаси
Я щас рыдать буду 😆
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
В данном случае не нужен не провайдыр не гет_ит
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
Достаточно оставить стейтфул виджетом (если искать его стейт не далеко)
источник

AS

Alina Sib in Flutter Developers — русскоговорящее сообщество
Это тот случай когда тебе дают легкую задачку на пару дней, а ты понимаешь, что неееет. Тут проще все сжечь и написать заново.
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
Ну или сделать экран таким образом
import 'package:flutter/widgets.dart';

@immutable
class $NAME$ extends StatefulWidget {
 final Widget child;
 const $NAME$({@required this.child, Key key}) :
   : assert(child != null, 'Field child in widget $NAME$ must not be null')
   , super(key: key);

 static $NAME$State of(BuildContext context) =>
     _$NAME$Scope.of(context).state;

 @override
 State<$NAME$> createState() => $NAME$State();
}

class $NAME$State extends State<$NAME$> {

 @override
 void initState() {
   super.initState();
   // ...
 }

 @override
 void dispose() {
   // ...
   super.dispose();
 }

 @override
 Widget build(BuildContext context) =>
     _$NAME$Scope(
       state: this,
       child: widget.child,
     );
}

@immutable
class _$NAME$Scope extends InheritedWidget {
 final $NAME$State state;

 const _$NAME$Scope({
   @required Widget child,
   @required this.state,
   Key key,
 })
   : assert(child != null, 'Field child in widget _$NAME$Scope must not be null')
   , assert(state is $NAME$State, '$NAME$State must not be null')
   , super(key: key, child: child);

 /// Find GlobalContext in BuildContext
 static _$NAME$Scope of(BuildContext context) =>
     context.dependOnInheritedWidgetOfExactType<_$NAME$Scope>();

 @override
 bool updateShouldNotify(_$NAME$Scope oldWidget) =>
     state != oldWidget.state;
}
источник

PK

Pavel K in Flutter Developers — русскоговорящее сообщество
Alina Sib
Это тот случай когда тебе дают легкую задачку на пару дней, а ты понимаешь, что неееет. Тут проще все сжечь и написать заново.
Ага, было такое
источник

PK

Pavel K in Flutter Developers — русскоговорящее сообщество
А тебе ещё так - да просто добавь там пару строк и все
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
Тогда можно будет находить стейт экрана из его детишек таким образом MyScreen.of(context).controller.stream за O(N)
источник

AS

Alina Sib in Flutter Developers — русскоговорящее сообщество
Спасибо, ребятки, пойду читать что за get_it, Стрим провайдер и нельзя ли обойтись InheritedWidget, чтобы поскорее вернуть всю эту красоту автору.
источник

PK

Pavel K in Flutter Developers — русскоговорящее сообщество
Alina Sib
Спасибо, ребятки, пойду читать что за get_it, Стрим провайдер и нельзя ли обойтись InheritedWidget, чтобы поскорее вернуть всю эту красоту автору.
Удачи
источник

AS

Alina Sib in Flutter Developers — русскоговорящее сообщество
Pavel K
Удачи
🙌🏻🙂
источник