рд╕реНрдкрдВрджрдиред BlOC, рдкреНрд░реЛрд╡рд╛рдЗрдбрд░, Async - рд╢реЗрд▓реНрдл рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░

рдкрд░рд┐рдЪрдп


рдЬрдм рдЖрдк рдХрд┐рд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкрд╣рд▓реА рдмрд╛рдд рдпрд╣ рдЖрддреА рд╣реИ рдХрд┐ рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЛ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдЬрдм рдпрд╣ рд╕реНрдкрдВрджрди рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рддреЛ рд╕рд┐рд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧреЛрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ Google рджреЗрддрд╛ рд╣реИ - рд╡реЗрдирд┐рд▓рд╛, рд╕реНрдХреЛрдкреНрдб рдореЙрдбрд▓, рдмреАрдПрд▓рдУрд╕реА, рдПрдорд╡реАрдкреА, рдПрдорд╡реАрд╕реА, рдПрдорд╡реАрд╡реАрдПрдо, рдПрдорд╡реАрдЖрдИ, рдЖрджрд┐ред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдк рд╕рдмрд╕реЗ рдлреИрд╢рдиреЗрдмрд▓ рддрд░реАрдХреЗ рд╕реЗ рдЬрд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд░рддреЗ рд╣реИрдВ (рдЬреЛ рдХрд┐ 2018 рдореЗрдВ Google рдиреЗ рд╕рд▓рд╛рд╣ рджреА рд╣реИ) рдФрд░ BLOC рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдпрд╣ рдХреНрдпрд╛ рд╣реИ? рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреИрд╕реЗ рдХрд░реЗрдВ? рдпрд╛ рд╢рд╛рдпрдж Redux рдпрд╛ RxDart? - рд╣рд╛рд▓рд╛рдВрдХрд┐ рд░реЛрдХ "рдЕрдиреНрдп" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ ... рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реИ? рдХреНрдпрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП? рдмреНрд▓реЙрдХ, Flutter_bloc, bloc_pattern, рдЖрджрд┐?

рдЙрдирдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рд╡рд┐рдХрд▓реНрдк рдФрд░ рдЙрдкрдХрд░рдг рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЪрдпрди рдЪрд░рдг рдореЗрдВ рджреЗрд░реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рд▓реЗрдЦ


рдпрд╣ рдЖрд▓реЗрдЦ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдЬреЛ рд╕рд┐рд░реНрдл рдлреНрд▓рдЯрд░ рд╕реАрдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдХрд╣рд╛рдВ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВред рдореИрдВ рд╕реНрдкрдВрджрди рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ред рдпрд╣ рдЖрдкрдХреЛ рд╕реНрдкрдВрджрди "рдорд╣рд╕реВрд╕" рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рдФрд░ рдлрд┐рд░ рдЕрдкрдиреЗ рд▓рд┐рдП рддрдп рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдХреИрд╕реЗ рдФрд░ рдХрд┐рд╕ рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦреЗрдВрдЧреЗред

рдкреИрдЯрд░реНрди рдФрд░ рдЙрдкрдХрд░рдгред рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдФрд░ рд╕рд░рд▓


рддреЛ, рдЪрд▓реЛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдкрд╣рд▓реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдЖрд╡реЗрджрди рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ (рдкреИрдЯрд░реНрди, рдЯреЗрдореНрдкрд▓реЗрдЯ, рдХреБрдЫ рдирд┐рд░реНрдорд╛рдг рдЕрд╡рдзрд╛рд░рдгрд╛) рд╣реИ - рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рд╡реИрд╕рд╛ рд╣реА рд╣реИ: рдмреАрдПрд▓рдУрд╕реА, рдПрдорд╡реАрдкреА, рдПрдорд╡реАрд╕реА, рдПрдорд╡реАрд╡реАрдПрдо, рдПрдорд╡реАрдЖрдИ, рдЖрджрд┐ред рдЗрдирдореЗрдВ рд╕реЗ рдХрдИ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рди рдХреЗрд╡рд▓ рдлрд╝реНрд▓рдЯрд░ рдореЗрдВ, рдмрд▓реНрдХрд┐ рдЕрдиреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдкреНрд░рд╢реНрди - рдХреНрдпрд╛ рдЪреБрдирдирд╛ рд╣реИ? рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЖрдкрдХреЛ рдпрд╣ рдЪреБрдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЦреБрдж рдХреЛ рдХреНрдпрд╛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рдХреЗрд╡рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдФрд░ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХрд╛ рдПрдХ рдЕрд▓рдЧ рдЕрд▓рдЧрд╛рд╡ рд╣реИ (рд╣рд╛рдБ, рд╣рд╛рдБ - "рдПрдХ рдХрд╛рд░ рдХрд┐рд╕реА рднреА рд░рдВрдЧ рдХреА рд╣реЛ рд╕рдХрддреА рд╣реИ рдЕрдЧрд░ рд╡рд╣ рдХрд╛рд▓реА рд╣реИ")ред рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдФрд░ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЗ рдкреГрдердХреНрдХрд░рдг рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдордЭрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рдХреЗ рд▓рд┐рдП - рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ, рдЕрдЧрд░ рдЖрдкрдиреЗ рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рд╣реИ - рдЕрдВрдд рдореЗрдВ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ "рд╕реБрдВрджрд░" рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдирд╣реАрдВ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЖрдЗрдП рд╣рдо рдЗрд╕реЗ Google - BLOC рдХреЗ рд╕рдмрд╕реЗ рдмреЗрд╡рдХреВрдл рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ рд╣реЛрдиреЗ рджреЗрдВред рд╣рдордиреЗ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ред

рдЕрдм рдЙрдкрдХрд░рдг - рддреИрдпрд╛рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ - рдмреНрд▓рд╛рдХ, рдлреНрд▓рдЯрд░_рдмреНрд▓реЙрдХ, рдмреНрд▓реЛрдХ_рдкреИрдЯрди - рдЬреЛ рдмреЗрд╣рддрд░ рд╣реИ? рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ - рд╣рд░ рдХреЛрдИ рдЕрдЪреНрдЫрд╛ рд╣реИ рдЖрдк рд▓рдВрдмреЗ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдлрд┐рд░ рд╕реЗ, рдЬреИрд╕рд╛ рдХрд┐ рд╕реЗрдирд╛ рдореЗрдВ рд╣реИ - рдЕрдм рдХреЗ рд▓рд┐рдП рдЧрд▓рдд рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред рдФрд░ рдЕрдм рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдореЙрдб рдХреЗ рдорджреНрджреЗрдирдЬрд░ рдФрд░ рдкреНрд░рджрд╛рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ (рд╡рд╣реА рд▓реЛрдЧ 2019 рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВ)ред

рдпрд╣ рд╕рдм рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рд╡реИрд╢реНрд╡рд┐рдХ рдмреНрд▓реЙрдХ рдФрд░ рд╕реНрдерд╛рдиреАрдп рдмреНрд▓реЙрдХ рджреЛрдиреЛрдВ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдмреАрдПрд▓рдУрд╕реА (рдпрд╛рдиреА рдПрдХ рдкреИрдЯрд░реНрди, рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдирд╣реАрдВ) рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕ рдкрд░ рдлрд┐рд░ рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдмрд┐рдВрджреБ рдкрд░ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ, рди рдХрд┐ рдХреНрд▓рд╛рд╕рд┐рдХ рдмреАрдПрд▓рдУрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд - рдмреАрдПрд▓рдУрд╕реА рдХрд╛рд░реНрдпреЛрдВ (рдШрдЯрдирд╛рдУрдВ) рдореЗрдВ рд╕рд┐рдВрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░реЗрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдмреАрдПрд▓рдУрд╕реА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред рдмрд╕, рдлрд┐рд▓рд╣рд╛рд▓, рдореБрдЭреЗ рд╕рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдн рдирд╣реАрдВ рджрд┐рдЦрддреЗ - рдФрд░ рдЪреВрдВрдХрд┐ рд╡реЗ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЗ рдЬреАрд╡рди рдХреЛ рдЬрдЯрд┐рд▓ рдХреНрдпреЛрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рдП?

рдбрд╛рд░реНрдЯ рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдФрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрдореНрдкреНрдпреВрдЯрд┐рдВрдЧ


рдпрд╣ рднреА рдбрд╛рд░реНрдЯ рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд╛рдпрдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдмрд╣реБрдд рдмрд╛рд░, рдбрд╛рд░реНрдЯ рдХреЗ рд╕рд╛рде рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдкрд╣рд▓реЗ рдЪрд░рдгреЛрдВ рдореЗрдВ, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ (async) рдХреЗ рдЕрд░реНрде рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд╣реАрдВ рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдкрдХреЛ рд╣рдореЗрд╢рд╛ рдпрд╛рдж рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ "рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ" рдХрд╛рд░реНрдпрдХреНрд░рдо рдПрдХ рдзрд╛рдЧреЗ рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИ, рдФрд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЗрд╡рд▓ рдЖрдкрдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЖрджреЗрд╢реЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдпрджрд┐ рдЖрдк рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЗрд╡рд▓ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдЧрдгрдирд╛ рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХреЗрд╡рд▓ async рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЕрд╡рд░реБрджреНрдз рд╣реЛ рдЬрд╛рдПрдЧрд╛ред Async рдПрдХ рдирдпрд╛ рд╕реВрддреНрд░ рдкреНрд░рд╛рд░рдВрдн рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдХреИрд╕реЗ async рдФрд░ рдХрд╛рдо рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдмрд╣реБрдд рд╕рд╛рд░реА рдЬрд╛рдирдХрд╛рд░реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреВрдВрдЧрд╛ред

рдпрджрд┐ рдЖрдкрдХреЛ рдХреБрдЫ рдмрдбрд╝реА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдЙрд╕реА рд╕рдордп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдмреНрд▓реЙрдХ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЧрдгрдирд╛ рдлрд╝рдВрдХреНрд╢рди (рд╡рд┐рд╢реЗрд╖ рдХрдЯреНрдЯрд░ рдХреЗ рд▓рд┐рдП рдЖрдк рдЖрдЗрд╕реЛрд▓реЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдПрдХ рдЕрд▓рдЧ рдзрд╛рдЧрд╛ рд╢реБрд░реВ рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕рдХрд╛ рдЕрдкрдирд╛ рдЕрд▓рдЧ рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░ рднреА рд╣реЛрдЧрд╛ (рдЬреЛ рдмрд╣реБрдд рджреБрдЦрдж рдФрд░ рджреБрдЦрдж рд╣реИ)ред рдЖрдк рдХреЗрд╡рд▓ рд╕рдВрджреЗрд╢ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдРрд╕реА рдзрд╛рд░рд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рд╕рд░рд▓ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░, рдЙрдирдХреА рд╕реВрдЪреА рд╣реЛ рд╕рдХрддреА рд╣реИред

рдЪрд▓реЛ рдЕрднреНрдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЙрддрд░реЛ


рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдирд┐рд░реВрдкрдг


рдЖрдЗрдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ - рдЗрд╕реЗ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдЯреЗрд▓реАрдлреЛрди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╣реЛрдиреЗ рджреЗрдВред рд╣рдо рднрдВрдбрд╛рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдлрд╛рдпрд░рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ - рдпрд╣ рд╣рдореЗрдВ "рдХреНрд▓рд╛рдЙрдб" рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдореИрдВ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ Firebase рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдЫреЛрдбрд╝ рджреВрдВ (рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд▓реЗрдЦ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдореИрдВ рджреЛрд╣рд░рд╛рд╡ рдХреА рдмрд╛рдд рдирд╣реАрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВред рдиреЛрдЯ: рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХреНрд▓рд╛рдЙрдб рдлрд╛рдпрд░рд╕реНрдЯрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред)

рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:





рдЖрд╡реЗрджрди рд╡рд┐рд╡рд░рдг


рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдмрд╛рд╣рд░реА рд░реВрдк рд╕реЗ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗ:

  1. рдлрд╛рдпрд░рдмреЗрд╕ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╡рд┐рдВрдбреЛ (рдЗрд╕ рд╡рд┐рдВрдбреЛ рдХрд╛ рддрд░реНрдХ рдореЗрдирдмреЙрдХ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реЛрдЧрд╛)ред
  2. рд╕реВрдЪрдирд╛ рд╡рд┐рдВрдбреЛ - рдЙрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧреА рдЬрд┐рд╕рдХреЗ рддрд╣рдд рдХрд╛рд░реНрдпрдХреНрд░рдо рдЕрдзрд┐рдХреГрдд рд╣реИ (рдЗрд╕ рд╡рд┐рдВрдбреЛ рдХрд╛ рддрд░реНрдХ рднреА рдореЗрдирдмреЙрдХ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реЛрдЧрд╛)ред
  3. рдЯреЗрд▓реАрдлреЛрди рдХреА рдПрдХ рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╡рд┐рдВрдбреЛ (рдЗрд╕ рд╡рд┐рдВрдбреЛ рдХрд╛ рддрд░реНрдХ рдПрдХ рдЕрд▓рдЧ рдлреЛрдирдмреБрдХрдмреНрд▓реЙрдХ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реЛрдЧрд╛)ред
  4. рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдиреВ рдЬреЛ рд╕реНрдХреНрд░реАрди рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдЧрд╛ред

рдЖрдВрддрд░рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛: рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдХреНрд░реАрди рдореЗрдВ рд╕реНрдХреНрд░реАрди рд╡рд┐рдЬреЗрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓, рдПрдХ рдмреНрд▓реЙрдХ рдлрд╝рд╛рдЗрд▓ (рд╕рдВрдмрдВрдзрд┐рдд рдмреНрд▓реЙрдХ рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде), рдПрдХ рдПрдХреНрд╢рди рдлрд╝рд╛рдЗрд▓ (рд╕рд░рд▓ рдХрдХреНрд╖рд╛рдПрдВ рдЬрд┐рдирдореЗрдВ рдмреНрд▓рд╛рдХ рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдШрдЯрдирд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рд╣реЛрддрд╛ рд╣реИ) рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдПрдХ рд░рд╛рдЬреНрдп рдлрд╝рд╛рдЗрд▓ (рдЬрд┐рд╕рдореЗрдВ рд╕рд╛рдзрд╛рд░рдг рд╕реНрдерд┐рддрд┐ рд╣реЛрддреА рд╣реИ рдЬреЛ рдмреНрд▓реЙрдХ рд╕реНрдерд┐рддрд┐ рдХреЛ рджрд░реНрд╢рд╛рддреА рд╣реИред ), рдбреЗрдЯрд╛_рдореЙрдбрд▓ рдлрд╝рд╛рдЗрд▓ рдЬрд┐рд╕рдореЗрдВ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреНрд▓рд╛рд╕ (рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░) рдФрд░ рдбреЗрдЯрд╛ рдХреНрд▓рд╛рд╕ (рд╕реНрдЯреЛрд░ рдмрд┐рдЬрдиреЗрд╕ рд▓реЙрдЬрд┐рдХ рд▓реЙрдЬрд┐рдХ рд╕реНрдЯреЛрд░) рд╣реИред

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рд░реНрдп рдХрд░реЗрдЧрд╛ - рдЬрдм рд╕реНрдХреНрд░реАрди рдЦреЛрд▓реА рдЬрд╛рддреА рд╣реИ, рддреЛ рд╕рдВрдмрдВрдзрд┐рдд рдмреНрд▓реЙрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд░рд╛рдЬреНрдп рдорд╛рди рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдФрд░, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдХреБрдЫ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рдмреНрд▓реЙрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реНрдХреНрд░реАрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг / рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рд░рд╛рдЬреНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдмреНрд▓реЙрдХ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдХреБрдЫ рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдХреНрд░рд┐рдпрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВред рдПрдХреНрдЯреНрд╕ рдХреЛ рдмреНрд▓реЙрдХ рдХреНрд▓рд╛рд╕ рдореЗрдВ рднреЗрдЬ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЙрдиреНрд╣реЗрдВ рдореИрдкрдПрд╡реЗрдВрдЯрдЯреЙрд╕реНрдЯреЗрдЯ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдмреНрд▓реЛрдХ рдирдП рд╕реНрдЯреЗрдЯ рдХреЛ рд╕реНрдХреНрд░реАрди рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯрд╛ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реНрдХреНрд░реАрди рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдлрд╝рд╛рдЗрд▓ рд╕рдВрд░рдЪрдирд╛


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдПрдХ рдЦрд╛рд▓реА рд╕реНрдкрдВрджрди рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ (рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдбреЗрдореЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреБрдЫ рдлрд╛рдЗрд▓реЗрдВ рдЕрдВрддрддрдГ рдЦрд╛рд▓реА рд░рд╣реЗрдВрдЧреА):



рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╡рд┐рдВрдбреЛред Mainbloc


рдЕрдм рдЖрдкрдХреЛ рдлрд╛рдпрд░рдмреЗрд╕ рдореЗрдВ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЖрдЗрдП рдЗрд╡реЗрдВрдЯ рдХреНрд▓рд╛рд╕реЗрд╕ рдмрдирд╛рдХрд░ рд╢реБрд░реВ рдХрд░реЗрдВ (рдпрд╣ рдмреНрд▓реЙрдХ рдореЗрдВ рдШрдЯрдирд╛рдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ) рдФрд░ рдореЗрди рдмреНрд▓реЙрдХ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреЗрдЯреНрд╕:

рдлрд╛рдЗрд▓ рдореЗрдирдмреЙрдХ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ

abstract class MainBlocAction{
  String get password => null;
  String get email => null;
}

рдлрд╝рд╛рдЗрд▓ MainBloc \ рдЕрд╡рд╕реНрдерд╛рдПрдБ

abstract class MainBlocState{
  bool busy;
  MainBlocState({this.busy = false});
  copy(bool busy) {
    return null;
  }
}

рд░рд╛рдЬреНрдп рд╡рд░реНрдЧ рдореЗрдВ рд╡реНрдпрд╕реНрдд рдзреНрд╡рдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдкреНрд░рдЧрддрд┐_рд╣реБрдб рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдФрд░ рд╕реВрдЪреА рд╕реЗ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рддреЗ рд╕рдордп рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рд░реАрдбреНрд╕ рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдмреНрд▓реЙрдХ рдореЗрдВ рд╕рднреА рдСрдкрд░реЗрд╢рди рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╡реНрдпрд╕реНрдд рдзреНрд╡рдЬ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдкреБрд░рд╛рдиреЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдирдпрд╛ рд░рд╛рдЬреНрдп рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рдХреЛ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЗрд╕ рддрд░рд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдПрдХ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИ рдХрд┐ рдСрдкрд░реЗрд╢рди рд╢реБрд░реВ рд╣реЛ рдЧрдпрд╛ рд╣реИред рдСрдкрд░реЗрд╢рди рдХреЗ рдЕрдВрдд рдореЗрдВ, рдПрдХ рдирдпрд╛ рд░рд╛рдЬреНрдп рд╡реНрдпрд╕реНрдд рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рдзрд╛рд░рд╛ рдореЗрдВ рднреЗрдЬ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

MainBlocState рд╡рд░реНрдЧ рдХреЗ рд╡рд╛рд░рд┐рд╕ рдореБрдЦреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмреНрд▓рд╛рдХ рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред MainBlocAction рдХреЗ рд╡рд╛рд░рд┐рд╕ рдЗрд╕рдореЗрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдШрдЯрдирд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред

MainBloc рд╡рд░реНрдЧ рдореЗрдВ 4 рдореБрдЦреНрдп рддрддреНрд╡ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ - рдШрдЯрдирд╛рдУрдВ рдХреЛ "рдкрд░рд┐рд╡рд░реНрддрд┐рдд" рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп (Future mapEventToState), Bloc рд░рд╛рдЬреНрдп _blocState рд╣реИ, рдмреНрд▓реЙрдХ рд╕реНрдЯреЗрдЯ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд░реЗрдкреЛ рд╣реИ, рдФрд░ "рдЖрдЙрдЯрдкреБрдЯ" рд╕реНрдЯреЗрдЯ рд╕реНрдЯреНрд░реАрдо (рдЬреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рддрддреНрд╡ рдЯреНрд░реИрдХ) blocStream рд╣реИред рдореВрд▓ рд░реВрдк рд╕реЗ, рдпреЗ рд╕рднреА рддрддреНрд╡ рд╣реИрдВ рдЬреЛ рдмреНрд▓реЙрдХ-рдПрдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдХрднреА-рдХрднреА рдПрдХ рдмреНрд▓реЙрдХ рдореЗрдВ 2 рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреА рдЬрд╛рддреА рд╣реИ - рдРрд╕рд╛ рдЙрджрд╛рд╣рд░рдг рдХрдо рд╣реЛрдЧрд╛ред рдореИрдВ рдЗрд╕реЗ рдпрд╣рд╛рдВ рд╕реВрдЪреАрдмрджреНрдз рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ - рдЖрдк рдЗрд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдХреЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдмреНрд▓рд╛рдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╡рд░реНрдЧ рдореЗрдВ рдлрд╛рдпрд░рдмреЗрд╕ рдФрд░ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ (рдбреЗрдЯрд╛) рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдпрд╣ рдмреНрд▓реЙрдХ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред

рдлрд╝рд╛рдЗрд▓ MainBloc \ data_model

class MainRepo{

  final MainData data = MainData();

  FirebaseAuth get firebaseInst => MainData.firebaseInst;

  FirebaseUser _currentUser;

  Future<bool> createUserWithEmailAndPassword(
      String email, String password) async {
    var dataUser;
      try {
        dataUser =
            (await firebaseInst.createUserWithEmailAndPassword(
                email: email, password: password))
                .user;
      } catch (e) {
        print(Error.safeToString(e));
        print(e.code);
        print(e.message);
      }
      if (dataUser == null){
        data.setState(IsNotLogged());
        return false;
      }

      _currentUser = dataUser;
      data.setState(IsLogged(),
          uid: _currentUser.uid,
          email: _currentUser.email);
    return true;
  }

  ...}

class MainData {
  static final firebaseInst = FirebaseAuth.instance;
  static MainBlocState _authState = IsNotLogged();
  static MainBlocState get authState => _authState;
  static String _uid;
  static String get uid => _uid;
  static String _email;
  static String get email => _email;

  void setState(MainBlocState newState,
      {String uid = '', String email = ''}) {
    _authState = newState;
    _uid = uid;
    _email = email;
  }
}


рдореЗрдирдбреЗрдЯрд╛ рд╡рд░реНрдЧ рд░рд╛рдЬреНрдп рдХреЛ рднреА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд╛рдпрд░рдмреЗрд╕ рдореЗрдВ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд░рд╛рдЬреНрдп, рдФрд░ рдмреНрд▓реЙрдХ рд░рд╛рдЬреНрдп рдирд╣реАрдВред

рд╣рдордиреЗ рдореБрдЦреНрдп рдмреНрд▓реЙрдХ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рд▓рд┐рдЦрд╛, рдЕрдм рд╣рдо рдкреНрд░рд╛рдзрд┐рдХрд░рдг / рдкрдВрдЬреАрдХрд░рдг рд╕реНрдХреНрд░реАрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

MainBloc рдХреЛ рдореБрдЦреНрдп рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреНрд░рд╛рд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

рдореБрдЦреНрдп рдлрд╝рд╛рдЗрд▓

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return Provider(
        create: (context) => MainBloc(),
        dispose: (context, value) => value.dispose(),
        child: MaterialApp(
          routes: menuRoutes,
        ));
  }
}

StreamBuilder, рдкреНрд░рджрд╛рддрд╛, StreamProvider, рдЙрдкрднреЛрдХреНрддрд╛ рдФрд░ рдЪрдпрдирдХрд░реНрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╡рд┐рд╖рдпрд╛рдВрддрд░ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИред

рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреАрдЫреЗ рд╣рдЯрдирд╛


рдкреНрд░рджрд╛рддрд╛ - рдХреЗрд╡рд▓ рдкреЗрдбрд╝ рдХреЗ рдиреАрдЪреЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдореВрд▓реНрдп рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдФрд░ рдЖрдк рдЗрд╕реЗ рдмрдЪреНрдЪреЗ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рдж рд╣реА рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддред рдЖрдкрдХреЛ рдЙрдк рд╡рд┐рдЬреЗрдЯ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╡рд┐рдЬреЗрдЯ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рдирд╣реАрдВред

StreamBuilder - рдПрдХ рд╡рд┐рдЬреЗрдЯ рдЬреЛ рд╕реНрдЯреНрд░реАрдо рдХреЛ рдореЙрдирд┐рдЯрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕реНрдЯреНрд░реАрдо рд╕реЗ рдПрдХ рдирдИ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕реНрдЯреНрд░реАрдордкреНрд░реЙрдЗрдбрд░ - рдПрдХ рд╡рд┐рдЬреЗрдЯ рдЬреЛ рд╕реНрдЯреНрд░реАрдо рдкрд░ рдирдЬрд╝рд░ рд░рдЦрддрд╛ рд╣реИ рдФрд░ рдЬрдм рдХреЛрдИ рдирдИ рд╡рд╕реНрддреБ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИ, рддреЛ рдпрд╣ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ рдХрд┐ рдмрдЪреНрдЪреЗ рдХреЗ рд╡рд┐рдЬреЗрдЯ (рдмрд┐рд▓реНрдб рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЧрдП) рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЙрдкрднреЛрдХреНрддрд╛ рдФрд░ рдЪрдпрдирдХрд░реНрддрд╛ "рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рд╢реБрдЧрд░" рд╣реИрдВ, рдЕрд░реНрдерд╛рдд рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ "рдЖрд╡рд░рдг" рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдирд┐рд░реНрдорд╛рдг рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдиреАрдЪреЗ рд╡рд┐рдЬреЗрдЯ рдЫреБрдкрд╛ рд╣реЛрддрд╛ рд╣реИред рдЪрдпрдирдХрд░реНрддрд╛-рдИ рдореЗрдВ, рдЖрдк рдЕрдкрдбреЗрдЯ рдХреА рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЬрдм рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдирд╛ рдореЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕реНрдХреНрд░реАрди рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдЖрдк рдкреНрд░рджрд╛рддрд╛ рдФрд░ рд╕реНрдЯреНрд░реАрдордмреНрдпреВрд▓рд░ рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬрдм рдкрддреНрддрд┐рдпреЛрдВ рдХреЗ рдХрд░реАрдм рд╡рд┐рдЬреЗрдЯ рдкреЗрдбрд╝ рдХреЗ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдкреЗрдбрд╝ рдХреЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдкреБрдирд░реНрд╡рд╕рди рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрднреЛрдХреНрддрд╛ рдФрд░ рдЪрдпрдирдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ рд╕реНрдЯреНрд░реАрдордкреНрд░реЙрдЗрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИред

рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╡рд┐рд╕реНрддрд╛рд░


рдЖрд╡реЗрджрди рджрд░реНрдЬ рдХрд░рддреЗ рд╕рдордп, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг / рдкрдВрдЬреАрдХрд░рдг рд╡рд┐рдВрдбреЛ рдореЗрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЙрд╕ рд╕рдордп рдЖрд╡реЗрджрди рдореЗрдиреВ рдЙрд╕реЗ рдЕрднреА рддрдХ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рджреВрд╕рд░рд╛ рдмрд┐рдВрджреБ - рдЗрд╕ рд╕реНрдХреНрд░реАрди рдХреЛ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рддрд╛рдЬрд╝рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЕрд░реНрде рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░реАрдордмреНрдпреВрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рддреАрд╕рд░рд╛ рдмрд┐рдВрджреБ рд╕реНрдХреНрд░реАрди рдХреЗ рдмреАрдЪ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреЗрд╡рд┐рдЧреЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред рд╕рдлрд▓ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреА рдПрдХ рдШрдЯрдирд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░, рд╕рдВрдХреНрд░рдордг рдХреЛ рд╕реВрдЪрдирд╛ рд╕реНрдХреНрд░реАрди рдкрд░ рдХреЙрд▓ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд▓реЗрдХрд┐рди рд╕рд┐рд░реНрдл StreamBuilder рдмрдирд╛рдиреЗ рдХреЗ рдЕрдВрджрд░, рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ - рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреАред рдЗрд╕рдХреЗ рдЖрд╕-рдкрд╛рд╕ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рд╕рд╣рд╛рдпрдХ рд░реИрдкрд░ рдХреНрд▓рд╛рд╕ рд╕реНрдЯреНрд░реАрдордмреНрдпреВрд╕реНрдЯрд▓рд╡рд┐рде рд▓рд┐рд╕реНрдЯрдирд░ (рдпреВрдЬреАрди рдмреНрд░реВрд╕реЛрд╡ - stackoverflow.com ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред

рдЕрдм рдЗрд╕ рд╕реНрдХреНрд░реАрди рдХреА рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдЕрдкрдиреЗ рдЖрдк рд╣реА (рдореИрдВ рдпрд╣рд╛рдБ рдХреБрдЫ рдЕрдВрд╢ рдореЗрдВ рджреЗ рджреВрдБрдЧрд╛) рд╣реИ:

рдлрд╝рд╛рдЗрд▓ рдСрд░реНрдЯрд┐рдирд╕реНрдХреНрд░реАрди

Widget build(BuildContext context) {
  var bloc = Provider.of<MainBloc>(context, listen: false);
  return StreamBuilderWithListener<MainBlocState>(
      stream: bloc.blocStream.stream,
      listener: (value) {
        //not allowed call navigator push in build
        if (value is IsLogged) {
          Navigator.of(context).pushReplacementNamed(InfoScreen.nameMenuItem);
        }
      },
      initialData: bloc.state,
      builder: (context, snappShot) {
        if (snappShot.data is IsLoggedOnStart) {
          return LoggedWidget();
        } else if (snappShot.data is IsLogged) {
          //not allowed call navigator push in build
          return ModalProgressHUD(
              inAsyncCall: true,
          child: Text(''),);
        } else if (snappShot.data is IsNotLogged) {
          return SignInAndSignUpWidget();
        }
        return Scaffold(body: Text("                Unknown event"));
      });
}

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ StreamBuilderWithListener рдмреНрд▓рд╛рдХ рд╕реЗ рд╕реНрдЯреНрд░реАрдо рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдИ рдЧрдИ рд╣реИред рдФрд░ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдпрд╛ рддреЛ LogWidget рд╡рд┐рдЬреЗрдЯ (рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд▓реЙрдЧ рдЗрди рд╣реИ) рдпрд╛ SignInAndSignUpWidget (рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрднреА рддрдХ рд▓реЙрдЧ рдЗрди рдирд╣реАрдВ рд╣реИ) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдмреНрд▓реЙрдХ рдЗрдЬрд╝рд▓реЙрдЧреНрдб рд╕реНрдерд┐рддрд┐ рджреЗрддрд╛ рд╣реИ, рддреЛ рдиреЗрд╡рд┐рдЧреЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдирдИ рд╕реНрдХреНрд░реАрди рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдмрд┐рд▓реНрдбрд░ рдореЗрдВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ (рдЬреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛), рд▓реЗрдХрд┐рди рд╢реНрд░реЛрддрд╛ рдореЗрдВред рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╡рд┐рдЬреЗрдЯреНрд╕ рдореЗрдВ, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдпрд╣рд╛рдВ рджрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣рд╛рдБ, рдкреНрд░рджрд╛рддрд╛ + StreamBuilder рдмрдВрдбрд▓ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рдмреНрд▓реЙрдХ рдХреА рд╕реНрдерд┐рддрд┐ рдмрджрд▓рддреА рд╣реИ, рд╡рд╕реНрддреБрддрдГ рд╕рдВрдкреВрд░реНрдг рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред

рдбреЗрдЯрд╛ рдХреЛ рдмреНрд▓рд╛рдХ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, TextEditingController рдФрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

dif_screen рдлрд╝рд╛рдЗрд▓

class _SignUpWidgetWidgetState extends State {
  String _email, _password;

  final TextEditingController _emailController = TextEditingController();
  final TextEditingController _passwordController = TextEditingController();

  @override
  void initState() {
    super.initState();
    _emailController.addListener(_onEmailChanged);
    _passwordController.addListener(_onPasswordChanged);
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      children: <Widget>[
        TextFormField(
          controller: _emailController,
          decoration: InputDecoration(
              labelText: 'email'),
        ),
        TextFormField(
          controller: _passwordController,
          obscureText: true,
          decoration: InputDecoration(
              labelText: 'password'),
        ),
        RaisedButton(
            child: Text('sign up'),
            onPressed: () {
              Provider.of<MainBloc>(context, listen: false).mapEventToState(
                  Registration(_email, _password));
            })
      ],
    );
  }

  @override
  void dispose() {
    _emailController.dispose();
    _passwordController.dispose();
    super.dispose();
  }

  void _onEmailChanged() {
    _email = _emailController.text;
  }

  void _onPasswordChanged() {
    _password = _passwordController.text;
  }
}
 

рдлреЛрдирдмреБрдХрд╕реНрдХреНрд░реАрди рд╡рд┐рдВрдбреЛ


рдФрд░ рдЕрдм рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рд╣рдорд╛рд░реА PhoneBookScreen рд╡рд┐рдВрдбреЛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рдпрд╣ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдЦрд┐рдбрд╝рдХреА рд╣реИ - рдпрд╣рд╛рдВ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмреНрд▓реЙрдХ рд╕реЗ 2 рдзрд╛рд░рд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╕реНрдХреНрд░реЙрд▓ рдФрд░ рдкреЗрдЬрд┐рдиреЗрд╢рди (рдкреГрд╖реНрдард╛рдВрдХрди) рдХреЗ рд╕рд╛рде рдПрдХ рд╕реВрдЪреА рднреА рд╣реИред

PhonebookScreen \ рд╕реНрдХреНрд░реАрди рдлрд╝рд╛рдЗрд▓

class PhonebookTopPart extends StatelessWidget {

  StatefulWidget caseWidget(PhonebookState state) {
    if (state is PhonebookListOpened) {
      return PhonebookList();
    //} else if (data is PhonebookCardToViewOpened) {
    }else ModalProgressHUD(
      inAsyncCall: true,
      child: Text(''),);
    return null;
  }

  @override
  Widget build(BuildContext context) {
    var bloc = Provider.of<PhonebookBloc>(context, listen: false);
    return StreamProvider<PhonebookState>(
        create: (context) => bloc.blocStream.stream,
        initialData: bloc.state,
        child: Selector<PhonebookState,PhonebookState>(
            selector: (_,state)=>state,
            shouldRebuild: (previous, next){return (previous.runtimeType!=next.runtimeType);},
            builder: (_, state, __) { return ModalProgressHUD(
                inAsyncCall: state.busy,
                child: Scaffold(
                  appBar: AppBar(
                    title: Text("Phones list"),
                  ),
                  drawer: MenuWidget(),
                  body: caseWidget(state),
                ));}
        ));
  }
}

рдбрд╛рдпрд░реЗрдХреНрдЯреНрд░реА рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕реНрдХреНрд░реАрдиреЛрдВ рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реНрдЯреНрд░реАрдордкреНрд░реЙрдЗрдбрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ - рд╕реВрдЪреА, рд╕рдВрдкрд░реНрдХ рдХрд╛рд░реНрдб, рд╕рдВрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рд╕рдВрдкрд░реНрдХ рдХрд╛рд░реНрдб, рдЖрджрд┐ред рд╕реНрдХреНрд░реАрди рдХреЗ рд▓рд┐рдП рд╡рд┐рдЬреЗрдЯ рдХреЗрд╕рд╡реЗрдЯ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рд╣реИ (рд▓реЗрдХрд┐рди рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХреЗрд╡рд▓ рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рджреГрд╢реНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдЖрдк рд╕рдВрдкрд░реНрдХ рдХрд╛рд░реНрдб рдХреЗ рд▓рд┐рдП рджреГрд╢реНрдп рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ рдФрд░ рдпрд╣ рдПрдХ рдЦрд░рд╛рдм рд╢реБрд░реБрдЖрдд рдирд╣реАрдВ рд╣реЛрдЧреАред)

рдЗрд╕ рд╕реНрдХреНрд░реАрди рдкрд░, StreamProvider + рдЪрдпрдирдХрд░реНрддрд╛ / рдЙрдкрднреЛрдХреНрддрд╛ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕реВрдЪреА рдХрд╛ рдПрдХ рд╕реНрдХреНрд░реЙрд▓ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдкреВрд░реА рд╕реНрдХреНрд░реАрди рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдирд╛ рдЙрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ (рдпрд╛рдиреА рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рд╡рд┐рдЧреЗрдЯреНрд╕ рд╕рдВрдмрдВрдзрд┐рдд рдЪрдпрдирдХрд░реНрддрд╛ / рдЙрдкрднреЛрдХреНрддрд╛ рд╕реЗ рдЖрддрд╛ рд╣реИ рдФрд░ рдкреЗрдбрд╝ рдореЗрдВ рдХрдо рд╣реЛрддрд╛ рд╣реИ)ред

рдФрд░ рдпрд╣рд╛рдВ рд╕реВрдЪреА рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реНрд╡рдпрдВ рд╣реИ:

рдлреЛрдирдмреБрдХрд╕реНрдХреНрд░реАрди рд╕реНрдХреНрд░реАрди рд╕реНрдХреНрд░реАрди

class _PhonebookListState extends State<PhonebookList> {
  ScrollController _scrollController = ScrollController();

  @override
  void initState() {
    super.initState();
    _scrollController.addListener(_scrollListener);
  }

  @override
  Widget build(BuildContext context) {
    var bloc = Provider.of<PhonebookBloc>(context, listen: false);
    var list = bloc.repo.data.list;
    return Container(
        child: StreamProvider<PhonebookState>(
            create: (context) => bloc.scrollStream.stream,
            initialData: bloc.scrollState,
            child: Consumer<PhonebookState>(
              builder: (_, state, __) {
                return ListView.builder(
                    controller: _scrollController,
                    itemCount: list.length,
                    itemBuilder: (BuildContext context, int index) {
                      return ListTile(
                        title: Text(list[index].data['name']),
                        subtitle: Text(list[index].data['phone']),
                      );
                    });
              },
            )));
  }

  void _scrollListener() {
    double delta = MediaQuery
        .of(context)
        .size
        .height * 3;
    double maxScroll = _scrollController.position.maxScrollExtent;
    double currentScroll = _scrollController.position.pixels;
    if (maxScroll - currentScroll <= delta) {
      Provider.of<PhonebookBloc>(context, listen: false)
          .mapEventToState(ScrollPhonebook());
    }
  }

  @override
  void dispose() {
    _scrollController.removeListener(_scrollListener);
    super.dispose();
  }
}

рдпрд╣рд╛рдВ рд╣рдо рджреВрд╕рд░рд╛ рд╕реНрдЯреНрд░реАрдордкреЙрдЗрдбрд░ рджреЗрдЦрддреЗ рд╣реИрдВ, рдЬреЛ рдмреНрд▓реЙрдХ рдХреА рджреВрд╕рд░реА рдзрд╛рд░рд╛ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╕реНрдХреНрд░реЙрд▓ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдкреГрд╖реНрдард╛рдВрдХрди рдХреЛ _scrollListener (рдирд┐рдпрдВрддреНрд░рдХ: _scrollController) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдорд╛рдирдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЦрд┐рдбрд╝рдХреА рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реА рдЦрд┐рдбрд╝рдХреА рдХрд╛ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣рд╛рдВ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреНрдпрд╛рджрд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рд╕рдм рдЖрдЬ рд╣реИред

рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╕рд╣реА рдХреЛрдб рджрд┐рдЦрд╛рдирд╛ рдирд╣реАрдВ рдерд╛, рдЕрд░реНрдерд╛рдд, рдЖрдк рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рдХрдИ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ - рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ "рд╡рд┐рднрд╛рдЬрди", рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд┐рдХреНрд╕рд┐рди рдФрд░ рдХрд╣реАрдВ-рдХрд╣реАрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЧрд▓реЗ рдЪрд░рдг рдореЗрдВ "рднреАрдЦ" рдХреНрдпрд╛ рд╣реИ - рдЖрдк рдПрдХ рд╕рдВрдкрд░реНрдХ рдХрд╛рд░реНрдб рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдЬреНрдЮрд╛рди рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд░рдирд╛ рдерд╛, рдЖрд╡реЗрджрди рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╡реЗрдХреНрдЯрд░ рд╕реЗрдЯ рдХрд░рдирд╛, рдлрд╝реНрд▓рдЯрд░ рдкрд░ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рдХреБрдЫ рдХреНрд╖рдгреЛрдВ рдкрд░ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рджреЗрдирд╛ рдЬреЛ рдкрд░рд┐рдЪрд┐рдд рдХреЗ рдкрд╣рд▓реЗ рдЪрд░рдгреЛрдВ рдореЗрдВ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдереЗред

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдкрдВрдЬреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЖрдк рдХрдо рд╕реЗ рдХрдо 6 рдЕрдХреНрд╖рд░реЛрдВ рдХреЗ рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА рдореЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬрдм рдкреБрди: рдЕрдзрд┐рдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкрд╛рд╕рд╡рд░реНрдб рдЙрд╕реА рддрд░рд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рджреМрд░рд╛рди рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ)ред

All Articles