Честно говоря впервые столкнулся с концепцией стейт менеджмента в целом. Немного вскипела голова именно от этих трех функций. И я, если честно, пока не увидел в них какого-то практического значения, если мы всегда можем просто вытащить наш блок, напрямую обратившись к провайдеру.
суть любой архитектуры, разделить логику. ui не должно пересекаться с бизнес логикой, это как аксиома. но нет придела дроблению, если ты используешь 1 глобальный класс(виджет) который управляет сотней страниц, то такой код будет сложно поддерживать, а особенно если его колупаешь не только ты а еще 10 человек, и каждый пишет как хочет. у тебя появляется сотня функций в 1 файле, из них например 60 зависят от других функция а они от других. сложно понять на словах, но поверь когда 1 файл 10к строк, ты захочешь бросить эту профессию быстрее чем решить мелкий баг. и получается что стейт менеджер добвляет 1 абстракцию(которую ты можешь делить) на другие абстракции. наверное запишу видео, бо очень много есть чего сказать на этот счет
Привет! спасибо за понятное и интересное объяснение! Я вот думаю BlocProvider.of(context) и context.read() не одно и тоже? если нет, то в чем разница?)
Спасибо за урок!👍 1) А можно будет сделать урок с примером ListView.builder как отображать данные из List. 2) Ну и как сохранять небольшие данные на телефон как выбор цвета шрифтов. Очень был бы благодарен, а то что-то весь RUclips перерыл так и не понял как это все с BLoC делается.🙃
Привет. Думаю ты уже и сам понял как, но все же отпишу) 1. для сохранения текстовых данных, можно пользоваться p - pub.dev/packages/flutter_secure_storage для сохранения картинок и тд - pub.dev/packages/gallery_saver или юзать нативные стредства, но для этого нужно уже пилить видик. 2. по поводу вывода списка через ListView - код ниже. Но учти в этом примере мы не зависим от высоты, у нас весь наш виджет занимает 100% Если ты захочешь выводить ListView где-то внутри остальной верстки, тебе нужно будет либо задать ему роазмеры, с помощю других виджетов (Container, SizedBox ...), или же обернуть в Expanded если это будет возможно. Более подробно нужно так же пилить видео. Или искать лучше) думаю такое точно есть) import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( body: MyWidget(), ), ); } } final users = [ {'id': 1, 'title': 'Andry'}, {'id': 2, 'title': 'Artem'}, {'id': 3, 'title': 'Danon'}, ]; class MyWidget extends StatelessWidget { @override Widget build(BuildContext context) { return ListView.builder( itemBuilder: (context, index) { return Text( users[index]['title'].toString(), ); }, itemCount: users.length, ); } }
Почему нельзя юзать глобально context.read внутри Builder? "потому что.. еее.. листенер false... еее.. разрабы не рекомендуют потому что..еее.. какие-то проблемы возникнут... еее" *сам не знаю какие* на 7:28 зачем мне использовать context.watch когда вон у меня передается state? builder (context, state)? можно нормально обьяснить зачем? Да и к тому же про context.watch вообще внятного ничего не обьяснил: "ну смотрите вот он есть... но.еее у нас есть проблема что наш брейк поинт отрабатывает и на юзерах, а не только на работе, что по логике не должно быть." И ЧТО? ты можешь внятно обьяснить зачем context.watch нужен, а не показать что он есть, но он создает проблему и пойти дальше к context.select? как кто-то должен понять для чего его использовать? в конце видео когда вынес context.watch на самый верх опять показал как из-за него ребилдятся все виджеты и "нам это не нужно", а для чего он нам нужен? А в конце так вообще использовал BlocProvider.of чтобы все работало так как нам нужно. А для чего вообще ты все это показывал? ты так выбесил если честно этим уроком.
та за шо. потому что слушать надо в контексте а не 5 минут ебланю, 5 минут слушаю. видео мне впадлу пересматривать. так что пишу по памяти. 1. "Почему нельзя юзать глобально context.read внутри Builder" не сработает в нашем случае. потому что листенер отключен, и мы получим просто блок, без подписки на стейт. 2. "зачем мне использовать context.watch когда вон у меня передается state? builder" а тебя не смущает, что там стейт Counter блока, а watch у нас следит за User блоком? 3. (зачем я рассказывал о всех этих методах) потому что видео о них, и о том, что они могут. а не о том как решить конкретную проблему. watch - чтобы получить подписку на весь стейт select - чтобы получить подписку на определенную переменную в стейте read - чтобы получить блок, и его стейт на момент вызова read.
@@it_dev я смотрел видео 5 раз чтобы попытаться вникнуть, но мое сообщение говорит о том что в видео не хватает информации, ты что-то пытаешься расказать по памяти, соскиваешь с темы, недоговариваешь, пересмотри свой урок еще раз, ты ничего нормально не обьяснил.
@@it_dev ты постоянно перескакивал с context.watch на что-то другое внятно не обьяснив зачем он нужен, и когда его использовал. Каждый раз придумывал проблему его не использовать и ни разу решение когда оно нужно.
Не могу не согласиться. Не сказано ничего о том, какую проблему решают watch, select и read. Просто так эти методы не стали бы создавать, видимо, они для чего-то нужны. Но из видео, я сделал вывод, что их вообще луше не использовать.
@@Nixguy "Не сказано ничего о том, какую проблему решают watch, select и read" совершенно верно, это видео можно смело заносить в топ худших видео по программированию. Мне гораздо понятнее было как школьник на ассемблере чавкая в микрофон создавал программу которая выводит hello world
Круто, но почему в этой технологии сначала 10 кривых/некрасивых варианта вы объясняете, а потом в конце - а вот как будет правильно! Так может просто сразу рассказать как правильно делать??
У вас Дар преподнести информацию коротко и ясно, к тому именно то что нужно. Продолжайте пожалуйста в том же духе.
поднял мне чсв)) ахах. пасиб
Лучшее объяснение блока
спасиб) приятно)
Красавчик👍 очень полезное видео, спасибо🤩
Гений. Спасибо большое.
Честно говоря впервые столкнулся с концепцией стейт менеджмента в целом. Немного вскипела голова именно от этих трех функций. И я, если честно, пока не увидел в них какого-то практического значения, если мы всегда можем просто вытащить наш блок, напрямую обратившись к провайдеру.
суть любой архитектуры, разделить логику. ui не должно пересекаться с бизнес логикой, это как аксиома. но нет придела дроблению, если ты используешь 1 глобальный класс(виджет) который управляет сотней страниц, то такой код будет сложно поддерживать, а особенно если его колупаешь не только ты а еще 10 человек, и каждый пишет как хочет. у тебя появляется сотня функций в 1 файле, из них например 60 зависят от других функция а они от других. сложно понять на словах, но поверь когда 1 файл 10к строк, ты захочешь бросить эту профессию быстрее чем решить мелкий баг.
и получается что стейт менеджер добвляет 1 абстракцию(которую ты можешь делить) на другие абстракции. наверное запишу видео, бо очень много есть чего сказать на этот счет
3:09 Только с третьего раза понял, что это действительно у него)))
что-то не понял, а продолжение про buildWhen где-то потерялось? начал про buildWhen и резко все стер и поехали дальше (
да а что там еще про него говорить. я не помню, что уже там было, но вроде все сказал
Спасибо)
автор как будто бежал куда-то, быстро очень.
Спасибо! Сделайте плиз крупнее шрифт, на 13'' ноуте очень все мелко((
Привет! спасибо за понятное и интересное объяснение! Я вот думаю BlocProvider.of(context) и context.read() не одно и тоже? если нет, то в чем разница?)
Спасибо за урок!👍 1) А можно будет сделать урок с примером ListView.builder как отображать данные из List. 2) Ну и как сохранять небольшие данные на телефон как выбор цвета шрифтов. Очень был бы благодарен, а то что-то весь RUclips перерыл так и не понял как это все с BLoC делается.🙃
Привет. опиши плиз подробнее, что нужно сделать. а то я все не совсем понял
Привет. Думаю ты уже и сам понял как, но все же отпишу)
1. для сохранения текстовых данных, можно пользоваться p - pub.dev/packages/flutter_secure_storage
для сохранения картинок и тд - pub.dev/packages/gallery_saver или юзать нативные стредства, но для этого нужно уже пилить видик.
2. по поводу вывода списка через ListView - код ниже. Но учти в этом примере мы не зависим от высоты, у нас весь наш виджет занимает 100% Если ты захочешь выводить ListView где-то внутри остальной верстки, тебе нужно будет либо задать ему роазмеры, с помощю других виджетов (Container, SizedBox ...), или же обернуть в Expanded если это будет возможно. Более подробно нужно так же пилить видео. Или искать лучше) думаю такое точно есть)
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: MyWidget(),
),
);
}
}
final users = [
{'id': 1, 'title': 'Andry'},
{'id': 2, 'title': 'Artem'},
{'id': 3, 'title': 'Danon'},
];
class MyWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ListView.builder(
itemBuilder: (context, index) {
return Text(
users[index]['title'].toString(),
);
},
itemCount: users.length,
);
}
}
@@it_dev Увы я сам не понял. Мне еще далековато до тебя. Спасибо за быстрый ответ. Попробую попробовать 😉
Почему нельзя юзать глобально context.read внутри Builder? "потому что.. еее.. листенер false... еее.. разрабы не рекомендуют потому что..еее.. какие-то проблемы возникнут... еее" *сам не знаю какие*
на 7:28 зачем мне использовать context.watch когда вон у меня передается state? builder (context, state)? можно нормально обьяснить зачем?
Да и к тому же про context.watch вообще внятного ничего не обьяснил: "ну смотрите вот он есть... но.еее у нас есть проблема что наш брейк поинт отрабатывает и на юзерах, а не только на работе, что по логике не должно быть." И ЧТО? ты можешь внятно обьяснить зачем context.watch нужен, а не показать что он есть, но он создает проблему и пойти дальше к context.select? как кто-то должен понять для чего его использовать? в конце видео когда вынес context.watch на самый верх опять показал как из-за него ребилдятся все виджеты и "нам это не нужно", а для чего он нам нужен? А в конце так вообще использовал BlocProvider.of чтобы все работало так как нам нужно. А для чего вообще ты все это показывал? ты так выбесил если честно этим уроком.
та за шо. потому что слушать надо в контексте а не 5 минут ебланю, 5 минут слушаю.
видео мне впадлу пересматривать. так что пишу по памяти.
1. "Почему нельзя юзать глобально context.read внутри Builder" не сработает в нашем случае. потому что листенер отключен, и мы получим просто блок, без подписки на стейт.
2. "зачем мне использовать context.watch когда вон у меня передается state? builder" а тебя не смущает, что там стейт Counter блока, а watch у нас следит за User блоком?
3. (зачем я рассказывал о всех этих методах) потому что видео о них, и о том, что они могут. а не о том как решить конкретную проблему.
watch - чтобы получить подписку на весь стейт
select - чтобы получить подписку на определенную переменную в стейте
read - чтобы получить блок, и его стейт на момент вызова read.
@@it_dev я смотрел видео 5 раз чтобы попытаться вникнуть, но мое сообщение говорит о том что в видео не хватает информации, ты что-то пытаешься расказать по памяти, соскиваешь с темы, недоговариваешь, пересмотри свой урок еще раз, ты ничего нормально не обьяснил.
@@it_dev ты постоянно перескакивал с context.watch на что-то другое внятно не обьяснив зачем он нужен, и когда его использовал. Каждый раз придумывал проблему его не использовать и ни разу решение когда оно нужно.
Не могу не согласиться. Не сказано ничего о том, какую проблему решают watch, select и read. Просто так эти методы не стали бы создавать, видимо, они для чего-то нужны. Но из видео, я сделал вывод, что их вообще луше не использовать.
@@Nixguy "Не сказано ничего о том, какую проблему решают watch, select и read" совершенно верно, это видео можно смело заносить в топ худших видео по программированию. Мне гораздо понятнее было как школьник на ассемблере чавкая в микрофон создавал программу которая выводит hello world
Круто, но почему в этой технологии сначала 10 кривых/некрасивых варианта вы объясняете, а потом в конце - а вот как будет правильно! Так может просто сразу рассказать как правильно делать??
В этом и суть. показать как можно. но в данном кэйсе не надо