рдбрд╛рд░реНрдЯ рд╕реНрдЯреНрд░реАрдо рдмреЗрд╕рд┐рдХреНрд╕

рдпрд╣ рд╕реНрдкрдВрджрди рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдкрд░ рдореЗрд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рджреВрд╕рд░рд╛ рднрд╛рдЧ рд╣реИ:



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


рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рдЖрд░рдПрдХреНрд╕ рд╕рд╣рд┐рдд рдпрд╣ рдмрд╣реБрдд рд▓рдВрдмрд╛ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕реЗ рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ред


рдЗрд╕реЗ рдмрд╣рдиреЗ рджреЛ


рдореИрдВрдиреЗ рдмрд╣реБрдд рд╕рд╛рд░реА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдкрдврд╝реАрдВ рдЬреЛ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рд╡рд╛рд╣, рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЖрд░рдПрдХреНрд╕, рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реИрдВ рдФрд░, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред


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


рдзрд╛рдЧреЗ рдХреНрдпрд╛ рд╣реИрдВ?


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



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



рдпрд╛рдж рд░рдЦреЗрдВ:


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

Rx рдХреНрдпрд╛ рд╣реИ?


Rx, рд░рд┐рдПрдХреНрдЯрд┐рд╡ рдПрдХреНрд╕рдЯреЗрдВрд╢рдиреНрд╕ рдХреЗ рд▓рд┐рдП рдЫреЛрдЯрд╛, рд╕реНрдЯреЗрд░реЙрдпрдб рд╕реНрдЯреНрд░реАрдо рд╣реИрдВред рдпрд╣ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд╕рдорд╛рди рдПрдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИ рдЬрд┐рд╕реЗ Microsoft рдЯреАрдо рджреНрд╡рд╛рд░рд╛ .Net рдврд╛рдВрдЪреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреВрдВрдХрд┐ .Net рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдЯреНрд░реАрдо рдкреНрд░рдХрд╛рд░ рдерд╛, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдлрд╝рд╛рдЗрд▓ I / O рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрдиреНрд╣реЛрдВрдиреЗ Rx рд╕реНрдЯреНрд░реАрдо рдСрдмреНрдЬрд░реНрд╡рдмрд▓реНрд╕ рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдФрд░ рдЙрдирдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЧреБрдЬрд░рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПред рдбрд╛рд░реНрдЯ рдореЗрдВ рдЕрдкрдиреА рднрд╛рд╖рд╛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдзрд╛рд░рд╛рдПрдБ рд╣реИрдВ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рднреА рдирд╣реАрдВред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЖрд░рдПрдХреНрд╕рдбрд╛рд░реНрдЯ рдкреИрдХреЗрдЬ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛; рдпрд╣ рдбрд╛рд░реНрдЯ рд╕реНрдЯреНрд░реАрдо рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдирдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдмрдврд╝рд╛рддрд╛ рд╣реИред рдореИрдВ рдЗрд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ Rx рдФрд░ RxDart рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░реВрдВрдЧрд╛ред


рдХреБрдЫ рд╢рд░реНрддреЗрдВ


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


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

рд╕реНрдЯреНрд░реАрдо рдирд┐рд░реНрдорд╛рдг


рдпрджрд┐ рдЖрдк рд╡рд┐рд╖рдп рдХрд╛ рдЕрдзреНрдпрдпрди рдЬрд╛рд░реА рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХреНрд▓реЛрди рдХрд░реЗрдВ ред рдореИрдВ рдбрд╛рд░реНрдЯ / рд╕реНрдкрдВрджрди рдкрд░реАрдХреНрд╖рдг рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред


рдПрдХ рд╕реНрдЯреНрд░реАрдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рд╕реНрдЯреНрд░реАрдордХрдВрдЯреНрд░реЛрд▓рд░ рдмрдирд╛рдПрдБ


var controller = new StreamController<String>(); controller.add("Item1"); //      

рд╕реНрдЯреНрд░реАрдордХрдВрдЯреНрд░реЛрд▓рд░ рдмрдирд╛рддреЗ рд╕рдордп рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЯрд╛рдЗрдк (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ) рдкрд╛рд╕ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ! рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рдПрдХ StreamController<List<MyObject>>() рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдЯреНрд░реАрдо рдПрдХрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдмрдЬрд╛рдп рдкреВрд░реА рд╢реАрдЯ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджреЗрдЧрд╛ред


рдЯреНрд░реИрдк рд╕реЗрдЯрд┐рдВрдЧ


рдпрджрд┐ рдЖрдк рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдХреБрдЫ рднреА рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдЯреНрд░реАрдо рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рд╣рдорд╛рд░реА рд▓рд╛рдЗрди рдиреЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рдкрдХрдбрд╝рд╛ рд╣реИред рдЕрдм рдЬрд╛рд▓ рд╕реЗрдЯ рдХрд░реЗрдВ:


 var controller = new StreamController<String>(); controller.stream.listen((item) => print(item)); //  controller.add("Item1"); controller.add("Item2"); controller.add("Item3"); 

рдЕрдм рдЬрд╛рд▓ рдХреЛ .listen() рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд░рд┐рдХреЙрд░реНрдб controller.stream.listen рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдЗрд╕реЗ рдкреАрдЫреЗ рдХреА рддрд░рдл рд╕реНрдХреНрд░реЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ 60 рдХреЗ рджрд╢рдХ рдХреЗ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрд▓реНрдмрдо, рддреЛ рдЬреЛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдЙрд╕рдХрд╛ рд╕рд╣реА рдЕрд░реНрде рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛: "рдЗрд╕ рдирд┐рдпрдВрддреНрд░рдХ рдХреА рдзрд╛рд░рд╛ рдХреЛ рд╕реБрдиреЗрдВ"


рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП .listen() рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╕реНрдЯреНрд░реАрдордХрдВрдЯреНрд░реЛрд▓рд░ рдХреЛ рдмрдирд╛рддреЗ рд╕рдордп рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реНрдЯреНрд░рд┐рдВрдЧред


рдпрджрд┐ рдЖрдк рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ


 Item1 Item2 Item3 

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


рд╕реБрдирддреЗ рд╣реБрдП рдЕрдВрдд


рдКрдкрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рдЫреЛрдЯрд╛ рд▓реЗрдХрд┐рди рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рдЫреВрдЯ рдЧрдпрд╛ред listen() рдПрдХ StreamSubscription рд▓реМрдЯрд╛рддрд╛ рд╣реИ - рдПрдХ рд╕реНрдЯреНрд░реАрдо рд╕рджрд╕реНрдпрддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯред рдЙрд╕рдХреА .cancel() рдкрджреНрдзрддрд┐ рдХреА рдХреЙрд▓ рд╕рджрд╕реНрдпрддрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрддреА рд╣реИ, рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдореБрдХреНрдд рдХрд░ рджреЗрддреА рд╣реИ, рдФрд░ рдЖрдкрдХреЗ рд╕реБрдирдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдХрд╣рдиреЗ рд╕реЗ .cancel() ред


 var controller = new StreamController<String>(); StreamSubscription subscription = controller.stream.listen((item) => print(item)); // This is the Trap controller.add("Item1"); controller.add("Item2"); controller.add("Item3"); //    ,        //  ,     Stream   await Future.delayed(Duration(milliseconds: 500)); subscription.cancel; 

рд╢реНрд░реЛрддрд╛ рдХрд╛ рд╡рд┐рд╡рд░рдг


listen() рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди listen() рдпрд╛ рддреЛ рдПрдХ рд▓реИрдореНрдмреНрдбрд╛ рдпрд╛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдлрд╝рдВрдХреНрд╢рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред


 void myPrint(String message) { print(message); } StreamSubscription subscription = controller.stream.listen((item) => print(item)); //  - StreamSubscription subscription2 = controller.stream.listen(myPrint); //    StreamSubscription subscription3 = controller.stream.listen((item) { print(item); print(item.toUpperCase); }); // - 

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


listen() рдХрд╛ рдкреВрд░рд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ listen() рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:


  /* excerpt from the API doc * The [onError] callback must be of type `void onError(error)` or * `void onError(error, StackTrace stackTrace)`. If [onError] accepts * two arguments it is called with the error object and the stack trace * (which could be `null` if the stream itself received an error without * stack trace). * Otherwise it is called with just the error object. * If [onError] is omitted, any errors on the stream are considered unhandled, * and will be passed to the current [Zone]'s error handler. * By default unhandled async errors are treated * as if they were uncaught top-level errors. * * If this stream closes and sends a done event, the [onDone] handler is * called. If [onDone] is `null`, nothing happens. * * If [cancelOnError] is true, the subscription is automatically canceled * when the first error event is delivered. The default is `false`. */ StreamSubscription<T> listen(void onData(T event), {Function onError, void onDone(), bool cancelOnError}); 

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


рд╕реНрдкрдВрджрди рдзрд╛рдЧрд╛ рдЙрджрд╛рд╣рд░рдг


рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдзреНрдпрд╛рдпреЛрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рдЕрд▓рдЧ рднрдВрдбрд╛рд░ рд╢рд╛рдЦрд╛ рдмрдирд╛рдИред
рдХреГрдкрдпрд╛ рдЙрд╕реЗ рдХреНрд▓реЛрди рдХрд░реЗрдВ


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


 class Model { int _counter = 0; StreamController _streamController = new StreamController<int>(); Stream<int> get counterUpdates => _streamController.stream; void incrementCounter() { _counter++; _streamController.add(_counter); } } 

рдпрд╣рд╛рдВ рдЖрдк рдПрдХ рдмрд╣реБрдд рд╣реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЯреЗрдореНрдкрд▓реЗрдЯ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ: рд╕рдВрдкреВрд░реНрдг рд╕реНрдЯреНрд░реАрдордХрдВрдЯреНрд░реЛрд▓рд░ рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдмрд╕ рдЗрд╕рдХреА рд╕реНрдЯреНрд░реАрдо рд╕рдВрдкрддреНрддрд┐ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред


UI рдХреЗ рд▓рд┐рдП рдореЙрдбрд▓ рдЙрдкрд▓рдмреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЗрд╕реЗ рдРрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рд╕реНрдерд┐рд░ рдХреНрд╖реЗрддреНрд░ рдмрдирд╛ рджрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ InheritedWidget рдпрд╛ ServiceLocator рджрд░реНрдЬ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЗрд╕рдХреЗ рд╕рд╛рде рджреВрд░ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛!


main.dart рдЬреЛрдбрд╝реЗрдВ:


 class _MyHomePageState extends State<MyHomePage> { int _counter = 0; StreamSubscription streamSubscription; @override void initState() { streamSubscription = MyApp.model.counterUpdates.listen((newVal) => setState(() { _counter = newVal; })); super.initState(); } //   State   ,   , //       @override void dispose() { streamSubscription?.cancel(); super.dispose(); } 

initState() рд╢реНрд░реЛрддрд╛ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП initState() рдЕрдЪреНрдЫреА рдЬрдЧрд╣ рд╣реИ, рдФрд░ рдбрд╛рд░реНрдЯреНрд╕ рдХреЗ рдЕрдЪреНрдЫреЗ рдирд╛рдЧрд░рд┐рдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рд╣рдореЗрд╢рд╛ рд╕рджрд╕реНрдпрддрд╛ рдХреЛ initState() рдЬрд╛рд░реА рдХрд░рддреЗ рд╣реИрдВ, рд╣реИ рдирд╛?


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


 floatingActionButton: new FloatingActionButton( onPressed: MyApp.model.incrementCounter, tooltip: 'Increment', child: new Icon(Icons.add), ), 

рдЗрд╕ рддрд░рд╣, рд╣рдордиреЗ рд╕реНрдЯреНрд░реАрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реНрдпреВ рдФрд░ рдореЙрдбрд▓ рдХреЗ рдмреАрдЪ рдПрдХ рд╕рд╛рдл рдЕрд▓рдЧрд╛рд╡ рдмрдирд╛рдпрд╛ред


StreamBuilder рд▓рд╛рдЧреВ рдХрд░реЗрдВ


рд╕реНрд░реЛрдд


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


 body: new Center( child: new Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ new Text( 'You have pushed the button this many times:', ), StreamBuilder<int>( initialData: 0, stream: MyApp.model.counterUpdates, builder: (context, snappShot) { String valueAsString = 'NoData'; if (snappShot != null && snappShot.hasData) { valueAsString = snappShot.data.toString(); } return Text( valueAsString, style: Theme.of(context).textTheme.display1, ); }), ], ), ), 

рд╣рдо рд▓рдЧрднрдЧ рдкреВрд░рд╛ рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ, рдореИрдВ рд╡рд╛рджрд╛ рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣рд╛рдВ рддреАрди рдмрд╛рддреЗрдВ рдмрддрд╛рдИ рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП:


  • рдкрд╣рд▓реЗ рд╕рдорд╛рдзрд╛рди рдкрд░ StreamBuilder рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдорд╣рд╛рди рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдХреЙрд▓рд┐рдВрдЧ setState() рдЗрди listen() рд╣рдореЗрд╢рд╛ рдкреВрд░реЗ рдкреГрд╖реНрда рдХреЛ рдлрд┐рд░ рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ StreamBuilder рдХреЗрд╡рд▓ рдЕрдкрдиреЗ builder рдмреБрд▓рд╛рдПрдЧрд╛
  • snapShot рдЪрд░ рдореЗрдВ рд╕рдмрд╕реЗ рд╣рд╛рд▓рд┐рдпрд╛ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рд╣рдореЗрд╢рд╛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЗрд╕рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╡реИрдз рдбреЗрдЯрд╛ рд╣реИред
  • рдХреЗ рджреМрд░рд╛рди рдкреНрд░рд╛рд░рдВрдн рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╕реНрдЯреНрд░реАрдордмреНрдпреВрд▓рд░ рдХреЛ рдкрд╣рд▓реЗ рдлреНрд░реЗрдо рдХреЗ рджреМрд░рд╛рди рдПрдХ рдореВрд▓реНрдп рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо initialData рд▓рд┐рдП рдорд╛рди рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд╣рд▓реА рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╛рдиреА рд╕реНрдХреНрд░реАрди рдХреЗ рдкрд╣рд▓реЗ рдлреНрд░реЗрдо рдХреЗ рд▓рд┐рдПред рдпрджрд┐ рд╣рдо initialData рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░реЗ рдмрд┐рд▓реНрдбрд░ рдХреЛ рдкрд╣рд▓реА рдмрд╛рд░ рдЕрдорд╛рдиреНрдп рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред initialData рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдПрдХ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рд╡рд┐рдЬреЗрдЯ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реИ рдпрджрд┐ snapShot рдЕрдорд╛рдиреНрдп рд╣реИ, рдЬреЛ рддрдм рддрдХ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рд╣рдореЗрдВ рд╡реИрдз рдбреЗрдЯрд╛ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:


     // ,           StreamBuilder<int>( stream: MyApp.model.databaseUpdates, builder: (context, snappShot) { if (snappShot != null && snappShot.hasData) { return Text( snappShot.data.toString(), style: Theme.of(context).textTheme.display1, ); } //      ,   Spinner return CircularProgressIndicator (); }) 


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



Source: https://habr.com/ru/post/hi450950/


All Articles