
рдХрд▓ рдореЗрд░реЗ рджреЛрд╕реНрдд рдиреЗ рдХрд╣рд╛ рдХрд┐ "рдореИрдВ рд╕рд░рд▓ рдСрдлрд╝рд▓рд╛рдЗрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдВ, рдореБрдЭреЗ рдЗрди рдзрд╛рд░рд╛рдУрдВ рдФрд░ рдЙрд╕ рд╕рднреА рдЬреИрдЬрд╝ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ"ред рдореИрдВ рднреНрд░рдорд┐рдд рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрд╛, рдЗрд╕ рднреНрд░рдо рдореЗрдВ рдЕрдиреНрдп рдХреЛрдбрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдиреАрдЪреЗ, рд╡рд╕реНрддреБрддрдГ 50 рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛, рдЬреНрдЮрд╛рдд рдЙрджрд╛рд╣рд░рдг рдкрд░ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рд╣реИ:
a) рдСрдлрд▓рд╛рдЗрди / рдСрдирд▓рд╛рдЗрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ
рдмреА) рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ
рдЧ) рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рдХреЛрдб рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ
рдореЗрд░реЗ рдЬрд▓реНрджрдмрд╛рдЬреА рдХреЗ рдЖрд▓реЛрдЪрдХреЛрдВ рдХреЗ рд▓рд┐рдП ,
рдЬреЛ рдмрд┐рдирд╛ рдкреАрдЫреЗ рджреЗрдЦреЗ рд▓рдбрд╝рд╛рдИ рдореЗрдВ рднрд╛рдЧ рдЬрд╛рддрд╛ рд╣реИ, рдЙрд╕ BlocProvider
- рдПрдХ рдкреНрд░рджрд╛рддрд╛ рд╣реИ , рдореИрдВрдиреЗ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓рд╛ рдореВрд▓ рд▓реЗрдЦ рдкрдврд╝рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рд╣реИред рдПрдХ рд▓реЗрдЦ рдХрд╛ рд╕рдВрджрд░реНрдн рд╡рд░реНрдгрди рдореЗрдВ рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ flutter_bloc рдХреЗ рдкреГрд╖реНрда рдкрд░ рд╣реИред
рд╕рднреА рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬреНрдЮрд╛рдд "рдП рдХрд╛рдЙрдВрдЯрд░" рд╣реИ, рдЬреЛ рдлрд╝реНрд▓рдЯрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рдордп рдЙрддреНрдкрдиреНрди рд╣реБрдЖ рдерд╛, рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрднреНрдпрд╛рд╕реЛрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╢реБрд░реБрдЖрдд рдмрд┐рдВрджреБ рд╣реИред рддреЛ, рдЗрд╕рдореЗрдВ MyHomePage extends StatefulWidget
рд╢рд╛рдорд┐рд▓ MyHomePage extends StatefulWidget
, рд╡реЗрддрди рд╡реГрджреНрдзрд┐ рдХреА рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐ _incrementCounter
рдФрд░ setState
рдХреЗ рдкреВрд░реЗ рдкрджрд╛рдиреБрдХреНрд░рдо redraw рдХреЗ рд▓рд┐рдП setState
ред
рдЖрдЗрдП rxdart
рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдФрд░ рдХреБрдЫ рдЖрд╕рд╛рди рдЪрд░рдгреЛрдВ рдХреА рдорджрдж рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрдВ:
рдЪрд▓реЛ pubspec.yaml рдореЗрдВ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЬреЛрдбрд╝реЗрдВ
dependencies: ... rxdart: 0.22.2
рдЖрдЗрдП рдПрдХ рдХрд╛рдЙрдВрдЯрд░ рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЛ рдмрджрд▓реЗрдВ рдФрд░ рдШрдЯрдирд╛ рдЬреЛрдбрд╝реЗрдВ
class _Counter { int _count; int get count => _count; _Counter(this._count) : this.onCounterUpd = BehaviorSubject<int>.seeded(_count);
class MyHomeRxPage extends StatelessWidget { final title;
StreamBuilder<int>( stream: _counter.onCounterUpd, builder: (context, snapshot) { return Text( '${snapshot.data}', style: Theme.of(context).textTheme.display1, ); }), ... floatingActionButton: FloatingActionButton( onPressed: _counter.incrementCounter, ...
рдмрд╕ рдЗрддрдирд╛ рд╣реАред рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдРрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; import 'package:rxdart/rxdart.dart'; class _Counter { int _count; int get count => _count; _Counter(this._count) : this.onCounterUpd = BehaviorSubject<int>.seeded(_count);
рдЕрдм рдХреЛрдб рд░рд┐рдПрдХреНрдЯрд┐рд╡, рд▓реИрдХреЛрдирд┐рдХ рд╣реИ, рдЬреЛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд▓рд╛рд▓рдЪ рд╕реЗ рдореБрдХреНрдд рд╣реИ рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд▓ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдХрд╛рдЙрдВрдЯрд░ рдмрджрд▓рдирд╛ рд╣реИ, рддреЛ рдЕрдиреНрдп рд╡рд┐рдЬреЗрдЯ рдХрд╛ рдкрд╛рда рдмрджрд▓рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдпрд╣ рдЕрдиреБрд╕рд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:
StreamBuilder<int>( stream: onCounterUpd, builder: (context, snapshot) { return Text( 'You have pushed the button ${snapshot.data} times:', ); }),
рдФрд░ рдЖрд╡рд╛рдЬ!

рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП InheritedWidget
рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреИрдЯрд░реНрди рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ, рдореИрдВрдиреЗ рд╡рд╣ рдХрд░ рджрд┐рдЦрд╛рдпрд╛ рд╣реИ
- рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред
InheritedWidgets
, BlocProvider
, рдЖрджрд┐ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред - рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рдСрдлрд╝рд▓рд╛рдЗрди / рдСрдирд▓рд╛рдЗрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рдХреБрдЫ рд╕рд░рд▓ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рднреА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
- рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рд╕рд╣рд╛рдиреБрднреВрддрд┐ рдпреВрдЖрдИ, рддреНрд╡рд░рд┐рдд рдЪреМрдбрд╝реА рдХрд╛рд░реНрдпрд╛рддреНрдордХ, рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рдкрд░рддреЛрдВ рдкрд░ рдХреЛрдб рдХрд╛ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╡рд┐рднрд╛рдЬрди рд╣реИ:
MVC, MVP, MVI, MVVM, MVU
- рдЬреЛ рднреА рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВред
тЖТ рдХреЛрдб: (рд╢рд╛рдЦрд╛ iter_0004_rxdart
)
рдХреЛрдбрд┐рдВрдЧ рдореЗрдВ рдЧреБрдб рд▓рдХред