рдкрд░рд┐рдЪрдп
рдЬрдм рдЖрдк рдХрд┐рд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкрд╣рд▓реА рдмрд╛рдд рдпрд╣ рдЖрддреА рд╣реИ рдХрд┐ рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЛ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдЬрдм рдпрд╣ рд╕реНрдкрдВрджрди рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рддреЛ рд╕рд┐рд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧреЛрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ Google рджреЗрддрд╛ рд╣реИ - рд╡реЗрдирд┐рд▓рд╛, рд╕реНрдХреЛрдкреНрдб рдореЙрдбрд▓, рдмреАрдПрд▓рдУрд╕реА, рдПрдорд╡реАрдкреА, рдПрдорд╡реАрд╕реА, рдПрдорд╡реАрд╡реАрдПрдо, рдПрдорд╡реАрдЖрдИ, рдЖрджрд┐ред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдк рд╕рдмрд╕реЗ рдлреИрд╢рдиреЗрдмрд▓ рддрд░реАрдХреЗ рд╕реЗ рдЬрд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд░рддреЗ рд╣реИрдВ (рдЬреЛ рдХрд┐ 2018 рдореЗрдВ Google рдиреЗ рд╕рд▓рд╛рд╣ рджреА рд╣реИ) рдФрд░ BLOC рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдпрд╣ рдХреНрдпрд╛ рд╣реИ? рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреИрд╕реЗ рдХрд░реЗрдВ? рдпрд╛ рд╢рд╛рдпрдж Redux рдпрд╛ RxDart? - рд╣рд╛рд▓рд╛рдВрдХрд┐ рд░реЛрдХ "рдЕрдиреНрдп" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ ... рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реИ? рдХреНрдпрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП? рдмреНрд▓реЙрдХ, Flutter_bloc, bloc_pattern, рдЖрджрд┐?рдЙрдирдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рд╡рд┐рдХрд▓реНрдк рдФрд░ рдЙрдкрдХрд░рдг рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЪрдпрди рдЪрд░рдг рдореЗрдВ рджреЗрд░реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВредрдХрд┐рд╕рдХреЗ рд▓рд┐рдП рд▓реЗрдЦ
рдпрд╣ рдЖрд▓реЗрдЦ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдЬреЛ рд╕рд┐рд░реНрдл рдлреНрд▓рдЯрд░ рд╕реАрдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдХрд╣рд╛рдВ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВред рдореИрдВ рд╕реНрдкрдВрджрди рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ред рдпрд╣ рдЖрдкрдХреЛ рд╕реНрдкрдВрджрди "рдорд╣рд╕реВрд╕" рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рдФрд░ рдлрд┐рд░ рдЕрдкрдиреЗ рд▓рд┐рдП рддрдп рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдХреИрд╕реЗ рдФрд░ рдХрд┐рд╕ рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦреЗрдВрдЧреЗредрдкреИрдЯрд░реНрди рдФрд░ рдЙрдкрдХрд░рдгред рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдФрд░ рд╕рд░рд▓
рддреЛ, рдЪрд▓реЛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдкрд╣рд▓реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдЖрд╡реЗрджрди рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ (рдкреИрдЯрд░реНрди, рдЯреЗрдореНрдкрд▓реЗрдЯ, рдХреБрдЫ рдирд┐рд░реНрдорд╛рдг рдЕрд╡рдзрд╛рд░рдгрд╛) рд╣реИ - рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рд╡реИрд╕рд╛ рд╣реА рд╣реИ: рдмреАрдПрд▓рдУрд╕реА, рдПрдорд╡реАрдкреА, рдПрдорд╡реАрд╕реА, рдПрдорд╡реАрд╡реАрдПрдо, рдПрдорд╡реАрдЖрдИ, рдЖрджрд┐ред рдЗрдирдореЗрдВ рд╕реЗ рдХрдИ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рди рдХреЗрд╡рд▓ рдлрд╝реНрд▓рдЯрд░ рдореЗрдВ, рдмрд▓реНрдХрд┐ рдЕрдиреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдкреНрд░рд╢реНрди - рдХреНрдпрд╛ рдЪреБрдирдирд╛ рд╣реИ? рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЖрдкрдХреЛ рдпрд╣ рдЪреБрдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЦреБрдж рдХреЛ рдХреНрдпрд╛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рдХреЗрд╡рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдФрд░ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХрд╛ рдПрдХ рдЕрд▓рдЧ рдЕрд▓рдЧрд╛рд╡ рд╣реИ (рд╣рд╛рдБ, рд╣рд╛рдБ - "рдПрдХ рдХрд╛рд░ рдХрд┐рд╕реА рднреА рд░рдВрдЧ рдХреА рд╣реЛ рд╕рдХрддреА рд╣реИ рдЕрдЧрд░ рд╡рд╣ рдХрд╛рд▓реА рд╣реИ")ред рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдФрд░ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЗ рдкреГрдердХреНрдХрд░рдг рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдордЭрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рдХреЗ рд▓рд┐рдП - рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ, рдЕрдЧрд░ рдЖрдкрдиреЗ рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рд╣реИ - рдЕрдВрдд рдореЗрдВ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ "рд╕реБрдВрджрд░" рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдирд╣реАрдВ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЖрдЗрдП рд╣рдо рдЗрд╕реЗ Google - BLOC рдХреЗ рд╕рдмрд╕реЗ рдмреЗрд╡рдХреВрдл рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ рд╣реЛрдиреЗ рджреЗрдВред рд╣рдордиреЗ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛редрдЕрдм рдЙрдкрдХрд░рдг - рддреИрдпрд╛рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ - рдмреНрд▓рд╛рдХ, рдлреНрд▓рдЯрд░_рдмреНрд▓реЙрдХ, рдмреНрд▓реЛрдХ_рдкреИрдЯрди - рдЬреЛ рдмреЗрд╣рддрд░ рд╣реИ? рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ - рд╣рд░ рдХреЛрдИ рдЕрдЪреНрдЫрд╛ рд╣реИ рдЖрдк рд▓рдВрдмреЗ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдлрд┐рд░ рд╕реЗ, рдЬреИрд╕рд╛ рдХрд┐ рд╕реЗрдирд╛ рдореЗрдВ рд╣реИ - рдЕрдм рдХреЗ рд▓рд┐рдП рдЧрд▓рдд рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред рдФрд░ рдЕрдм рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдореЙрдб рдХреЗ рдорджреНрджреЗрдирдЬрд░ рдФрд░ рдкреНрд░рджрд╛рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ (рд╡рд╣реА рд▓реЛрдЧ 2019 рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВ)редрдпрд╣ рд╕рдм рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рд╡реИрд╢реНрд╡рд┐рдХ рдмреНрд▓реЙрдХ рдФрд░ рд╕реНрдерд╛рдиреАрдп рдмреНрд▓реЙрдХ рджреЛрдиреЛрдВ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдмреАрдПрд▓рдУрд╕реА (рдпрд╛рдиреА рдПрдХ рдкреИрдЯрд░реНрди, рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдирд╣реАрдВ) рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕ рдкрд░ рдлрд┐рд░ рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдмрд┐рдВрджреБ рдкрд░ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ, рди рдХрд┐ рдХреНрд▓рд╛рд╕рд┐рдХ рдмреАрдПрд▓рдУрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд - рдмреАрдПрд▓рдУрд╕реА рдХрд╛рд░реНрдпреЛрдВ (рдШрдЯрдирд╛рдУрдВ) рдореЗрдВ рд╕рд┐рдВрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░реЗрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдмреАрдПрд▓рдУрд╕реА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред рдмрд╕, рдлрд┐рд▓рд╣рд╛рд▓, рдореБрдЭреЗ рд╕рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдн рдирд╣реАрдВ рджрд┐рдЦрддреЗ - рдФрд░ рдЪреВрдВрдХрд┐ рд╡реЗ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЗ рдЬреАрд╡рди рдХреЛ рдЬрдЯрд┐рд▓ рдХреНрдпреЛрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рдП?рдбрд╛рд░реНрдЯ рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдФрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрдореНрдкреНрдпреВрдЯрд┐рдВрдЧ
рдпрд╣ рднреА рдбрд╛рд░реНрдЯ рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд╛рдпрдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдмрд╣реБрдд рдмрд╛рд░, рдбрд╛рд░реНрдЯ рдХреЗ рд╕рд╛рде рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдкрд╣рд▓реЗ рдЪрд░рдгреЛрдВ рдореЗрдВ, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ (async) рдХреЗ рдЕрд░реНрде рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд╣реАрдВ рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдкрдХреЛ рд╣рдореЗрд╢рд╛ рдпрд╛рдж рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ "рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ" рдХрд╛рд░реНрдпрдХреНрд░рдо рдПрдХ рдзрд╛рдЧреЗ рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИ, рдФрд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЗрд╡рд▓ рдЖрдкрдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЖрджреЗрд╢реЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдпрджрд┐ рдЖрдк рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЗрд╡рд▓ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдЧрдгрдирд╛ рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХреЗрд╡рд▓ async рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЕрд╡рд░реБрджреНрдз рд╣реЛ рдЬрд╛рдПрдЧрд╛ред Async рдПрдХ рдирдпрд╛ рд╕реВрддреНрд░ рдкреНрд░рд╛рд░рдВрдн рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдХреИрд╕реЗ async рдФрд░ рдХрд╛рдо рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдмрд╣реБрдд рд╕рд╛рд░реА рдЬрд╛рдирдХрд╛рд░реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреВрдВрдЧрд╛редрдпрджрд┐ рдЖрдкрдХреЛ рдХреБрдЫ рдмрдбрд╝реА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдЙрд╕реА рд╕рдордп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдмреНрд▓реЙрдХ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЧрдгрдирд╛ рдлрд╝рдВрдХреНрд╢рди (рд╡рд┐рд╢реЗрд╖ рдХрдЯреНрдЯрд░ рдХреЗ рд▓рд┐рдП рдЖрдк рдЖрдЗрд╕реЛрд▓реЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдПрдХ рдЕрд▓рдЧ рдзрд╛рдЧрд╛ рд╢реБрд░реВ рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕рдХрд╛ рдЕрдкрдирд╛ рдЕрд▓рдЧ рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░ рднреА рд╣реЛрдЧрд╛ (рдЬреЛ рдмрд╣реБрдд рджреБрдЦрдж рдФрд░ рджреБрдЦрдж рд╣реИ)ред рдЖрдк рдХреЗрд╡рд▓ рд╕рдВрджреЗрд╢ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдРрд╕реА рдзрд╛рд░рд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рд╕рд░рд▓ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░, рдЙрдирдХреА рд╕реВрдЪреА рд╣реЛ рд╕рдХрддреА рд╣реИредрдЪрд▓реЛ рдЕрднреНрдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЙрддрд░реЛ
рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдирд┐рд░реВрдкрдг
рдЖрдЗрдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ - рдЗрд╕реЗ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдЯреЗрд▓реАрдлреЛрди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╣реЛрдиреЗ рджреЗрдВред рд╣рдо рднрдВрдбрд╛рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдлрд╛рдпрд░рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ - рдпрд╣ рд╣рдореЗрдВ "рдХреНрд▓рд╛рдЙрдб" рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдореИрдВ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ Firebase рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдЫреЛрдбрд╝ рджреВрдВ (рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд▓реЗрдЦ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдореИрдВ рджреЛрд╣рд░рд╛рд╡ рдХреА рдмрд╛рдд рдирд╣реАрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВред рдиреЛрдЯ: рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХреНрд▓рд╛рдЙрдб рдлрд╛рдпрд░рд╕реНрдЯрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред)рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
рдЖрд╡реЗрджрди рд╡рд┐рд╡рд░рдг
рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдмрд╛рд╣рд░реА рд░реВрдк рд╕реЗ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗ:- рдлрд╛рдпрд░рдмреЗрд╕ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╡рд┐рдВрдбреЛ (рдЗрд╕ рд╡рд┐рдВрдбреЛ рдХрд╛ рддрд░реНрдХ рдореЗрдирдмреЙрдХ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реЛрдЧрд╛)ред
- рд╕реВрдЪрдирд╛ рд╡рд┐рдВрдбреЛ - рдЙрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧреА рдЬрд┐рд╕рдХреЗ рддрд╣рдд рдХрд╛рд░реНрдпрдХреНрд░рдо рдЕрдзрд┐рдХреГрдд рд╣реИ (рдЗрд╕ рд╡рд┐рдВрдбреЛ рдХрд╛ рддрд░реНрдХ рднреА рдореЗрдирдмреЙрдХ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реЛрдЧрд╛)ред
- рдЯреЗрд▓реАрдлреЛрди рдХреА рдПрдХ рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╡рд┐рдВрдбреЛ (рдЗрд╕ рд╡рд┐рдВрдбреЛ рдХрд╛ рддрд░реНрдХ рдПрдХ рдЕрд▓рдЧ рдлреЛрдирдмреБрдХрдмреНрд▓реЙрдХ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реЛрдЧрд╛)ред
- рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдиреВ рдЬреЛ рд╕реНрдХреНрд░реАрди рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдЧрд╛ред
рдЖрдВрддрд░рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛: рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдХреНрд░реАрди рдореЗрдВ рд╕реНрдХреНрд░реАрди рд╡рд┐рдЬреЗрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓, рдПрдХ рдмреНрд▓реЙрдХ рдлрд╝рд╛рдЗрд▓ (рд╕рдВрдмрдВрдзрд┐рдд рдмреНрд▓реЙрдХ рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде), рдПрдХ рдПрдХреНрд╢рди рдлрд╝рд╛рдЗрд▓ (рд╕рд░рд▓ рдХрдХреНрд╖рд╛рдПрдВ рдЬрд┐рдирдореЗрдВ рдмреНрд▓рд╛рдХ рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдШрдЯрдирд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рд╣реЛрддрд╛ рд╣реИ) рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдПрдХ рд░рд╛рдЬреНрдп рдлрд╝рд╛рдЗрд▓ (рдЬрд┐рд╕рдореЗрдВ рд╕рд╛рдзрд╛рд░рдг рд╕реНрдерд┐рддрд┐ рд╣реЛрддреА рд╣реИ рдЬреЛ рдмреНрд▓реЙрдХ рд╕реНрдерд┐рддрд┐ рдХреЛ рджрд░реНрд╢рд╛рддреА рд╣реИред ), рдбреЗрдЯрд╛_рдореЙрдбрд▓ рдлрд╝рд╛рдЗрд▓ рдЬрд┐рд╕рдореЗрдВ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреНрд▓рд╛рд╕ (рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░) рдФрд░ рдбреЗрдЯрд╛ рдХреНрд▓рд╛рд╕ (рд╕реНрдЯреЛрд░ рдмрд┐рдЬрдиреЗрд╕ рд▓реЙрдЬрд┐рдХ рд▓реЙрдЬрд┐рдХ рд╕реНрдЯреЛрд░) рд╣реИредрдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рд░реНрдп рдХрд░реЗрдЧрд╛ - рдЬрдм рд╕реНрдХреНрд░реАрди рдЦреЛрд▓реА рдЬрд╛рддреА рд╣реИ, рддреЛ рд╕рдВрдмрдВрдзрд┐рдд рдмреНрд▓реЙрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд░рд╛рдЬреНрдп рдорд╛рди рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдФрд░, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдХреБрдЫ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рдмреНрд▓реЙрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реНрдХреНрд░реАрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг / рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рд░рд╛рдЬреНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдмреНрд▓реЙрдХ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдХреБрдЫ рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдХреНрд░рд┐рдпрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВред рдПрдХреНрдЯреНрд╕ рдХреЛ рдмреНрд▓реЙрдХ рдХреНрд▓рд╛рд╕ рдореЗрдВ рднреЗрдЬ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЙрдиреНрд╣реЗрдВ рдореИрдкрдПрд╡реЗрдВрдЯрдЯреЙрд╕реНрдЯреЗрдЯ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдмреНрд▓реЛрдХ рдирдП рд╕реНрдЯреЗрдЯ рдХреЛ рд╕реНрдХреНрд░реАрди рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯрд╛ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реНрдХреНрд░реАрди рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредрдлрд╝рд╛рдЗрд▓ рд╕рдВрд░рдЪрдирд╛
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдПрдХ рдЦрд╛рд▓реА рд╕реНрдкрдВрджрди рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ (рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдбреЗрдореЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреБрдЫ рдлрд╛рдЗрд▓реЗрдВ рдЕрдВрддрддрдГ рдЦрд╛рд▓реА рд░рд╣реЗрдВрдЧреА):
рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╡рд┐рдВрдбреЛред 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_modelclass 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 {
@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) {
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) {
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 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 рдЕрдХреНрд╖рд░реЛрдВ рдХреЗ рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА рдореЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬрдм рдкреБрди: рдЕрдзрд┐рдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкрд╛рд╕рд╡рд░реНрдб рдЙрд╕реА рддрд░рд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рджреМрд░рд╛рди рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ)ред