Flutter: рд░рд╛рдЬреНрдп рддрд░реНрдХ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдпрд╛ рддреЛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдпрд╛ рдмрд╣реБрдд рдХрдард┐рди рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 2 рдорд╛рд░реНрдЪ 2020  ┬╖  420рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: flutter/flutter

.

рд╣реБрдХ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреА рдЪрд░реНрдЪрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд #25280

рдЯреАрдПрд▓; рдбреАрдЖрд░: State рддрд░реНрдХ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рд╣рдо рдпрд╛ рддреЛ рдПрдХ рдЬрдЯрд┐рд▓ рдФрд░ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдиреЗрд╕реНрдЯреЗрдб build рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ рдпрд╛ рддрд░реНрдХ рдХреЛ рдХрдИ рд╡рд┐рдЬреЗрдЯреНрд╕ рдореЗрдВ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред

рдЗрд╕ рддрд░рд╣ рдХреЗ рддрд░реНрдХ рдХреЛ рдорд┐рдХреНрд╕рд┐рди рдФрд░ рди рд╣реА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред

рд╕рдВрдХрдЯ

рдПрдХрд╛рдзрд┐рдХ StatefulWidget рдореЗрдВ State рддрд░реНрдХ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдЬреИрд╕реЗ рд╣реА рд╡рд╣ рддрд░реНрдХ рдХрдИ рдЬреАрд╡рди-рдЪрдХреНрд░реЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред

рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг TextEditingController (рд▓реЗрдХрд┐рди рдпрд╣ рднреА AnimationController , рдирд┐рд╣рд┐рдд рдПрдирд┐рдореЗрд╢рди, рдФрд░ рдХрдИ рдЕрдиреНрдп) рдмрдирд╛рдиреЗ рдХрд╛ рддрд░реНрдХ рд╣реЛрдЧрд╛ред рдЙрд╕ рддрд░реНрдХ рдореЗрдВ рдХрдИ рдЪрд░рдг рд╣реЛрддреЗ рд╣реИрдВ:

  • State рдкрд░ рдПрдХ рдЪрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ред
    dart TextEditingController controller;
  • рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдХреЗ рд╕рд╛рде рдирд┐рдпрдВрддреНрд░рдХ (рдЖрдорддреМрд░ рдкрд░ initState рдХреЗ рдЕрдВрджрд░) рдмрдирд╛рдирд╛:
    dart <strong i="25">@override</strong> void initState() { super.initState(); controller = TextEditingController(text: 'Hello world'); }
  • рдЬрдм State рдХрд╛ рдирд┐рдкрдЯрд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛ рдирд┐рдкрдЯрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
    dart <strong i="30">@override</strong> void dispose() { controller.dispose(); super.dispose(); }
  • build рдЕрдВрджрд░ рдЙрд╕ рдЪрд░ рдХреЗ рд╕рд╛рде рдЬреЛ рдХреБрдЫ рднреА рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡рд╣ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
  • (рд╡реИрдХрд▓реНрдкрд┐рдХ) рдЙрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЛ debugFillProperties :
    dart void debugFillProperties(DiagnosticPropertiesBuilder properties) { super.debugFillProperties(properties); properties.add(DiagnosticsProperty('controller', controller)); }

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

рдЗрд╕ рддрд░реНрдХ рдХреЛ рд╣рд░ рдЬрдЧрд╣ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд░рдирд╛ "рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ", рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдХреЛрдб рдореЗрдВ рдХрдордЬреЛрд░реА рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИ:

  • рдХрд┐рд╕реА рдПрдХ рдЪрд░рдг рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рднреВрд▓рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдЬреИрд╕реЗ dispose рдкрд░ рдХреЙрд▓ рдХрд░рдирд╛ рднреВрд▓ рдЬрд╛рдирд╛)
  • рдпрд╣ рдХреЛрдб рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╢реЛрд░ рдЬреЛрдбрд╝рддрд╛ рд╣реИ

рдорд┐рдХреНрд╕рд┐рди рдореБрджреНрджрд╛

рдЗрд╕ рддрд░реНрдХ рдХреЛ рдХрд╛рд░рдХ рдмрдирд╛рдиреЗ рдХрд╛ рдкрд╣рд▓рд╛ рдкреНрд░рдпрд╛рд╕ рдПрдХ рдорд┐рд╢реНрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

mixin TextEditingControllerMixin<T extends StatefulWidget> on State<T> {
  TextEditingController get textEditingController => _textEditingController;
  TextEditingController _textEditingController;

  <strong i="11">@override</strong>
  void initState() {
    super.initState();
    _textEditingController = TextEditingController();
  }

  <strong i="12">@override</strong>
  void dispose() {
    _textEditingController.dispose();
    super.dispose();
  }

  <strong i="13">@override</strong>
  void debugFillProperties(DiagnosticPropertiesBuilder properties) {
    super.debugFillProperties(properties);
    properties.add(DiagnosticsProperty('textEditingController', textEditingController));
  }
}

рдлрд┐рд░ рдЗрд╕ рддрд░рд╣ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛:

class Example extends StatefulWidget {
  <strong i="17">@override</strong>
  _ExampleState createState() => _ExampleState();
}

class _ExampleState extends State<Example>
    with TextEditingControllerMixin<Example> {
  <strong i="18">@override</strong>
  Widget build(BuildContext context) {
    return TextField(
      controller: textEditingController,
    );
  }
}

рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЦрд╛рдорд┐рдпрд╛рдВ рд╣реИрдВ:

  • рдПрдХ рдорд┐рд╢реНрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рддрд┐ рдХрдХреНрд╖рд╛ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рд╣рдорд╛рд░реЗ StatefulWidget рдХреЛ рдПрдХрд╛рдзрд┐рдХ TextEditingController , рддреЛ рд╣рдо рдЕрдм рдорд┐рд╢реНрд░рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

  • рдорд┐рд╢реНрд░рдг рджреНрд╡рд╛рд░рд╛ рдШреЛрд╖рд┐рдд "рд░рд╛рдЬреНрдп" рдХрд┐рд╕реА рдЕрдиреНрдп рдорд┐рд╢реНрд░рдг рдпрд╛ State рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
    рдЕрдзрд┐рдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрджрд┐ рджреЛ рдорд┐рд╢реНрд░рд┐рдд рд╕рджрд╕реНрдп рдПрдХ рд╣реА рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рд╕рджрд╕реНрдп рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рд╕рдВрдШрд░реНрд╖ рд╣реЛрдЧрд╛ред
    рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐, рдпрджрд┐ рд╡рд┐рд░реЛрдзреА рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рдкрд╛рд╕ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рд╣реИ, рддреЛ рдпрд╣ рдЪреБрдкрдЪрд╛рдк рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рдпрд╣ рдорд┐рд╢реНрд░рдг рдХреЛ рдЖрджрд░реНрд╢ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрджрд░реНрд╢ рдФрд░ рдмрд╣реБрдд рдЦрддрд░рдирд╛рдХ рджреЛрдиреЛрдВ рдмрдирд╛рддрд╛ рд╣реИред

"рдмрд┐рд▓реНрдбрд░" рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рдПрдХ рдЕрдиреНрдп рд╕рдорд╛рдзрд╛рди StreamBuilder рдФрд░ рд╕рд╣ рдХреЗ рд╕рдорд╛рди рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

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

рдРрд╕рд╛ рд╡рд┐рдЬреЗрдЯ рдЖрдорддреМрд░ рдкрд░ рдЗрд╕ рддрд░рд╣ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:

class TextEditingControllerBuilder extends StatefulWidget {
  const TextEditingControllerBuilder({Key key, this.builder}) : super(key: key);

  final Widget Function(BuildContext, TextEditingController) builder;

  <strong i="12">@override</strong>
  _TextEditingControllerBuilderState createState() =>
      _TextEditingControllerBuilderState();
}

class _TextEditingControllerBuilderState
    extends State<TextEditingControllerBuilder> {
  TextEditingController textEditingController;

  <strong i="13">@override</strong>
  void debugFillProperties(DiagnosticPropertiesBuilder properties) {
    super.debugFillProperties(properties);
    properties.add(
        DiagnosticsProperty('textEditingController', textEditingController));
  }

  <strong i="14">@override</strong>
  void dispose() {
    textEditingController.dispose();
    super.dispose();
  }

  <strong i="15">@override</strong>
  Widget build(BuildContext context) {
    return widget.builder(context, textEditingController);
  }
}

рдлрд┐рд░ рдЗрд╕ рддрд░рд╣ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛:

class Example extends StatelessWidget {
  <strong i="19">@override</strong>
  Widget build(BuildContext context) {
    return TextEditingControllerBuilder(
      builder: (context, controller) {
        return TextField(
          controller: controller,
        );
      },
    );
  }
}

рдпрд╣ рдорд┐рд╢реНрд░рдг рдХреЗ рд╕рд╛рде рдЖрдиреЗ рд╡рд╛рд▓реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдиреНрдп рдореБрджреНрджреЛрдВ рдХреЛ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИред

  • рдЙрдкрдпреЛрдЧ рдмрд╣реБрдд рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╣реИред рдпрд╣ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдХреЛрдб рдХреА 4 рдкрдВрдХреНрддрд┐рдпрд╛рдБ + рдПрдХрд▓ рдЪрд░ рдШреЛрд╖рдгрд╛ рдХреЗ рд▓рд┐рдП рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдХреЗ рджреЛ рд╕реНрддрд░ рд╣реИрдВред
    рдпрд╣ рдФрд░ рднреА рдмреБрд░рд╛ рд╣реИ рдЕрдЧрд░ рд╣рдо рдЗрд╕реЗ рдХрдИ рдмрд╛рд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЬрдмрдХрд┐ рд╣рдо рдПрдХ рдмрд╛рд░ рджреВрд╕рд░реЗ рдХреЗ рдЕрдВрджрд░ TextEditingControllerBuilder рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдХреЛрдб рдХреА рдкрдардиреАрдпрддрд╛ рдХреЛ рдХрд╛рдлреА рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИ:

    <strong i="28">@override</strong>
    Widget build(BuildContext context) {
    return TextEditingControllerBuilder(
      builder: (context, controller1) {
        return TextEditingControllerBuilder(
          builder: (context, controller2) {
            return Column(
              children: <Widget>[
                TextField(controller: controller1),
                TextField(controller: controller2),
              ],
            );
          },
        );
      },
    );
    }
    

    рдпрд╣ рд╕рд┐рд░реНрдл рджреЛ рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рдЗрдВрдбреЗрдВрдЯ рдХреЛрдб рд╣реИред

  • рдпрд╣ рдХреБрдЫ рдУрд╡рд░рд╣реЗрдб рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрддрд┐рд░рд┐рдХреНрдд State рдФрд░ Element рдЙрджрд╛рд╣рд░рдг рд╣реИрдВред

  • TextEditingController рдмрд╛рд╣рд░ build рдмрд╛рд╣рд░ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред
    рдЕрдЧрд░ рд╣рдо рдЙрди рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдкрд░ рдХреБрдЫ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП State рдЬреАрд╡рди-рдЪрдХреНрд░ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЙрди рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП GlobalKey рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

    class Example extends StatefulWidget {
    <strong i="43">@override</strong>
    _ExampleState createState() => _ExampleState();
    }
    
    class _ExampleState extends State<Example> {
    final textEditingControllerKey =
        GlobalKey<_TextEditingControllerBuilderState>();
    
    <strong i="44">@override</strong>
    void didUpdateWidget(Example oldWidget) {
      super.didUpdateWidget(oldWidget);
    
      if (something) {
        textEditingControllerKey.currentState.textEditingController.clear();
      }
    }
    
    <strong i="45">@override</strong>
    Widget build(BuildContext context) {
      return TextEditingControllerBuilder(
        key: textEditingControllerKey,
        builder: (context, controller) {
          return TextField(controller: controller);
        },
      );
    }
    }
    
P5 crowd framework passed first triage proposal new feature

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореИрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдирдЬрд░рд┐рдП рд╕реЗ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рдЬреЛрдбрд╝реВрдВрдЧрд╛ред
рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдпрджрд┐ рд╡реЗ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рд╣реБрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ рд╕реЛрдЪрддреЗ рд╣реИрдВред

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

рдпрд╣ рдирд┐рд╣рд┐рддрддрд╛ рдореЙрдбрд▓ рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдирд╣реАрдВ рд╣реИред рдЖрдк рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рддрд░реНрдХ рд╕рднреА рдХреЙрд▓реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд┐рд░реЛрдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ - рдШрдЯрдХ рд╕реЗ рд╣реА рдкреВрд░реЗ рдХрд╕реНрдЯрдо рд╣реБрдХ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдЖрджрд┐рдо рд╣реБрдХ рддрдХред рд▓реЗрдХрд┐рди рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рд╣рдордиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдпрд╣ рд╢реЛрд░ рд╣реИ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрдВрдкреЛрдиреЗрдВрдЯ рдЗрдореНрдкреНрд▓реАрдореЗрдВрдЯреЗрдб рдЧреНрд▓реЛрдмрд▓ рд╕реНрдЯреЗрдЯ рдХреЛ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдорд╛рди рд╣реИ throw рдКрдкрд░ рдХреА рдУрд░ рд╕рдмрд╕реЗ рдХрд░реАрдм рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реАрдПрдо рдЦреЛрдЬреЛрдВ рдореЗрдВ catch рдмрдЬрд╛рдп рдЖрдк рдХреЗ рдмреНрд▓реЙрдХ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЧреБрдЬрд░ errorHandlerFrame рдХреЛрдб рдореЗрдВред

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

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

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

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

рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ, рдпрд╣рд╛рдБ рдХреБрдЫ рдЪреАрдЬреЗрдВ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд╣реБрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП "рдЕрддрд┐рд░рд┐рдХреНрдд" рдПрдкреАрдЖрдИ рдирд╣реАрдВ рд╣реИрдВред рд╡реЗ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдШрдЯрдХ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╕рд╣рдордд рд╣реВрдБ рдХрд┐ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реЗ рдмрд╣реБрдд рд╕рдореНрдореЛрд╣рдХ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреНрдпрд╛ рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрдкрдВрджрди рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдпрдХреАрдирди рдПрдХ рдЕрд▓рдЧ рд╕рдордЧреНрд░ рдкреНрд░рддрд┐рдорд╛рди рд╣реИред

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

рдореИрдВ рдЗрд╕ рдмрд╛рдд рдкрд░ рдЬреЛрд░ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐

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

рд╕рднреА 420 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

cc @dnfield @Hixie
рдЕрдиреБрд░реЛрдз рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╣реБрдХ рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдкреВрд░рд╛ рд╡рд┐рд╡рд░рдг рд╣реИред

рдореБрдЭреЗ рдЪрд┐рдВрддрд╛ рд╣реИ рдХрд┐ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░ рдЗрд╕реЗ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХрд╛ рдХреЛрдИ рднреА рдкреНрд░рдпрд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕ рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рдЫреБрдкрд╛рдПрдЧрд╛ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕реЛрдЪрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд▓реЗрдЦрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рд╣рдо рджреГрдврд╝рддрд╛ рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рд╡рд░реНрдЧ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ abstract class Disposable рд╕рд╛рде рдирд┐рдкрдЯрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрджрд┐ рдЖрдк рдЗрддрдиреЗ рдЗрдЪреНрдЫреБрдХ рд╣реИрдВ рддреЛ рдЖрдк рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рд╕рд░рд▓ рдХрдХреНрд╖рд╛ рдХреЛ рдЕрдзрд┐рдХ рдЖрд╕рд╛рдиреА рд╕реЗ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

class AutomaticDisposingState<T> extends State<T> {
  List<Disposable> _disposables;

  void addDisposable(Disposable disposable) {
    assert(!_disposables.contains(disposable));
    _disposables.add(disposable);
  }

  <strong i="8">@override</strong>
  void dispose() {
    for (final Disposable disposable in _disposables)
      disposable.dispose();
    super.dispose();
  }
}

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

<strong i="12">@override</strong>
void initState() {
  super.initState();
  controller = TextEditingController(text: 'Hello world');
  addDisposable(controller);
  addProperty('controller', controller);
}

рдХреНрдпрд╛ рд╣рдо рдбрд┐рд╕реНрдкреЛрдЬреЗрдмрд▓ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдРрд╕реА рдЯрд╛рдЗрдкрд┐рдВрдЧ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рд╕реЗ рдЪреВрдХ рд░рд╣реЗ рд╣реИрдВ?

рдореБрдЭреЗ рдЪрд┐рдВрддрд╛ рд╣реИ рдХрд┐ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░ рдЗрд╕реЗ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХрд╛ рдХреЛрдИ рднреА рдкреНрд░рдпрд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕ рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рдЫреБрдкрд╛рдПрдЧрд╛ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕реЛрдЪрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╡рд┐рдЬреЗрдЯ рдЙрд╕ рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рдЫреБрдкрд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕реЛрдЪрдирд╛ рд╣реЛрддрд╛ рд╣реИред
рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред

рдЕрдВрдд рдореЗрдВ рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдЗрд╕реЗ рдХреИрд╕реЗ рднреА рдЪрд╛рд╣рддреЗ рд╣реИрдВред


рд╕рдорд╕реНрдпрд╛ рд╕рд┐рд░реНрдл рдбрд┐рд╕реНрдкреЛрдЬрд▓ рдХреА рдирд╣реАрдВ рд╣реИред

рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЕрджреНрдпрддрди рднрд╛рдЧ рдХреЛ рднреВрд▓ рдЬрд╛рддрд╛ рд╣реИред рд╕реНрдЯреЗрдЬ рд▓реЙрдЬрд┐рдХ рдЬреАрд╡рдирдЪрдХреНрд░ рдкрд░ рднреА рднрд░реЛрд╕рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ didChangeрдирд┐рд░реНрднрд░рддрд╛рдПрдВ рдФрд░ didUpdateWidgetред

рдХреБрдЫ рдареЛрд╕ рдЙрджрд╛рд╣рд░рдг:

  • SingleTickerProviderStateMixin рдЬрд┐рд╕рдХреЗ рдЕрдВрджрд░ рддрд░реНрдХ рд╣реИ didChangeDependencies ред
  • AutomaticKeepAliveClientMixin, рдЬреЛ super.build(context) рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ

рдврд╛рдВрдЪреЗ рдореЗрдВ рдХрдИ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ рдЬрд╣рд╛рдВ рд╣рдо рд░рд╛рдЬреНрдп рддрд░реНрдХ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:

  • рд╕реНрдЯреНрд░реАрдордмрд┐рд▓реНрдбрд░
  • рдЯреНрд╡рд┐рдирдПрдиреАрдореЗрд╢рдирдмрд┐рд▓реНрдбрд░
    ...

рдпреЗ рдХреБрдЫ рдФрд░ рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рдПрдХ рдЕрджреНрдпрддрди рддрдВрддреНрд░ рдХреЗ рд╕рд╛рде рд░рд╛рдЬреНрдп рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рд╡реЗ рдЙрд╕реА рдореБрджреНрджреЗ рд╕реЗ рдкреАрдбрд╝рд┐рдд рд╣реИрдВ рдЬреИрд╕рд╛ рдХрд┐ "рдмрд┐рд▓реНрдбрд░" рднрд╛рдЧ рдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

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

рдФрд░ рдЖрдЦрд┐рд░рдХрд╛рд░ рдЙрдирдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╕рдорд╛рдзрд╛рди рд╕реНрдЯреНрд░реАрдордмрд┐рд▓реНрдбрд░ рдХреЛ "рдмреЗрджрдЦрд▓" рдХрд░рдирд╛ рд╣реИред
рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ:

  • рд╡рд┐рдЬреЗрдЯ рдХреЛ рд╕реНрдЯреЗрдЯрдлреБрд▓ рдореЗрдВ рдмрджрд▓рдирд╛
  • рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕реНрдЯреНрд░реАрдо рдХреЛ initState+didUpdateWidget+didChangeрдирд┐рд░реНрднрд░рддрд╛ рдореЗрдВ рд╕реБрдиреЗрдВ
  • рдЬрдм рдзрд╛рд░рд╛ рдмрджрд▓рддреА рд╣реИ рддреЛ didChangeDependencies/didUpdateWidget рдкрд░ рдкрд┐рдЫрд▓реА рд╕рджрд╕реНрдпрддрд╛ рд░рджреНрдж рдХрд░реЗрдВ
  • рдирд┐рдкрдЯрд╛рди рдкрд░ рд╕рджрд╕реНрдпрддрд╛ рд░рджреНрдж рдХрд░реЗрдВ

рдпрд╣ _рдмрд╣реБрдд рдХрд╛рдо_ рд╣реИ, рдФрд░ рдпрд╣ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдирд╣реАрдВ рд╣реИред

рд╕рдВрдХрдЯ

рдПрдХрд╛рдзрд┐рдХ StatefulWidget рдореЗрдВ State рддрд░реНрдХ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдЬреИрд╕реЗ рд╣реА рд╡рд╣ рддрд░реНрдХ рдХрдИ рдЬреАрд╡рди-рдЪрдХреНрд░реЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред

рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг TextEditingController (рд▓реЗрдХрд┐рди рдпрд╣ рднреА AnimationController , рдирд┐рд╣рд┐рдд рдПрдирд┐рдореЗрд╢рди, рдФрд░ рдмрд╣реБрдд рдХреБрдЫ) рдмрдирд╛рдиреЗ рдХрд╛ рддрд░реНрдХ рд╣реЛрдЧрд╛ред рдЙрд╕ рддрд░реНрдХ рдореЗрдВ рдХрдИ рдЪрд░рдг рд╣реЛрддреЗ рд╣реИрдВ:

  • State рдкрд░ рдПрдХ рдЪрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ред
    dart TextEditingController controller;
  • рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдХреЗ рд╕рд╛рде рдирд┐рдпрдВрддреНрд░рдХ (рдЖрдорддреМрд░ рдкрд░ initState рдХреЗ рдЕрдВрджрд░) рдмрдирд╛рдирд╛:
    dart <strong i="19">@override</strong> void initState() { super.initState(); controller = TextEditingController(text: 'Hello world'); }
  • рдЬрдм State рдХрд╛ рдирд┐рдкрдЯрд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛ рдирд┐рдкрдЯрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
    dart <strong i="24">@override</strong> void dispose() { controller.dispose(); super.dispose(); }
  • build рдЕрдВрджрд░ рдЙрд╕ рдЪрд░ рдХреЗ рд╕рд╛рде рдЬреЛ рдХреБрдЫ рднреА рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡рд╣ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
  • (рд╡реИрдХрд▓реНрдкрд┐рдХ) рдЙрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЛ debugFillProperties :
    dart void debugFillProperties(DiagnosticPropertiesBuilder properties) { super.debugFillProperties(properties); properties.add(DiagnosticsProperty('controller', controller)); }

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

рдЗрд╕ рддрд░реНрдХ рдХреЛ рд╣рд░ рдЬрдЧрд╣ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд░рдирд╛ "рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ", рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдХреЛрдб рдореЗрдВ рдХрдордЬреЛрд░реА рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИ:

  • рдХрд┐рд╕реА рдПрдХ рдЪрд░рдг рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рднреВрд▓рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдЬреИрд╕реЗ dispose рдкрд░ рдХреЙрд▓ рдХрд░рдирд╛ рднреВрд▓ рдЬрд╛рдирд╛)
  • рдпрд╣ рдХреЛрдб рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╢реЛрд░ рдЬреЛрдбрд╝рддрд╛ рд╣реИ

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

рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдкреНрд░рддрд┐ рд╕рдВрдкрддреНрддрд┐ рдкреНрд░рдХрд╛рд░ рдПрдХ рдорд┐рд╢реНрд░рдг рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдмрд┐рд▓реНрдбрд░ рдкреИрдЯрд░реНрди рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ (рдпрд╣ рд╕рдЪрдореБрдЪ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рдорд╛рди рд╣реА рд▓рд╛рдЗрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ)ред

NNBD рдХреЗ рд╕рд╛рде (рдХреЗ рд╕рд╛рде рд╡рд┐рд╢реЗрд╖ рд░реВрдк late final рддреЛ initiializers рд╕рдВрджрд░реНрднрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ this ) рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреБрдЫ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдХреНрд╖рдо рд╣реЛ рдЬрд╛рдПрдЧрд╛:

typedef Initializer<T> = T Function();
typedef Disposer<T> = void Function(T value);

mixin StateHelper<T extends StatefulWidget> on State<T> {
  bool _active = false;
  List<Property<Object>> _properties = <Property<Object>>[];

  <strong i="8">@protected</strong>
  void registerProperty<T>(Property<T> property) {
    assert(T != Object);
    assert(T != dynamic);
    assert(!_properties.contains(property));
    _properties.add(property);
    if (_active)
      property._initState();
  }

  <strong i="9">@override</strong>
  void initState() {
    _active = true;
    super.initState();
    for (Property<Object> property in _properties)
      property._initState();
  }

  <strong i="10">@override</strong>
  void dispose() {
    for (Property<Object> property in _properties)
      property._dispose();
    super.dispose();
    _active = false;
  }

  void debugFillProperties(DiagnosticPropertiesBuilder properties) {
    super.debugFillProperties(properties);
    for (Property<Object> property in _properties)
      property._debugFillProperties(properties);
  }
}

class Property<T> {
  Property(this.owner, this.initializer, this.disposer, [ this.debugName ]) {
    owner.registerProperty(this);
  }

  final StateHelper<StatefulWidget> owner;
  final Initializer<T> initializer;
  final Disposer<T> disposer;
  final String debugName;

  T value;

  void _initState() {
    if (initializer != null)
      value = initializer();
  }

  void _dispose() {
    if (disposer != null)
      disposer(value);
    value = null;
  }

  void _debugFillProperties(DiagnosticPropertiesBuilder properties) {
    properties.add(DiagnosticsProperty(debugName ?? '$T property', value));
  }
}

рдЖрдк рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВрдЧреЗ:

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  <strong i="14">@override</strong>
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> with StateHelper<MyHomePage> {
  late final Property<int> _counter = Property<int>(this, null, null);
  late final Property<TextEditingController> _text = Property<TextEditingController>(this,
    () => TextEditingController(text: 'button'),
    (TextEditingController value) => value.dispose(),
  );

  void _incrementCounter() {
    setState(() {
      _counter.value += 1;
    });
  }

  <strong i="15">@override</strong>
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'You have pushed the ${_text.value.text} this many times:',
            ),
            Text(
              '${_counter.value}',
              style: Theme.of(context).textTheme.headline4,
            ),
            TextField(
              controller: _text.value,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }
}

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪреАрдЬреЗрдВ рдмреЗрд╣рддрд░ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВред рдпрд╣ рдЕрднреА рднреА рдЪрд╛рд░ рд▓рд╛рдЗрдиреЗрдВ рд╣реИред

рд╡рд┐рдЬреЗрдЯ рдЙрд╕ рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рдЫреБрдкрд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕реЛрдЪрдирд╛ рд╣реЛрддрд╛ рд╣реИред

рд╡реЗ рдХреНрдпрд╛ рдЫрд┐рдкрд╛рддреЗ рд╣реИрдВ?

рд╕рдорд╕реНрдпрд╛ рд░реЗрдЦрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдпреЗ рд░реЗрдЦрд╛рдПрдБ рдХреНрдпрд╛ рд╣реИрдВред

StreamBuilder рд▓рдЧрднрдЧ stream.listen + setState + subscription.close рдЬрд┐рддрдиреА рд▓рд╛рдЗрдиреЗрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред
рд▓реЗрдХрд┐рди StreamBuilder рд▓рд┐рдЦрдирд╛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдРрд╕рд╛ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдПред
рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХреЛрдИ рдЧрд▓рддреА рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╕рд┐рд░реНрдл "рд╕реНрдЯреНрд░реАрдо рдкрд╛рд╕ рдХрд░реЗрдВ, рдФрд░ рдЗрд╕рдореЗрдВ рд╕реЗ рд╡рд┐рдЬреЗрдЯ рдмрдирд╛рдПрдВ"ред

рдЬрдмрдХрд┐ рдХреЛрдб рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╡рд┐рдЪрд╛рд░ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВ:

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

рд╡реЗ рдХреНрдпрд╛ рдЫрд┐рдкрд╛рддреЗ рд╣реИрдВ?

  • FutureBuilder/StreamBuilder рд╢реНрд░рд╡рдг рддрдВрддреНрд░ рдХреЛ рдЫреБрдкрд╛рддрд╛ рд╣реИ рдФрд░ рд╡рд░реНрддрдорд╛рди рд╕реНрдиреИрдкрд╢реЙрдЯ рдХреНрдпрд╛ рд╣реИ рдЗрд╕рдХрд╛ рдЯреНрд░реИрдХ рд░рдЦрддрд╛ рд╣реИред
    рджреЛ Future рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХрд╛ рддрд░реНрдХ рднреА рдХрд╛рдлреА рдЬрдЯрд┐рд▓ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ subscription.close() ред
  • AnimatedContainer рдкрд┐рдЫрд▓реЗ рдФрд░ рдирдП рдорд╛рдиреЛрдВ рдХреЗ рдмреАрдЪ рдПрдХ рдЯреНрд╡реАрди рдмрдирд╛рдиреЗ рдХреЗ рддрд░реНрдХ рдХреЛ рдЫреБрдкрд╛рддрд╛ рд╣реИред
  • рд╕реВрдЪреАрджреГрд╢реНрдп "рдПрдХ рд╡рд┐рдЬреЗрдЯ рдХреЛ рдорд╛рдЙрдВрдЯ рдХрд░реЗрдВ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ" рдХреЗ рддрд░реНрдХ рдХреЛ рдЫреБрдкрд╛рддрд╛ рд╣реИ

рдРрдкреНрд╕ рдХреЛ рдЖрдорддреМрд░ рдкрд░ рдбреАрдмрдЧ рдЧреБрдгреЛрдВ рдореЗрдВ рд░рд╛рдЬреНрдп рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ

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

рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧреЛрдВ рдиреЗ рдореБрдЭреЗ рд░рд┐рдПрдХреНрдЯ рдХреЗ devtool рдХреЗ рдмрд░рд╛рдмрд░ рдПрдХ рд╕рдЪреНрдЪреЗ рд╕рдордХрдХреНрд╖ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдЗрдЪреНрдЫрд╛ рд╡реНрдпрдХреНрдд рдХреА рд╣реИред рд╕реНрдкрдВрджрди рдХрд╛ devtool рдЕрднреА рддрдХ рдирд╣реАрдВ рд╣реИред
рд░рд┐рдПрдХреНрдЯ рдореЗрдВ, рд╣рдо рд╡рд┐рдЬреЗрдЯ рдХреА рд╕рднреА рд╕реНрдерд┐рддрд┐ + рдЙрд╕рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реЗ рдмрд┐рдирд╛ рдХреБрдЫ рдХрд┐рдП рд╕рдВрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

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

рдХрд┐рд╕реА рдХреЛ рдЯреНрд╡реАрдиреНрд╕ рдмрдирд╛рдиреЗ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпреЛрдВ рд╕реЛрдЪрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ?

ListView рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╡рд┐рдЬреЗрдЯ рдХреЛ рдорд╛рдЙрдВрдЯ рдХрд░рдиреЗ рдХреЗ рддрд░реНрдХ рдХреЛ рдЫреБрдкрд╛рддрд╛ рдирд╣реАрдВ рд╣реИ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ; рдпрд╣ рдПрдкреАрдЖрдИ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред

рд╕рдорд╕реНрдпрд╛ рд░реЗрдЦрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдпреЗ рд░реЗрдЦрд╛рдПрдБ рдХреНрдпрд╛ рд╣реИрдВред

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣рд╛рдБ рдХреА рдЪрд┐рдВрддрд╛ рдХреЛ рдирд╣реАрдВ рд╕рдордЭрддрд╛ред рд░реЗрдЦрд╛рдПрдБ рд╕рд╛рдзрд╛рд░рдг рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреА рддрд░рд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд▓рдЧрддреА рд╣реИрдВред рдЪреАрдЬрд╝ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░реЗрдВ, рдЪреАрдЬрд╝ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░реЗрдВ, рдЪреАрдЬрд╝ рдХрд╛ рдирд┐рдкрдЯрд╛рди рдХрд░реЗрдВред рдпрджрд┐ рдпрд╣ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реИ?

рдореИрдВ рдЖрдкрд╕реЗ рд╕рд╣рдордд рд╣реВрдБ рдХрд┐ FutureBuilder рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реИред

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

рдХрд┐рд╕реА рдХреЛ рдЯреНрд╡реАрдиреНрд╕ рдмрдирд╛рдиреЗ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпреЛрдВ рд╕реЛрдЪрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ?

ListView рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╡рд┐рдЬреЗрдЯ рдХреЛ рдорд╛рдЙрдВрдЯ рдХрд░рдиреЗ рдХреЗ рддрд░реНрдХ рдХреЛ рдЫреБрдкрд╛рддрд╛ рдирд╣реАрдВ рд╣реИ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ; рдпрд╣ рдПрдкреАрдЖрдИ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред

рд╣рдо рдЙрд╕ рдкрд░ рд╕рд╣рдордд рд╣реИрдВред рдореЗрд░рд╛ рдХрд╣рдирд╛ рдерд╛ рдХрд┐ рд╣рдо "рдпрд╣ рддрд░реНрдХ рдЫреБрдкрд╛рддрд╛ рд╣реИ" рдХреЗ рд╕рд╛рде рд╣реБрдХ рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреА рдЖрд▓реЛрдЪрдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдХреНрдпреЛрдВрдХрд┐ рд╣реБрдХ рдЬреЛ рдХрд░рддреЗ рд╣реИрдВ рд╡рд╣ TweenAnimationBuilder / AnimatedContainer /... рдХреЗ
рддрд░реНрдХ рдЫрд┐рдкрд╛ рдирд╣реАрдВ рд╣реИ

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

рдЬрдм рд╣рдо рдЗрд╕ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рд╕реНрдЯреНрд░реАрдореНрд╕ рдХреЛ рд╕реБрдирдиреЗ рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ StreamBuilder рдПрдХ _рдирд┐рд╣рд┐рдд рд╢реНрд░рд╡рдг_ рд╣реИ, рдЬрдмрдХрд┐ stream.listen _explicit_ рд╣реИред

рдЕрдзрд┐рдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, StreamBuilder рдЖрдк _cannot_ рдЙрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╕реНрдЯреНрд░реАрдо рдмрджрд▓рддреА рд╣реИ, рдпрд╛ рд╕рджрд╕реНрдпрддрд╛ рдмрдВрдж рдХрд░рдирд╛ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВред
рдЖрдк рдХрдИ StreamBuilder рдПрдХ рд╕рд╛рде рднреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ

stream.listen рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЙрдиреНрдирдд рдФрд░ рдЕрдзрд┐рдХ рддреНрд░реБрдЯрд┐-рдкреНрд░рд╡рдг рд╣реИред

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

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, flutter_hooks рдХрд╛ рд╕рдЦреНрдд рд╕рдорддреБрд▓реНрдп FutureBuilder рдФрд░ StreamBuilder :

Widget build(context) {
  final AsyncSnapshot<T> snapshot = useStream(stream);
}

рдирд┐рд░рдВрддрд░рддрд╛ рдореЗрдВ, AnimatedContainer рдФрд░ рд╕рдорд╛рди рдХреЛ useAnimatedSize / useAnimatedDecoractedBox / ... рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИ:

double opacity;

Widget build(context) {
  final double animatedOpacity = useAnimatedDouble(opacity, duration: Duration(milliseconds: 200));
  return Opacity(
    opacity: animatedOpacity,
    child: ...,
  );
}

рдореЗрд░рд╛ рдХрд╣рдирд╛ рдерд╛ рдХрд┐ рд╣рдо "рдпрд╣ рддрд░реНрдХ рдЫреБрдкрд╛рддрд╛ рд╣реИ" рдХреЗ рд╕рд╛рде рд╣реБрдХ рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреА рдЖрд▓реЛрдЪрдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ,

рдпрд╣ рддрд░реНрдХ рдирд╣реАрдВ рд╣реИред рддрд░реНрдХ рдпрд╣ рд╣реИ рдХрд┐ "рдпрд╣ рддрд░реНрдХ рдЫреБрдкрд╛рддрд╛ рд╣реИ

рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдРрд╕реЗ рддрд░реНрдХ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╕реЛрдЪрдирд╛ рдЪрд╛рд╣рд┐рдП?

рдЬреИрд╕реЗ, TextEditingController рдХрд╛ рдорд╛рд▓рд┐рдХ рдХреМрди рд╣реИ (рдЗрд╕реЗ рдХреМрди рдмрдирд╛рддрд╛ рд╣реИ, рдХреМрди рдЗрд╕рдХрд╛ рдирд┐рдкрдЯрд╛рди рдХрд░рддрд╛ рд╣реИ)ред

рдЗрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рдкрд╕рдВрдж рд╣реИ?

Widget build(context) {
  final controller = useTextEditingController();
  final focusNode = useFocusNode();
}

рд╣реБрдХ рдЗрд╕реЗ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдирд┐рдкрдЯрд╛рди рдХрд░рддрд╛ рд╣реИред

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИред

рд╣рд╛рдБ рдмрд┐рд▓реНрдХреБрд▓ред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЙрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛ рдЬреАрд╡рдирдЪрдХреНрд░ рдХреНрдпрд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рд╢рд╛рдмреНрджрд┐рдХ рджрд╛рдпрд░реЗ рдХреЗ рдЕрдВрдд рддрдХ рдЪрд▓рддрд╛ рд╣реИ? рд░рд╛рдЬреНрдп рдХрд╛ рдЬреАрд╡рдирдХрд╛рд▓? рдХреБрдЫ рдФрд░? рдЗрд╕рдХрд╛ рдорд╛рд▓рд┐рдХ рдХреМрди рд╣реИ? рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ рдХрд┐рд╕реА рдФрд░ рдХреЛ рджреЗрддрд╛ рд╣реВрдВ, рддреЛ рдХреНрдпрд╛ рд╡реЗ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ? рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдХреЛрдб рдореЗрдВ рд╣реА рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред

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

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЙрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛ рдЬреАрд╡рдирдЪрдХреНрд░ рдХреНрдпрд╛ рд╣реИ

рди рд╣реА рд╕реЛрдЪрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдпрд╣ рдЕрдм рдбреЗрд╡рд▓рдкрд░ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдирд╣реАрдВ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рд╢рд╛рдмреНрджрд┐рдХ рджрд╛рдпрд░реЗ рдХреЗ рдЕрдВрдд рддрдХ рдЪрд▓рддрд╛ рд╣реИ? рд░рд╛рдЬреНрдп рдХрд╛ рдЬреАрд╡рдирдХрд╛рд▓

рд░рд╛рдЬреНрдп рдХрд╛ рдЬреАрд╡рдирдХрд╛рд▓

рдЗрд╕рдХрд╛ рдорд╛рд▓рд┐рдХ рдХреМрди рд╣реИ?

рд╣реБрдХ рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛ рдорд╛рд▓рд┐рдХ рд╣реИред рдпрд╣ useTextEditingController рдХреЗ рдПрдкреАрдЖрдИ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛ рдорд╛рд▓рд┐рдХ рд╣реИред
рдпрд╣ useFocusNode , useScrollController , useAnimationController , рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ ...

рдПрдХ рддрд░рд╣ рд╕реЗ, рдпреЗ рдкреНрд░рд╢реНрди StreamBuilder рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ:

  • рд╣рдореЗрдВ StreamSubscription рдХреЗ рдЬреАрд╡рди-рдЪрдХреНрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ
  • рд╕рджрд╕реНрдпрддрд╛ рд░рд╛рдЬреНрдп рдХреЗ рдЬреАрд╡рдирдХрд╛рд▓ рдХреЗ рд▓рд┐рдП рдЪрд▓рддреА рд╣реИ
  • StreamBuilder StreamSubscription рдХрд╛ рдорд╛рд▓рд┐рдХ рд╣реИ

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ:

final value = useX(argument);

рдХреЗ рд╕рдЦреНрдд рд╕рдордХрдХреНрд╖ рдХреЗ рд░реВрдк рдореЗрдВ:

XBuilder(
  argument: argument,
  builder: (context, value) {

  },
);

рдЙрдирдХреЗ рд╕рдорд╛рди рдирд┐рдпрдо рдФрд░ рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИрдВред

рдпрд╣ рдЕрдм рдбреЗрд╡рд▓рдкрд░ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдирд╣реАрдВ рд╣реИ

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

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

@ рд╣рд┐рдХреНрд╕реА
рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ @rrousselGit рдХреНрдпрд╛ рдХрд╣ рд░рд╣рд╛ рдерд╛ рдХрд┐ рд╡реЗ рдПрдХ рд╣реА рдЪреАрдЬ рд╣реИрдВ рд▓реЗрдХрд┐рди рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЙрдирдХреЗ рдкрд╛рд╕ "рд╕рдорд╛рди рдирд┐рдпрдо рдФрд░ рд╡рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░" рд╣реИрдВ? рд╕рд╣реА?

рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡реЗ рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

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

рд╡рд┐рдЧреЗрдЯреНрд╕ рдХреЗ рдмреАрдЪ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реНрдЯреЗрдЯ рд▓реЙрдЬрд┐рдХ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдЬреИрд╕реА рдЪреАрдЬреЗрдВ 2019 рдХреА рд╕реНрдкрдВрджрди рдЧрд┐рд░рд╛рд╡рдЯ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╕рдордп рдореБрдЭреЗ рдпрд╛рдж рдЖ рд░рд╣реА рдереАрдВред

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрдИ рдЕрдиреНрдп рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рд╢рд╛рдпрдж рдпрд╣ рдкрд╣рд▓реЗ рд╣реА рд╣рд▓ рд╣реЛ рдЪреБрдХрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдЗрд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рдирд╣реАрдВ рдорд┐рд▓рд╛ред
рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рддреЛ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЕрдЧрд░ рд╣реБрдХ рдЬреИрд╕реА рдЪреАрдЬ рдпрд╛ рдЙрдиреНрд╣реАрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдиреНрдп рд╕рдорд╛рдзрд╛рди рдЬрд╣рд╛рдВ рдкреНрд░рдердо рд╢реНрд░реЗрдгреА рдХреЗ рдирд╛рдЧрд░рд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛред

рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмрд┐рд▓реНрдбрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рдирд╣реАрдВ рджреЗ рд░рд╣рд╛ рд╣реВрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдУрдкреА рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВред рдореИрдВ рдЬреЛ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ рд╡рд╣ рд╕рд┐рд░реНрдл initState/рдирд┐рдкрдЯрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдордЭ рдирд╣реАрдВ рдкрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХреНрдпреЛрдВ рд╣реИред

рдореИрдВ рдЙрддреНрд╕реБрдХ рд╣реВрдВ рдХрд┐ рд▓реЛрдЧ https://github.com/flutter/flutter/issues/51752#issuecomment -664787791 рдореЗрдВ рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕рд╛ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ initState/рдирд┐рдкрдЯрд╛рди рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд▓реЛрдЧ рд╣реБрдХ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рд╡реЗ рднреА рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ? рдХреНрдпрд╛ рд╣реБрдХ рдмреЗрд╣рддрд░ рд╣реИ? рдЬрд╝реНрдпрд╛рджрд╛ рдмреБрд░рд╛?

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

initState рдФрд░ dispose рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдареАрдХ рд╣реИрдВ рд▓реЗрдХрд┐рди рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдХрдИ рдФрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░рд╛рдЬреНрдп рдХрд╛ рдЯреНрд░реИрдХ рд░рдЦрдирд╛ рд╣реИред рд╣реБрдХ рд╡рд░реНрдЧ рдХреЗ рдЬреАрд╡рди рдЪрдХреНрд░ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдлреИрд▓рд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЕрдореВрд░реНрддрддрд╛ рдХреА рддрд╛рд░реНрдХрд┐рдХ рдЗрдХрд╛рдИ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд░рдЪрдирд╛ рдХрд░рддреЗ рд╣реИрдВред

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

рдореИрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдирдЬрд░рд┐рдП рд╕реЗ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рдЬреЛрдбрд╝реВрдВрдЧрд╛ред
рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдпрджрд┐ рд╡реЗ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рд╣реБрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ рд╕реЛрдЪрддреЗ рд╣реИрдВред

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

рдпрд╣ рдирд┐рд╣рд┐рддрддрд╛ рдореЙрдбрд▓ рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдирд╣реАрдВ рд╣реИред рдЖрдк рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рддрд░реНрдХ рд╕рднреА рдХреЙрд▓реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд┐рд░реЛрдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ - рдШрдЯрдХ рд╕реЗ рд╣реА рдкреВрд░реЗ рдХрд╕реНрдЯрдо рд╣реБрдХ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдЖрджрд┐рдо рд╣реБрдХ рддрдХред рд▓реЗрдХрд┐рди рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рд╣рдордиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдпрд╣ рд╢реЛрд░ рд╣реИ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрдВрдкреЛрдиреЗрдВрдЯ рдЗрдореНрдкреНрд▓реАрдореЗрдВрдЯреЗрдб рдЧреНрд▓реЛрдмрд▓ рд╕реНрдЯреЗрдЯ рдХреЛ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдорд╛рди рд╣реИ throw рдКрдкрд░ рдХреА рдУрд░ рд╕рдмрд╕реЗ рдХрд░реАрдм рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реАрдПрдо рдЦреЛрдЬреЛрдВ рдореЗрдВ catch рдмрдЬрд╛рдп рдЖрдк рдХреЗ рдмреНрд▓реЙрдХ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЧреБрдЬрд░ errorHandlerFrame рдХреЛрдб рдореЗрдВред

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

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

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

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

рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ, рдпрд╣рд╛рдБ рдХреБрдЫ рдЪреАрдЬреЗрдВ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд╣реБрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП "рдЕрддрд┐рд░рд┐рдХреНрдд" рдПрдкреАрдЖрдИ рдирд╣реАрдВ рд╣реИрдВред рд╡реЗ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдШрдЯрдХ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╕рд╣рдордд рд╣реВрдБ рдХрд┐ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реЗ рдмрд╣реБрдд рд╕рдореНрдореЛрд╣рдХ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреНрдпрд╛ рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрдкрдВрджрди рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдпрдХреАрдирди рдПрдХ рдЕрд▓рдЧ рд╕рдордЧреНрд░ рдкреНрд░рддрд┐рдорд╛рди рд╣реИред

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

рдореИрдВ рдЗрд╕ рдмрд╛рдд рдкрд░ рдЬреЛрд░ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐

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

рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмрд┐рд▓реНрдбрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рдирд╣реАрдВ рджреЗ рд░рд╣рд╛ рд╣реВрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдУрдкреА рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВред рдореИрдВ рдЬреЛ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ рд╡рд╣ рд╕рд┐рд░реНрдл initState/рдирд┐рдкрдЯрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдордЭ рдирд╣реАрдВ рдкрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХреНрдпреЛрдВ рд╣реИред

рдореИрдВ рдЙрддреНрд╕реБрдХ рд╣реВрдВ рдХрд┐ рд▓реЛрдЧ #51752 (рдЯрд┐рдкреНрдкрдгреА) рдореЗрдВ рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕рд╛ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ initState/рдирд┐рдкрдЯрд╛рди рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд▓реЛрдЧ рд╣реБрдХ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рд╡реЗ рднреА рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ? рдХреНрдпрд╛ рд╣реБрдХ рдмреЗрд╣рддрд░ рд╣реИ? рдЬрд╝реНрдпрд╛рджрд╛ рдмреБрд░рд╛?

late рдХреАрд╡рд░реНрдб рдЪреАрдЬреЛрдВ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдХреБрдЫ рдореБрджреНрджреЛрдВ рд╕реЗ рдЧреНрд░рд╕реНрдд рд╣реИ:

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

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

рдЗрд╕реА рддрд░рд╣, рд╣реБрдХ рдореЗрдВ рд╡рд┐рдЬреЗрдЯ рдХреЗ Key рдмрд░рд╛рдмрд░ рд╣реЛрддрд╛ рд╣реИ - рдЬреЛ рдХрд┐ рд░рд╛рдЬреНрдп рдХреЗ рдПрдХ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдирд╖реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЙрд╕ рдХреБрдВрдЬреА рдХреЛ рдмрджрд▓рдиреЗ рдкрд░ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

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

useMemo , рдпрд╣ рдРрд╕рд╛ рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддрд╛ рд╣реИ:

String messageId;

Widget build(context) {
  final Future<Message> message = useMemo(() => fetchMessage(messageId), [messageId]);

}

рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рднрд▓реЗ рд╣реА рдмрд┐рд▓реНрдб рд╡рд┐рдзрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ 10 рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ messageId рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ, рдбреЗрдЯрд╛-рдлрд╝реЗрдЪрд┐рдВрдЧ рдлрд┐рд░ рд╕реЗ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИред
рд▓реЗрдХрд┐рди рдЬрдм messageId рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ рдПрдХ рдирдпрд╛ Future рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ flutter_hooks рдЕрдкрдиреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдбрд╛рд░реНрдЯ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рд╖реНрдХреГрдд рд╣реИред рдореЗрд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рдкреАрдУрд╕реА рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред
рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рд╣рдореЗрдВ StatefulWidgets рдХреЗ рдХреЛрдб рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИред

рдореБрдЭреЗ рдпрд╛рдж рдирд╣реАрдВ рдерд╛ рдХрд┐ рдХрд╣рд╛рдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╛рдж рд╣реИ рдХрд┐ рдЖрджрд░реНрд╢ рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╣реБрдХ рдПрдХ рдХрд╕реНрдЯрдо рдлрд╝рдВрдХреНрд╢рди рдЬрдирд░реЗрдЯрд░ рд╣реЛрдЧрд╛, рдЬреЛ async* рдФрд░ sync* рдмрдЧрд▓ рдореЗрдВ рд╣реЛрдЧрд╛, рдЬреЛ рдбреИрди рдХреЗ рд╕реБрдЭрд╛рд╡ рдХреЗ рд╕рдорд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ use State рдмрдЬрд╛рдп useState

@gaearon

рдореИрдВ рдЗрд╕ рдмрд╛рдд рдкрд░ рдЬреЛрд░ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рд╕реНрдЯреЗрдЯрдлреБрд▓ рдЗрдирдХреИрдкреНрд╕реБрд▓реЗрдЯреЗрдб рд▓реЙрдЬрд┐рдХ рдХреА рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред

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

рдирд╣реАрдВ, рд╡рд╣ рд╕рд╣реА рд╣реИ, рдпрд╣ рдореЗрд░рд╛ рд╢рдмреНрдж рд╣реИ рдЬреЛ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдпрд╣ рдХреЛрдб рдХреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рд╕реНрд╡рдпрдВ рдХреЛрдб рдХреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред

рдпрд╣ рдлреИрдХреНрдЯрд░рд╛рдЗрдЬрд┐рдВрдЧ рд╕реНрдЯреЗрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред

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

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрд╕ рд╕рдордп рдореИрдВрдиреЗ рдЬреЛ рдХреБрдЫ рдХрд╣рд╛ рдерд╛, рдЙрд╕реЗ рдЖрдк рдЧрд▓рдд рд╕рдордЭ рд░рд╣реЗ рд╣реИрдВред

рд╕рдорд╕реНрдпрд╛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рд╣реИред

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

рдпрд╣ рдореБрджреНрджрд╛ рдХреНрдпрд╛ рдмрддрд╛рддрд╛ рд╣реИ:

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

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

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рд╕реБрдЭрд╛рд╡ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдЬреИрд╕реЗ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛:

context.onDidChangeDependencies(() {

});
context.onDispose(() {

});

рд▓реЗрдХрд┐рди рдЗрдирдХреЗ рдЕрдкрдиреЗ рдореБрджреНрджреЗ рд╣реИрдВ рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдирд╣реАрдВ рдХрд┐рдпрд╛ред

@rrousselGit , рд╕рдорд╕реНрдпрд╛ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рджрд░реНрд╢рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рд╢реАрд░реНрд╖ рдкрд░ рдореВрд▓ рд╕рдорд╕реНрдпрд╛ рдХрдерди рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред рдПрдХ рдбрд┐рдЬрд╝рд╛рдЗрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВ: https://flutter.dev/docs/resources/design-docs рдЬрд┐рд╕реЗ рд╣рдо рдПрдХ рд╕рд╛рде рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдлрд┐рд░ рд╕реЗ, рдЬреИрд╕рд╛ рдХрд┐ @Hixie рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ, рдЕрднреА рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рдмрд╕реЗ

рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдХреБрдЫ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рджреЗрдЦрд╛ рд╣реИред рдкреВрд░реА рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдореБрдЭреЗ рд╕рдордЭ рдирд╣реАрдВ рдЖ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдЧрд▓рддрдлрд╣рдореА рдХрд╣рд╛рдБ рд╕реЗ рдЖ рд░рд╣реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреНрдпрд╛ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПред
рдореВрд▓ рдЯрд┐рдкреНрдкрдгреА рдмрд╛рд░-рдмрд╛рд░ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп/рдХрд╛рд░рдХ рдмрдирд╛рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддреА рд╣реИред рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ "рд╕реНрдкрдВрджрди рдХреНрд░рд┐рдпрд╛ рд╣реИ" рд▓реЗрдХрд┐рди "рдХреБрдЫ рддрд░реНрдХ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдирд╣реАрдВ рд╣реИрдВ"

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

рдХреБрдЫ рд╣рдлрд╝реНрддреЗ рдкрд╣рд▓реЗ, рдореБрдЭреЗ рдореМрдЬреВрджрд╛ рдлрд╝реНрд▓рдЯрд░ рдРрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдкрд░ рд░рдЦрд╛ рдЧрдпрд╛ рдерд╛ред рдЙрдирдХрд╛ рд╢рд╛рдпрдж рд╡рд╣реА рдерд╛ рдЬреЛ рдпрд╣рд╛рдБ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

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

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

https://github.com/jocosocial/rainbowmonkey/blob/master/lib/src/views/forums.dart

рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдРрдкреНрд╕ рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдореИрдВ рдЕрдзреНрдпрдпрди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рддрд╛рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХреЗ?

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

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

(рдореИрдВ рддрд╣реЗ рджрд┐рд▓ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред рд▓реЗрдХрд┐рди рд╕рдореБрджрд╛рдп рдХреА рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╡рд┐рдкрд░реАрдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЪреЗрдВрдЬрдиреЛрдЯрд┐рдлрд╝рд╛рдпрд░/рд╕реБрдирдиреЗ рдпреЛрдЧреНрдп/рд╡реИрд▓реНрдпреВ рдиреЛрдЯрд┐рдлрд╝рд╛рдпрд░ рдХреЛ рдлрд╝реНрд▓рдЯрд░ рд╕реЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкреИрдХреЗрдЬ рдореЗрдВ рдирд┐рдХрд╛рд▓рдиреЗ рд╕реЗ рдорджрдж рдорд┐рд▓реЗрдЧреА)

рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдРрдкреНрд╕ рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдореИрдВ рдЕрдзреНрдпрдпрди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рддрд╛рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХреЗ?

рджреБрдЦ рдХреА рдмрд╛рдд рд╣реИ рдирд╣реАрдВред рдореИрдВ рдХреЗрд╡рд▓ рджреВрд╕рд░реЛрдВ рдХреА рдорджрдж рдХрд░рддреЗ рд╣реБрдП рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдореЗрд░реЗ рдкрд╛рд╕ рдХреЛрдИ рдРрдк рдирд╣реАрдВ рд╣реИред

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

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

рдПрдХ рдмреЗрд╣рддрд░ рдЙрджрд╛рд╣рд░рдг рдкреБрд▓-рдЯреВ-рд░реАрдлреНрд░реЗрд╢ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреБрд▓-рдЯреВ-рд░реАрдлреНрд░реЗрд╢ рдореЗрдВ, рд╣рдо рдЪрд╛рд╣реЗрдВрдЧреЗ:

  • рдкрд╣рд▓реЗ рдирд┐рд░реНрдорд╛рдг рдкрд░, рд▓реЛрдбрд┐рдВрдЧ/рддреНрд░реБрдЯрд┐ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрднрд╛рд▓реЗрдВ
  • рддрд╛рдЬрд╝рд╛ рдХрд░рдиреЗ рдкрд░:

    • рдпрджрд┐ рд╕реНрдХреНрд░реАрди рддреНрд░реБрдЯрд┐ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдереА, рддреЛ рд▓реЛрдбрд┐рдВрдЧ рд╕реНрдХреНрд░реАрди рдХреЛ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рджрд┐рдЦрд╛рдПрдВ

    • рдпрджрд┐ рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рд░рд┐рдлреНрд░реЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рд▓рдВрдмрд┐рдд HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд░рджреНрдж рдХрд░реЗрдВ

    • рдЕрдЧрд░ рд╕реНрдХреНрд░реАрди рдиреЗ рдХреБрдЫ рдбреЗрдЯрд╛ рджрд┐рдЦрд╛рдпрд╛:

    • рдирдпрд╛ рд░рд╛рдЬреНрдп рд▓реЛрдб рд╣реЛрдиреЗ рдкрд░ рдбреЗрдЯрд╛ рджрд┐рдЦрд╛рддреЗ рд░рд╣реЗрдВ

    • рдпрджрд┐ рд░рд┐рдлреНрд░реЗрд╢ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ, рддреЛ рдкрд╣рд▓реЗ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рджрд┐рдЦрд╛рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВ рдФрд░ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рд╕реНрдиреИрдХрдмрд╛рд░ рджрд┐рдЦрд╛рдПрдВ

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

    • рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд░реАрдлреНрд░реЗрд╢ рдЗрдВрдбрд┐рдХреЗрдЯрд░ рд░реАрдлреНрд░реЗрд╢ рд▓рдВрдмрд┐рдд рд╣реЛрдиреЗ рдкрд░ рджреГрд╢реНрдпрдорд╛рди рдХрд╣рддрд╛ рд╣реИ

рдФрд░ рд╣рдо рдРрд╕реА рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд╕рднреА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдФрд░ рдПрдХрд╛рдзрд┐рдХ рд╕реНрдХреНрд░реАрди рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреБрдЫ рд╕реНрдХреНрд░реАрди рдПрдХ рд╕рд╛рде рдХрдИ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рддрд╛рдЬрд╝рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВред

ChangeNotifier + provider + StatefulWidget рдХреЛ рдЗрд╕ рддрд░реНрдХ рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдХрд╛рдлреА рдХрдард┐рдирд╛рдЗрдпрд╛рдБ рд╣реЛрдВрдЧреАред

рдЬрдмрдХрд┐ рдореЗрд░реЗ рдирд╡реАрдирддрдо рдкреНрд░рдпреЛрдЧ (рдЬреЛ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдпрддрд╛ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ рдФрд░ flutter_hooks рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ) рдмреЙрдХреНрд╕ рдХреЗ рдмрд╛рд╣рд░ рдкреВрд░реЗ рд╕реНрдкреЗрдХреНрдЯреНрд░рдо рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ:

final productsProvider = FutureProvider<List<Product>>.autoDispose((ref) async {
  final cancelToken = CancelToken();
  ref.onDispose(cancelToken.cancel);

  return await repository.fetchProducts(cancelToken: cancelToken);
});

// ...

Widget build(context) {
  // Listens to the Future created by productsProvider and handles all the refresh logic
  AsyncValue<List<Product>> products = useRefreshProvider(
    productsProvider,
    // TODO consider making a custom hook to encaplusate the snackbar logic
    onErrorAfterRefresh: (err, stack) => Scaffold.of(context).showSnackBar(...),
  );

  return RefreshIndicator(
    onRefresh: () => context.refresh(productsProvider),
    child: products.when(
      loading: () {
        return const SingleChildScrollView(
          physics: AlwaysScrollableScrollPhysics(),
          child: CircularProgressIndicator(),
        );
      },
      error: (err, stack) {
        return SingleChildScrollView(
          physics: const AlwaysScrollableScrollPhysics(),
          child: Text('Oops, something unexpected happened\n$err'),
        );
      },
      data: (products) {
        return ListView.builder(
          itemCount: products.length,
          itemBuilder: (context, index) {
            return ProductItem(products[index]);
          },
        );
      },
    ),
  );
}

рдпрд╣ рддрд░реНрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЖрддреНрдордирд┐рд╣рд┐рдд рд╣реИред рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рд╕реНрдХреНрд░реАрди рдХреЗ рдЕрдВрджрд░ рдХрд┐рд╕реА рднреА рд╕рдВрд╕рд╛рдзрди рдХреЗ рд╕рд╛рде рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдФрд░ рдЕрдЧрд░ рдПрдХ рд╕реНрдХреНрд░реАрди рдПрдХ рд╕рд╛рде рдХрдИ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд░рд┐рдлреНрд░реЗрд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рддреА рд╣реИ, рддреЛ рд╣рдо рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

AsyncValue<First> first = useRefreshProvider(
  firstProvider,
  onErrorAfterRefresh: ...
);
AsyncValue<Second> second = useRefreshProvider(
  secondProvider,
  onErrorAfterRefresh: ...
);

return RefreshIndicator(
  onRefresh: () {
     return Future.wait([context.refesh(firstProvider), context.refresh(secondProvider)]);
  }
  ...
)

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

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

рдкрд░рд┐рд╡реЗрд╢реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЗрд╕ рддрд░реНрдХ рдХреЗ рд╣реЛрдиреЗ рд╕реЗ UI рд╕реЗ рд╕рднреА рддрд░реНрдХ рдирд╣реАрдВ рд╣рдЯрддреЗ
UI рдХреЛ рдЕрднреА рднреА рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдкреВрд░реНрдг рд╕реНрдХреНрд░реАрди рдореЗрдВ рдпрд╛ рд╕реНрдиреИрдХ-рдмрд╛рд░ рдореЗрдВ рддреНрд░реБрдЯрд┐ рджрд┐рдЦрд╛рдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ
рдкреГрд╖реНрда рдХреЛ рдкреБрдирдГ рд▓реЛрдб рд╣реЛрдиреЗ рдкрд░ рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд░реАрдлреНрд░реЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ

рдФрд░ рдпрд╣ рдХрдо рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рд╣реИред
рдпрджрд┐ рд░реЗрдВрдбрд░рд┐рдВрдЧ рд▓реЙрдЬрд┐рдХ рдкрд░рд┐рд╡реЗрд╢реА рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрдЬрд╛рдп рд╡рд┐рдЧреЗрдЯреНрд╕ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ, рддреЛ рдпрд╣ _any_ Future рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧрд╛рдФрд░ рд╕реАрдзреЗ рд╕реНрдкрдВрджрди рдХреЗ рдЕрдВрджрд░ рднреА рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

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

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

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдо рд╕реБрд╡рд┐рдзрд╛ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдФрд░ рдЗрд╕рдХреА рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдпрддрд╛ рдкрд░ рд╕рд╣рдордд рд╣реИрдВред
рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдРрд╕реА рд╕реБрд╡рд┐рдзрд╛ рдЖрд╕рд╛рди рд╣реИ?

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

рд▓реЗрдХрд┐рди рдЖрдк рд╕реНрдкрдВрджрди рдХреЗ рдЯреЗрдХ рд▓реАрдб рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИрдВред
рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рдкрд░ рднреА, рдЖрдкрдХреЗ рдкрд╛рд╕ рддреБрд░рдВрдд рд╕рдорд╛рдзрд╛рди рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдХреМрд╢рд▓ рд╣реЛрдЧрд╛ред

рдлрд┐рд░ рднреА рджреВрд╕рд░реА рддрд░рдл, рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд▓реЛрдЧ рдпрд╣ рдирд╣реАрдВ рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдореЗрдВ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИ:

FutureBuilder<User>(
  future: fetchUser(),
  builder: ...,
)

рдпрд╣ рддрдереНрдп рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд┐рджреНрдз рд╣реЛрддрд╛ рд╣реИ рдХрд┐ StackOverflow рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ Q/AI рдХрд┐рддрдирд╛ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИред

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд░рд╛рдЬреНрдп рддрд░реНрдХ рдХреЛ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдФрд░ рдордЬрдмреВрдд рддрд░реАрдХреЗ рд╕реЗ рдЕрдореВрд░реНрдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ (рдЕрдиреНрдпрдерд╛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдирд╛рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ)ред
рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдФрд░ рдЕрдиреБрднрд╡ рджреЛрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

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

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдРрдк рдХреНрдпрд╛ рд╣реИ, рдЖрдкрдХрд╛ рд░рд╛рдЬреНрдп рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рдЗрддреНрдпрд╛рджрд┐ред рдпрджрд┐ рдпрд╣рд╛рдВ рдкреНрд░рд╢реНрди рдХреЗрд╡рд▓ "рдЖрдк рдРрдк рд╕реНрдерд┐рддрд┐ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ" рддреЛ рдЙрддреНрддрд░ рд╣реБрдХ рдХреА рддрд░рд╣ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдмрд╣реБрдд рд╕рд╛рд░реЗ рджрд╕реНрддрд╛рд╡реЗрдЬ рд╣реИрдВ рдЬреЛ рдЗрд╕реЗ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рддрдХрдиреАрдХреЛрдВ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ ... рдореВрд▓ рд░реВрдк рд╕реЗ, рдпрд╣ рд╕реЗрдЯ рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝: https://flutter.dev/docs/Development/data-and-backend/state-mgmt

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

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

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

рдореБрдЭреЗ рд╣реБрдХ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рд╕реЗ рдХреЛрдИ рдЖрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИред рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореИрдВ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВ, рдХреБрдЫ рднреА рдЗрд╕реЗ рд░реЛрдХ рдирд╣реАрдВ рд░рд╣рд╛ рд╣реИред (рдпрджрд┐ рдХреЛрдИ _is_ рдЙрд╕реЗ рд░реЛрдХ рд░рд╣рд╛ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдмрдЧ рджрд░реНрдЬ рдХрд░реЗрдВред)

рдпрд╣ рдмрдЧ рд╣реБрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдпрд╣ "рд░рд╛рдЬреНрдп рддрд░реНрдХ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рдХрдард┐рди/рдХрдард┐рди рд╣реИ" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рдФрд░ рдореИрдВ рдЕрднреА рднреА рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдШрд░реНрд╖ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕реНрдкрдВрджрди рдореЗрдВ рдХрд┐рд╕реА рднреА рдмрджрд▓рд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИред рдРрд╕реЗ рдХрдИ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ (рд╣реБрдХ рд╕рд╣рд┐рдд) рдпрд╣ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕реА рдХреЗ рдЖрд╡реЗрджрди рдХреЛ рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрд░рдЪрд┐рдд рдХрд░рдХреЗ рд╡рд░реНрдмреЛрд╕рд┐рдЯреА рд╕реЗ рдмрдЪрдирд╛ рдХреИрд╕реЗ рд╕рдВрднрд╡ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБрдд рд╕рд╛рд░реЗ рджрд╕реНрддрд╛рд╡реЗрдЬ рд╣реИрдВред

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

рдореИрдВ рдЖрдкрд╕реЗ рд╕рд╣рдордд рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рднреА рдЙрд▓рдЭрди рдореЗрдВ рд╣реВрдВ рдХрд┐ рдлрд╝реНрд▓рдЯрд░ рдХреЛ рд╣реБрдХ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдореВрд▓рднреВрдд рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ flutter_hooks рдкреИрдХреЗрдЬ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИред

рдореИрдВ рдЕрднреА рднреА рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдШрд░реНрд╖ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕реНрдкрдВрджрди рдореЗрдВ рдХрд┐рд╕реА рднреА рдмрджрд▓рд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИред

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

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

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреА рдЬрд░реВрд░рдд рд╣реИред
рдпрд╛рдж рд░рдЦреЗрдВ: рд░рд┐рдПрдХреНрдЯ рдЯреАрдо рдХреЗ рд▓рдХреНрд╖реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реБрдХ рдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдирд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ JSX рдХреЗ рд╕рд╛рдеред

рднрд╛рд╖рд╛ рд╕рдорд░реНрдерди рдХреЗ рдмрд┐рдирд╛ рднреА, рд╣рдореЗрдВ рдЕрднреА рднреА рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ; рдбрд╛рд░реНрдЯрдкреИрдб; рд╕реНрдкрдВрджрди/devtools; рдФрд░ рдлрд╝реНрд▓рдЯрд░ рджреНрд╡рд╛рд░рд╛ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рднреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪреАрдЬреЛрдВ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд╣реБрдХ (рдЬреИрд╕реЗ рдирд┐рд╣рд┐рдд рдПрдирд┐рдореЗрд╢рди, рдлрд╝реЙрд░реНрдо, рдФрд░ рдмрд╣реБрдд рдХреБрдЫ)ред

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

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

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

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

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

рдореИрдВ рдЙрд╕ рдЪрд┐рдВрддрд╛ рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд░рд╛рдЬреНрдп рдкреНрд░рдмрдВрдзрди рд╕рдорд╛рдзрд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИред

рдРрд╕реА рд╕реБрд╡рд┐рдзрд╛ рдЗрдирд╣реЗрд░рд┐рдЯреЗрдбрд╡рд┐рдЬреЗрдЯ рдФрд░ рд╕реНрдЯреЗрдЯрдлреБрд▓рд╡рд┐рдЬреЗрдЯ рдХреЗ рдХрд░реАрдм рд╣реИред рдпрд╣ рдПрдХ рдирд┐рдореНрди рд╕реНрддрд░ рдХрд╛ рдЖрджрд┐рдо рд╣реИ, рдЬреЛ рдПрдХ рднрд╛рд╖рд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬрд┐рддрдирд╛ рдХрдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд╣реБрдХ рдврд╛рдВрдЪреЗ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рднрд╛рдЧреНрдп рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рджреВрд╕рд░рд╛ рдорд╛рд░реНрдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

context.onDispose(() {

});

рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреА рдШрдЯрдирд╛ рд╢реНрд░реЛрддрд╛ред
рд▓реЗрдХрд┐рди рдврд╛рдВрдЪреЗ рдХреЗ рдмрд╛рд╣рд░ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЯреАрдо рдХреНрдпрд╛ рд▓реЗрдХрд░ рдЖрдПрдЧреАред
рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕ рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдмрд╛рд╣рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдРрд╕рд╛ рд╕рдорд╛рдзрд╛рди рд╕реАрдзреЗ Element . рдХреЗ рдмрдЧрд▓ рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП

рдХреНрдпрд╛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЗрд╕рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВ?

(рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджреЗ рдкрд░ рдмрд╛рдд рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рд╣рд╛рд▓рд╛рдВрдХрд┐ред рдпрд╣ рдпрд╣рд╛рдВ рд╡рд┐рд╖рдп рд╕реЗ рд╣рдЯрдХрд░ рд╣реИред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреНрд░рддрд┐ рд╕рдорд╕реНрдпрд╛ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд▓реЛрдЧ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕рд╣реА рдЬрдЧрд╣ рдкрд░ рд╕рдорд╛рдзрд╛рди рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рд╕реНрдкрд╖реНрдЯ рдХрд░реЗрдВ рдХрд┐ рдХреИрд╕реЗ context.onDispose рд╢рдмреНрджрд╛рдбрдВрдмрд░ рдХреЗ рд╕рд╛рде рдорджрдж рдХрд░реЗрдЧрд╛ред)

рдореБрдЭреЗ рджреГрдврд╝рддрд╛ рд╕реЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреБрдЫ рд╡рд╛рдХрдИ рдЕрдЪреНрдЫреЗ рднрд╛рд╖рд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рд▓реЗрдХрд░ рдЖ рд╕рдХрддреЗ рд╣реИрдВред

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

рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╣рдо рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ рдХрд┐ рд╡реЗ VM рдФрд░ JS рд░рдирдЯрд╛рдЗрдо рджреЛрдиреЛрдВ рдореЗрдВ рдХреИрд╕реЗ рдФрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреИрд╕реЗ context.onDispose рд╢рдмреНрджрд╛рдбрдВрдмрд░ рдХреЗ рд╕рд╛рде рдорджрдж рдХрд░реЗрдЧрд╛ред)

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

рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ context.onDispose рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рд╡рд░реНрддрдорд╛рди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИ:

AnimationController controller;

<strong i="11">@override</strong>
void initState() {
  controller = AnimationController(...);
}

<strong i="12">@override</strong>
void dispose() {
  controller.dispose();
}

рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реИ:

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

context.onDispose , рд╣рдо рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

<strong i="21">@override</strong>
void initState() {
  controller = AnimationController(...);
  context.onDispose(controller.dispose);
}

рджрд┐рд▓рдЪрд╕реНрдк рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ:

  • рдпрд╣ рдЕрдм рд╡рд░реНрдЧ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рд╕рд╛рде рдХрд╕рдХрд░ рдпреБрдЧреНрдорд┐рдд рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
    рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ рдЕрд░реНрдз-рдЬрдЯрд┐рд▓ рддрд░реНрдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:
    ``` рдбрд╛рд░реНрдЯ
    рдПрдирд┐рдореЗрд╢рди рдирд┐рдпрдВрддреНрд░рдХ рдХреБрдЫ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рд▓реЙрдЬрд┐рдХ (рдмрд┐рд▓реНрдб рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ рд╕рдВрджрд░реНрдн) {
    рдЕрдВрддрд┐рдо рдирд┐рдпрдВрддреНрд░рдХ = рдПрдирд┐рдореЗрд╢рди рдирд┐рдпрдВрддреНрд░рдХ (...);
    рдХрдВрдЯреНрд░реЛрд▓рд░.рдСрдирдбрд┐рд╕реНрдкреЛрдЬ (рдХрдВрдЯреНрд░реЛрд▓рд░.рдбрд┐рд╕реНрдкреЛрдЬ);
    рдирд┐рдпрдВрддреНрд░рдХред рдЖрдЧреЗ ();
    рд╢реВрдиреНрдп рд╢реНрд░реЛрддрд╛ () {}
    рдирд┐рдпрдВрддреНрд░рдХред рдПрдб рд▓рд┐рд╕реНрдЯрдирд░ (рд╢реНрд░реЛрддрд╛);
    рд╕рдВрджрд░реНрдн.рдСрдирдбрд┐рд╕реНрдкреЛрдЬ (() => рдХрдВрдЯреНрд░реЛрд▓рд░.рд░рд┐рдореВрд╡ рд▓рд┐рд╕реНрдЯрдирд░ (рд╢реНрд░реЛрддрд╛));
    }
    ...

@ рдУрд╡рд░рд░рд╛рдЗрдб
рд╢реВрдиреНрдп initState () {
рдирд┐рдпрдВрддреНрд░рдХ = рдХреБрдЫ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рд▓реЙрдЬрд┐рдХ (рд╕рдВрджрд░реНрдн);
}
```

  • рд╕рднреА рддрд░реНрдХ рдПрдХ рд╕рд╛рде рдмрдВрдбрд▓ рдХрд┐рдП рдЧрдП рд╣реИрдВред рднрд▓реЗ рд╣реА рд╡рд┐рдЬреЗрдЯ рейрежреж рд▓рдВрдмрд╛ рд╣реЛ рдЬрд╛рдП, рдлрд┐рд░ рднреА controller рдХрд╛ рддрд░реНрдХ рдЕрднреА рднреА рдЖрд╕рд╛рдиреА рд╕реЗ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ:

  • context.myLifecycle(() {...}) рдЧрд░реНрдо-рдкреБрдирдГ рд▓реЛрдб рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ
  • рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ someReusableLogic StatefulWidget рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╡рд┐рдЬреЗрдЯ рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рдХрд╕рдХрд░ рдпреБрдЧреНрдорд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдЧреБрдгреЛрдВ рдХреЛ рдХреИрд╕реЗ рдкрдврд╝рд╛ рдЬрд╛рдПред
    рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, AnimationController рдХреЗ Duration рдХреЛ рд╡рд┐рдЬреЗрдЯ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЙрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдЬрд╣рд╛рдВ рдЕрд╡рдзрд┐ рдмрджрд▓рддреА рд╣реИред
  • рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреИрд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП рдЬреЛ рдПрдХ рд╡рд╕реНрддреБ рджреЗрддрд╛ рд╣реИ рдЬреЛ рд╕рдордп рдХреЗ рд╕рд╛рде рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ, рдмрд┐рдирд╛ ValueNotifier рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓рд┐рдП рдФрд░ рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд┐рдП рдмрд┐рдирд╛

    • рдпрд╣ рдЧрдгрдирд╛ рд╡рд╛рд▓реЗ рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред


рдореИрдВ рдПрдХ рднрд╛рд╖рд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреВрдВрдЧрд╛ред рдореЗрд░реЗ рдкрд╛рд╕ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрднреА рдмрд╛рдд рдХрд░рдиреЗ рд▓рд╛рдпрдХ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред

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

рдареАрдХред рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдПрдХ рдирдпрд╛ рдмрдЧ рджрд░реНрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЙрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмрд╛рдд рдХрд░рддрд╛ рд╣реИ? рдЗрд╕ рдмрдЧ рдХреЛ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ "рд░рд╛рдЬреНрдп рддрд░реНрдХ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рдХрдард┐рди/рдХрдард┐рди рд╣реИ"ред рдЕрдЧрд░ рд╡рд░реНрдмреЛрд╕рд┐рдЯреА рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реИ рддреЛ _this_ рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реИред

context.onDispose , рд╣рдо рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

<strong i="11">@override</strong>
void initState() {
  controller = AnimationController(...);
  context.onDispose(controller.dispose);
}

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВ context рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ (рдФрд░ onDispose рд╣рдорд╛рд░реЗ рдирд╛рдордХрд░рдг рд╕рдореНрдореЗрд▓рдиреЛрдВ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддрд╛ рд╣реИ)ред рдпрджрд┐ рдЖрдк рдирд┐рдкрдЯрд╛рди рдХреЗ рджреМрд░рд╛рди рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреАрдЬреЛрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдк рдЗрд╕реЗ рдЖрдЬ рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

mixin StateHelper<T extends StatefulWidget> on State<T> {
  List<VoidCallback> _disposeQueue;

  void queueDispose(VoidCallback callback) {
    _disposeQueue ??= <VoidCallback>[];
    _disposeQueue.add(callback);
  }

  <strong i="17">@override</strong>
  void dispose() {
    if (_disposeQueue != null) {
      for (VoidCallback callback in _disposeQueue)
        callback();
    }
    super.dispose();
  }
}

рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдмреБрд▓рд╛рдУ:

class _MyHomePageState extends State<MyHomePage> with StateHelper<MyHomePage> {
  TextEditingController controller;

  <strong i="21">@override</strong>
  void initState() {
    super.initState();
    controller = TextEditingController(text: 'button');
    queueDispose(controller.dispose);
  }

  ...
AnimationController someReusableLogic(BuildContext context) {
  final controller = AnimationController(...);
  controller.onDispose(controller.dispose);
  controller.forward();
  void listener() {}
  controller.addListener(listener);
  context.onDispose(() => controller.removeListener(listener));
}
...

<strong i="25">@override</strong>
void initState() {
  controller = someReusableLogic(context);
}

рдЖрдк рднреА рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

AnimationController someReusableLogic<T extends StatefulWidget>(StateHelper<T> state) {
  final controller = AnimationController(...);
  state.queueDispose(controller.dispose);
  controller.forward();
  void listener() {}
  controller.addListener(listener);
  state.queueDispose(() => controller.removeListener(listener));
  return controller;
}
...

<strong i="6">@override</strong>
void initState() {
  controller = someReusableLogic(this);
}

рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ:

  • context.myLifecycle(() {...}) рдЧрд░реНрдо-рдкреБрдирдГ рд▓реЛрдб рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ

рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ initState рдореЗрдВ рдмреБрд▓рд╛рдП рдЧрдП рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ? рдХреНрдпрд╛ рдореИрдВ рдХреБрдЫ рднреВрд▓ рд░рд╣рд╛ рд╣реВрдБ?

  • рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ someReusableLogic StatefulWidget рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╡рд┐рдЬреЗрдЯ рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рдХрд╕рдХрд░ рдпреБрдЧреНрдорд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдЧреБрдгреЛрдВ рдХреЛ рдХреИрд╕реЗ рдкрдврд╝рд╛ рдЬрд╛рдПред
    рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, AnimationController рдХреЗ Duration рдХреЛ рд╡рд┐рдЬреЗрдЯ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЙрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдЬрд╣рд╛рдВ рдЕрд╡рдзрд┐ рдмрджрд▓рддреА рд╣реИред

рдирд┐рдкрдЯрд╛рди рдХрддрд╛рд░ рдХреА рддрд░рд╣ рд╣реА рдПрдХ didChangeWidget рдХрддрд╛рд░ рдЬреЛрдбрд╝рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ:

mixin StateHelper<T extends StatefulWidget> on State<T> {
  List<VoidCallback> _disposeQueue;
  List<VoidCallback> _didUpdateWidgetQueue;

  void queueDispose(VoidCallback callback) {
    _disposeQueue ??= <VoidCallback>[];
    _disposeQueue.add(callback);
  }

  void queueDidUpdateWidget(VoidCallback callback) {
    _didUpdateWidgetQueue ??= <VoidCallback>[];
    _didUpdateWidgetQueue.add(callback);
  }

  <strong i="24">@override</strong>
  void didUpdateWidget(T oldWidget) {
    super.didUpdateWidget(oldWidget);
    if (_didUpdateWidgetQueue != null) {
      for (VoidCallback callback in _didUpdateWidgetQueue)
        callback();
    }
  }

  <strong i="25">@override</strong>
  void dispose() {
    if (_disposeQueue != null) {
      for (VoidCallback callback in _disposeQueue)
        callback();
    }
    super.dispose();
  }
}

AnimationController conditionalAnimator(StateHelper state, ValueGetter<bool> isAnimating, VoidCallback listener) {
  final controller = AnimationController(vsync: state as TickerProvider, duration: const Duration(seconds: 1));
  state.queueDispose(controller.dispose);
  controller.addListener(listener);
  state.queueDispose(() => controller.removeListener(listener));
  if (isAnimating())
    controller.repeat();
  state.queueDidUpdateWidget(() {
    if (isAnimating()) {
      controller.repeat();
    } else {
      controller.stop();
    }
  });
  return controller;
}

рдЗрд╕ рддрд░рд╣ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛:

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  <strong i="6">@override</strong>
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyHomePage(animating: false),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.animating}) : super(key: key);

  final bool animating;

  <strong i="7">@override</strong>
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> with StateHelper<MyHomePage>, SingleTickerProviderStateMixin {
  AnimationController controller;

  <strong i="8">@override</strong>
  void initState() {
    super.initState();
    controller = conditionalAnimator(this, () => widget.animating, () { print(controller.value); });
  }

  <strong i="9">@override</strong>
  Widget build(BuildContext context) {
    return Center(
      child: FadeTransition(
        opacity: controller,
        child: Text('Hello', style: TextStyle(fontSize: 100.0, color: Colors.white)),
      ),
    );
  }
}
  • рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ ValueNotifier рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓рд┐рдП рдмрд┐рдирд╛ рдФрд░ рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд┐рдП рдмрд┐рдирд╛, рд╕рдордп рдХреЗ рд╕рд╛рде рдмрджрд▓ рд╕рдХрдиреЗ рд╡рд╛рд▓реА рд╡рд╕реНрддреБ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреИрд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП

    • рдпрд╣ рдЧрдгрдирд╛ рд╡рд╛рд▓реЗ рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ, ValueNotifier рдореЗрдВ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИ рдФрд░ рдХрд╣реЗрдВ, ValueListenableBuilder?

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

рдареАрдХред рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдПрдХ рдирдпрд╛ рдмрдЧ рджрд░реНрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЙрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмрд╛рдд рдХрд░рддрд╛ рд╣реИ? рдЗрд╕ рдмрдЧ рдХреЛ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ "рд░рд╛рдЬреНрдп рддрд░реНрдХ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рдХрдард┐рди/рдХрдард┐рди рд╣реИ"ред рдЕрдЧрд░ рд╡рд░реНрдмреЛрд╕рд┐рдЯреА рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реИ рддреЛ рдпрд╣ рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реИред

рдореИрдВ рдЗрд╕ рдЪрд░реНрдЪрд╛ рд╕реЗ рдХрд╛рдлреА рдЕрд╕рд╣рдЬ рд╣реЛрдиреЗ рд▓рдЧрд╛ рд╣реВрдВред рдЗрд╕ рдмрд┐рдВрджреБ рдХрд╛ рдЙрддреНрддрд░ рдореИрдВ рдкрд╣рд▓реЗ рднреА рджреЗ рдЪреБрдХрд╛ рд╣реВрдБ:
рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╡рд┐рд╖рдп рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рд╣реИ, рдФрд░ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдореБрджреНрджреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╡рд░реНрдмреЛрд╕рд┐рдЯреА рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рддреА рд╣реИ; рдкреНрд░рд╛рдердорд┐рдХ рд╡рд┐рд╖рдп рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВред

рд╡рд░реНрдмреЛрд╕рд┐рдЯреА рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╢реАрд░реНрд╖ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдмреБрд▓реЗрдЯ рдмрд┐рдВрджреБ рд╣реИ, рдФрд░ рд╡рд╣ рд╣реИ StreamBuilder рдХреЗ рд╕рд╛рде, рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдХреЗ 2 рд╕реНрддрд░реЛрдВ рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░рдирд╛ред

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рд╕рдВрджрд░реНрдн рдХреНрдпреЛрдВ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ [...]ред рдпрджрд┐ рдЖрдк рдирд┐рдкрдЯрд╛рди рдХреЗ рджреМрд░рд╛рди рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреАрдЬреЛрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдк рдЗрд╕реЗ рдЖрдЬ рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

рдЬрдм рдореИрдВрдиреЗ context.onDispose рд▓рд╛рдпрд╛, рддреЛ рдореИрдВрдиреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИред
рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рдордЭрд╛рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдкреВрдЫрд╛ рдХрд┐ рдпрд╣ рдЪрд░реНрдЪрд╛ рд╕реЗ рдХреИрд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред

рдХреНрдпреЛрдВ рдХреЗ рд▓рд┐рдП context рдмрдЬрд╛рдп StateHelper , рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рд╣реИ (рдЬреИрд╕реЗ StatelessWidget рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛)

рд╕рдВрджрд░реНрдн.myLifecycle(() {...}) рдЧрд░реНрдо-рдкреБрдирдГ рд▓реЛрдб рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ

рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ initState рдореЗрдВ рдмреБрд▓рд╛рдП рдЧрдП рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ? рдХреНрдпрд╛ рдореИрдВ рдХреБрдЫ рднреВрд▓ рд░рд╣рд╛ рд╣реВрдБ?

рд╣рдо рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ:

initState() {
  context.myLifecycle(() => print('hello'));
}

рдореЗрдВ:

initState() {
  context.myLifecycle(() => print('world'));
}

рдпрд╣ myLifecycle рдХреЙрд▓рдмреИрдХ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗ рд╣реИрдВ:

myLifecycle() {
  super.myLifecycle();
  print('hello');
}

рддрдм рд╣реЙрдЯ-рд░реАрд▓реЛрдб рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ, ValueNotifier рдореЗрдВ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИ рдФрд░ рдХрд╣реЗрдВ, ValueListenableBuilder?

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

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЧрд░ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреЗ ValueGetter + queueDidUpdateWidget рд╕реБрдЭрд╛рд╡ рдХреЗ рдмрдЬрд╛рдп рд╣рдорд╛рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрдВрдкреЛрдЬрд╝реЗрдмрд▓ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ ValueNotifier рд▓реЗрдирд╛ рд╣реЛрдЧрд╛:

AnimationController conditionalAnimator(StateHelper state, ValueListenable<bool> isAnimating, VoidCallback listener) {
...
}

рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡рд┐рдЬреЗрдЯ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ didUpdateWidget рдЕрд▓рд╛рд╡рд╛ рдХрд╣реАрдВ рдФрд░ рд╕реЗ isAnimating рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░, рдпрд╣ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИUpdateWidget; рджреВрд╕рд░реЗ рдореЗрдВ рдЗрд╕реЗ рдЪреЗрдВрдЬ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реАрдЬ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ; рдФрд░ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реНрдерд╛рди рдкрд░ рдпрд╣ stream.listen рдХреЗ рдХреЙрд▓рдмреИрдХ рдХреЗ рдЕрдВрджрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╣рдореЗрдВ рдЗрди рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ ValueNotifier рдореЗрдВ рдмрджрд▓рдиреЗ рдФрд░ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп рдХреЛ рдРрд╕реЗ рдиреЛрдЯрд┐рдлрд╝рд╛рдпрд░ рдХреЛ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд░реАрдХрд╛ рдЪрд╛рд╣рд┐рдПред
рдЗрд╕рд▓рд┐рдП рд╣рдо рдЕрдкрдиреЗ рдЬреАрд╡рди рдХреЛ рдХрд╛рдлреА рдХрдард┐рди рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкреИрдЯрд░реНрди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ ConditionalAnimatorBuilder рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдФрд░ рдЖрд╕рд╛рди рд╣реИред

рдХреНрдпреЛрдВ рдХреЗ рд▓рд┐рдП context рдмрдЬрд╛рдп StateHelper , рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рд╣реИ (рдЬреИрд╕реЗ StatelessWidget рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛)

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

рд░реА рд╣реЙрдЯ рд░реАрд▓реЛрдб рдЪреАрдЬрд╝, рд╣рд╛рдБред рдЗрд╕рд▓рд┐рдП рд╣рдо initState рдореЗрдВ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

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

  • рдпрд╣ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рдХрд┐ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЛ рдХреИрд╕реЗ рдирд┐рдкрдЯрд╛рдирд╛ рд╣реИ рдЙрд╕реА рд╕реНрдерд╛рди рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЗрд╕реЗ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддрд╛ рд╣реИ ...
  • ... рдФрд░ рд╡рд╣ рд╕реНрдерд╛рди рдЬреЛ рдЗрд╕реЗ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЙрд╕реЗ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ...
  • ... рдФрд░ рдЗрд╕реЗ рд╣реЙрдЯ рд░реАрд▓реЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ (рдЬреЛ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреЛрдб рдХреЛ рджреЛрдмрд╛рд░рд╛ рдирд╣реАрдВ рдЪрд▓рд╛рддрд╛ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдЪрд▓рддрд╛ рд╣реИ) ...
  • ... рдФрд░ рдЗрд╕реЗ рд░рд╛рдЬреНрдп рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╕реНрдЯреЗрдЯрд▓реЗрд╕ рд╡рд┐рдЬреЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдЬреЛ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд░рд╛рдЬреНрдп рдирд╣реАрдВ рд╣реИ) ...
  • ... рдФрд░ рдЗрд╕реЗ didUpdateWidget рдФрд░ didChangeDependencies рдЬреИрд╕реА рдЪреАрдЬрд╝реЛрдВ рдореЗрдВ рд╣реБрдХрд┐рдВрдЧ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ...

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

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

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдХрдИ рдкрд░рд╕реНрдкрд░ рдЕрдирдиреНрдп рдЗрдЪреНрдЫрд╛рдПрдВ рд╣реИрдВ, рдЬреЛ рдЗрд╕ рдмрдЧ рдореЗрдВ рдХрдИ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдлреИрд▓реА рд╣реБрдИ рд╣реИрдВ:

рд╡реЗ рдкрд╛рд░рд╕реНрдкрд░рд┐рдХ рд░реВрдк рд╕реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИрдВред рд╣реБрдХ рдЗрдирдореЗрдВ рд╕реЗ рд╣рд░ рдПрдХ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдКрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рд╕рдорд╛рдзрд╛рдиреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рд╕рднреА рдмреЙрдХреНрд╕ рдЪреЗрдХ рдХрд░рддреЗ рд╣реИрдВред

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдХрд╣рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ, рдпрд╣рд╛рдВ рдХреБрдЫ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЬрд┐рд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЙрд╕рдХрд╛ рд╡рд░реНрдгрди рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд░реЗрдВ рдХрд┐ рд╣рдо рд╕рдордЭ рд╕рдХреЗрдВ, рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рд╡рд░реНрдгрд┐рдд рд╕рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдФрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд╕рд╛рде рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ред

рдореИрдВ рдЕрднреА рднреА рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд╣реВрдВ рдХрд┐ рд╢реАрд░реНрд╖ рдЯрд┐рдкреНрдкрдгреА рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рдХреИрд╕реЗ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИред
рдореБрдЭреЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рджреВрд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред

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

рдореИрдВ рдЗрд╕рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдПрдХ рддреНрд╡рд░рд┐рдд рдЦреЛрдЬ рдХреЗ рд╕рд╛рде, рдореИрдВ _yes_ рдХрд╣реВрдВрдЧрд╛ред

рд╡реЗ рдкрд╛рд░рд╕реНрдкрд░рд┐рдХ рд░реВрдк рд╕реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИрдВред

рдХреНрдпрд╛ рдКрдкрд░ рд╕реВрдЪреАрдмрджреНрдз рд╕рднреА рдмреБрд▓реЗрдЯ рдкреЙрдЗрдВрдЯ рдЙрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╣рдо рдпрд╣рд╛рдБ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

рд▓реЗрдХрд┐рди рд╡реЗ рд╕рднреА рдмреЙрдХреНрд╕ рдЪреЗрдХ рдХрд░рддреЗ рд╣реИрдВ

рдХреНрдпрд╛ рдЖрдк рдмрдХреНрд╕реЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдореИрдВ рдЕрднреА рднреА рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд╣реВрдВ рдХрд┐ рд╢реАрд░реНрд╖ рдЯрд┐рдкреНрдкрдгреА рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рдХреИрд╕реЗ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдУрдкреА рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ StatefulWidgets рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рд╣рд╛рд▓ рдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдиреЗ рдХрд╣рд╛ рдХрд┐ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕реБрдЭрд╛рд╡ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ StatelessWidgets рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛ред

рдУрдкреА рдореЗрдВ рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ:

State рддрд░реНрдХ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рд╣рдо рдпрд╛ рддреЛ рдПрдХ рдЬрдЯрд┐рд▓ рдФрд░ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдиреЗрд╕реНрдЯреЗрдб build рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ рдпрд╛ рддрд░реНрдХ рдХреЛ рдХрдИ рд╡рд┐рдЬреЗрдЯреНрд╕ рдореЗрдВ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред

рддреЛ рдЗрд╕рд╕реЗ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

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

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

рджреВрд╕рд░рд╛ рдмрд┐рдВрджреБ рд╕реАрдзреЗ рддреМрд░ рдкрд░ рдПрдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд╛рдЪрд╛рд▓рддрд╛ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЖрдкрдиреЗ рдХрдИ рдмрд╛рд░ рд╕рдордЭрд╛рдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╢рдмреНрджрд╢рдГ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИред

рдЕрдЧрд▓рд╛ рдХрдерди рдЬреЛ рдУрдкреА рдмрдирд╛рддрд╛ рд╣реИ рд╡рд╣ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░ рд░рд╣рд╛ рд╣реИ:

рдПрдХрд╛рдзрд┐рдХ StatefulWidget рдореЗрдВ State рддрд░реНрдХ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдЬреИрд╕реЗ рд╣реА рд╡рд╣ рддрд░реНрдХ рдХрдИ рдЬреАрд╡рди-рдЪрдХреНрд░реЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред

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

рд╕рдорд╕реНрдпрд╛ рддрдм рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ рдЬрдм рд╣рдо рдЙрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдорд╛рдкрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

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

рдпрд╣ рдЖрдЧреЗ рдЕрдЧрд▓реЗ рдХрдерди рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИ рдЬреЛ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ:

рдЗрд╕ рддрд░реНрдХ рдХреЛ рд╣рд░ рдЬрдЧрд╣ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд░рдирд╛ "рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ", рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдХреЛрдб рдореЗрдВ рдХрдордЬреЛрд░реА рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИ:

  • рдХрд┐рд╕реА рдПрдХ рдЪрд░рдг рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рднреВрд▓рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдЬреИрд╕реЗ dispose рдкрд░ рдХреЙрд▓ рдХрд░рдирд╛ рднреВрд▓ рдЬрд╛рдирд╛)

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

  • рдпрд╣ рдХреЛрдб рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╢реЛрд░ рдЬреЛрдбрд╝рддрд╛ рд╣реИ

рдлрд┐рд░ рд╕реЗ рдпрд╣ рдореБрдЭреЗ рд╡рд░реНрдмреЛрд╕рд┐рдЯреА/рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХрд╣рдиреЗ рдЬреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╕реЗ рдЖрдкрдиреЗ рд╕рдордЭрд╛рдпрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред

рд╢реЗрд╖ рдУрдкреА рдХреЗрд╡рд▓ рдЙрди рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╕рдВрднрд╡рддрдГ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдУрдкреА рд╕рдорд╕реНрдпрд╛ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдореЗрдВ рдХреИрд╕реЗ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ? рдУрдкреА рдореЗрдВ рд╕рдм рдХреБрдЫ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рд╡рд░реНрдмреЛрд╕рд┐рдЯреА рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рд░ рдмрд╛рд░ рдЬрдм рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рддреЛ рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдирд╣реАрдВ рд╣реИ рдФрд░ рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЧрд▓рддрдлрд╣рдореА рд╢рдмреНрдж рдХреЗ рдЕрд░реНрде рддрдХ рдЙрдмрд▓рддреА рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

рдпрд╣ рдХреЛрдб рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╢реЛрд░ рдЬреЛрдбрд╝рддрд╛ рд╣реИ

рдлрд┐рд░ рд╕реЗ рдпрд╣ рдореБрдЭреЗ рд╡рд░реНрдмреЛрд╕рд┐рдЯреА/рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХрд╣рдиреЗ рдЬреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╕реЗ рдЖрдкрдиреЗ рд╕рдордЭрд╛рдпрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред

рдпрд╣ рдмрд┐рдВрджреБ controller.dispose() рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдЙрд╕ рдореВрд▓реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдЬреЛ рдХреЛрдб рдХреА рдпреЗ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдкрд╛рдардХ рдХреЗ рд▓рд┐рдП рд▓рд╛рддреА рд╣реИрдВред
рд╡рд╣ рд░реЗрдЦрд╛ рд╣рдореЗрд╢рд╛ рдмрдиреА рд░рд╣рдиреА рдЪрд╛рд╣рд┐рдП рдФрд░ рд╣рдореЗрд╢рд╛ рд╡реИрд╕реА рд╣реА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдЬреИрд╕реЗ, рдкрд╛рдардХ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдореВрд▓реНрдп рд▓рдЧрднрдЧ рд╢реВрдиреНрдп рд╣реИред

рдЬреЛ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ рд╡рд╣ рдЗрд╕ рд░реЗрдЦрд╛ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рд╣реИред

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬрд┐рддрдиреЗ рдЕрдзрд┐рдХ controller.dispose() рд╣реИрдВ, рдЙрддрдиреА рд╣реА рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рдирд┐рдкрдЯрд╛рди рдкрджреНрдзрддрд┐ рдореЗрдВ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореБрджреНрджреЗ рдХреЛ рдпрд╛рдж рдХрд░реЗрдВрдЧреЗред
рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 1 рдХрдВрдЯреНрд░реЛрд▓рд░ рдФрд░ 0 рдбрд┐рд╕реНрдкреЛрдЬрд▓ рд╣реИ, рддреЛ рдЗрд╕реЗ рдкрдХрдбрд╝рдирд╛ рдЖрд╕рд╛рди рд╣реИ
рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ резрежреж рдирд┐рдпрдВрддреНрд░рдХ рд╣реИрдВ рдФрд░ репреп рдирд┐рдкрдЯрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рд▓рд╛рдкрддрд╛ рдХреЛ рдвреВрдВрдврдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред

рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИрдВ:

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

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд┐рдЫрд▓реЗ рдмрд┐рдВрджреБ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдХреЛрдб рдХреА рд╕рднреА рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИрдВред

рдЕрдЧрд░ рд╣рдо рддреБрд▓рдирд╛ рдХрд░реЗрдВ:

+ T state;

<strong i="24">@override</strong>
void initState() {
  super.initState();
+  state = widget.valueNotifier.value;
+  widget.valueNotifier.addListener(_listener);
}

+ void _listener() => seState(() => state = widget.valueNotifier.value);

void dispose() {
+ widget.valueNotifier.removeListener(_listener);
  super.dispose();
}

рдмрдирд╛рдо:

+ ValueListenableBuilder<T>(
+   valueListenable: widget.valueNotifier,  
+   builder: (context, value, child) {

+    },
+ );

рдлрд┐рд░ рдЗрди рджреЛрдиреЛрдВ рд╕реНрдирд┐рдкреЗрдЯ рдореЗрдВ рд╕рдорд╛рди рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд░реЗрдЦрд╛рдПрдБ рд╣реЛрддреА рд╣реИрдВ рдФрд░ рд╕рдорд╛рди рдХрд╛рд░реНрдп рдХрд░рддреА рд╣реИрдВред
рд▓реЗрдХрд┐рди ValueListenableBuilder рдмреЗрд╣рддрд░ рд╣реИред

рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛ рдХрд┐ рд░реЗрдЦрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреНрдпрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдпреЗ рд░реЗрдЦрд╛рдПрдБ рдХреНрдпрд╛ рд╣реИрдВред

рдкрд╣рд▓реЗ рд╕реНрдирд┐рдкреЗрдЯ рдореЗрдВ рд╣реИ:

  • 1 рд╕рдВрдкрддреНрддрд┐ рдШреЛрд╖рдгрд╛
  • 1 рд╡рд┐рдзрд┐ рдШреЛрд╖рдгрд╛
  • 1 рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ
  • 2 рд╡рд┐рдзрд┐ рдХреЙрд▓
  • рдЬреЛ рд╕рднреА 2 рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЬреАрд╡рди-рдЪрдХреНрд░реЛрдВ рдореЗрдВ рдлреИрд▓реЗ рд╣реБрдП рд╣реИрдВред 3 рдЕрдЧрд░ рд╣рдо рдмрд┐рд▓реНрдб рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ

рджреВрд╕рд░реЗ рд╕реНрдирд┐рдкреЗрдЯ рдореЗрдВ рд╣реИ:

  • 1 рд╡рд░реНрдЧ рддрд╛рддреНрдХрд╛рд▓рд┐рдХрддрд╛
  • 1 рдЕрдирд╛рдо рдХрд╛рд░реНрдп
  • рдХреЛрдИ рдЬреАрд╡рди-рдЪрдХреНрд░ рдирд╣реАрдВред 1 рдЕрдЧрд░ рд╣рдо рдмрд┐рд▓реНрдб рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ

рдЬреЛ ValueListenableBuilder _simpler_.

рдпрд╣ рднреА рд╣реИ рдХрд┐ рдпреЗ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдХреНрдпрд╛ рдирд╣реАрдВ рдХрд╣рддреА рд╣реИрдВ:
ValueListenableBuilder рд╕рдордп рдХреЗ рд╕рд╛рде рдмрджрд▓рддреЗ рд╣реБрдП valueListenable рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред
рдЙрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рднреА рдЬрд╣рд╛рдВ widget.valueNotifier рд╕рдордп рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдмрджрд▓рддрд╛ рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдмреЛрд▓рддреЗ рд╣реИрдВ, рдпрд╣ рдЪреЛрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдПрдХ рджрд┐рди, рд╡рд╣ рдХрдерди рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, ValueListenableBuilder рдирдП рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЗрдирд╛рдпрдд рд╕реЗ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ, рдЬрдмрдХрд┐, рдкрд╣рд▓реЗ рд╕реНрдирд┐рдкреЗрдЯ рдХреЗ рд╕рд╛рде, рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдмрдЧ рд╣реИред

рддреЛ рди рдХреЗрд╡рд▓ ValueListenableBuilder рд╕рд░рд▓ рд╣реИ, рдмрд▓реНрдХрд┐ рдпрд╣ рдХреЛрдб рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП рднреА рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рд╣реИ - рдареАрдХ рдЙрд╕реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд▓рд┐рдПред


рдЗрд╕рдХреЗ рд╕рд╛рде, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рджреЛрдиреЛрдВ рд╕рд╣рдордд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ ValueListenableBuilder рдмреЗрд╣рддрд░ рд╣реИред
рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐, "рд╣рд░ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рд░рд╛рдЬреНрдп рддрд░реНрдХ рдХреЗ рд▓рд┐рдП ValueListenableBuilder рдХреЗ рдмрд░рд╛рдмрд░ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ?"

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп:

final controller = TextEditingController(text: 'hello world');
...
controller.dispose();

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реЛрдЧрд╛:

TextEditingControllerBuilder(
  initialText: 'hello world',
  builder: (context, controller) {

  },
);

рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рдн рдХреЗ рд╕рд╛рде рдЬреЛ initialText рдмрджрд▓рддрд╛ рд╣реИ рдЙрд╕реЗ рд╣реЙрдЯ-рд░реАрд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдереЛрдбрд╝рд╛ рдЫреЛрдЯрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдереЛрдбрд╝реЗ рдЕрдзрд┐рдХ рдЙрдиреНрдирдд рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рд░рд╛рдЬреНрдп рддрд░реНрдХреЛрдВ (рдЬреИрд╕реЗ рдЖрдкрдХреЗ ModeratorBuilder ) рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣ рдЫреЛрдЯреЗ рд╕реНрдирд┐рдкреЗрдЯ рдореЗрдВ "рдареАрдХ" рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдорд╛рдкрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:

  • рдмрд┐рд▓реНрдбрд░реНрд╕ "рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╢реЛрд░" рдХреЗ рдореБрджреНрджреЗ рдкрд░ рд╡рд╛рдкрд╕ рдЖрддреЗ рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рд▓реЛрдЧ рдЕрдкрдиреЗ рдореЙрдбрд▓ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

class User {
  final ValueNotifier<String> name;
  final ValueNotifier<int> age;
  final ValueNotifier<Gender> gender;
}

рд▓реЗрдХрд┐рди рдлрд┐рд░, рдПрдХ рд╡рд┐рдЬреЗрдЯ name , age рдФрд░ gender рджреЛрдиреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рд╕реБрдирдирд╛ рдЪрд╛рд╣реЗрдЧрд╛ред
рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

return ValueListenableBuilder<String>(
  valueListenable: user.name,
  builder: (context, userName, _) {
    return ValueListenableBuilder<int>(
      valueListenable: user.age,
      builder: (context, userAge, _) {
        return ValueListenableBuilder<Gender>(
          valueListenable: user.gender,
          builder: (context, userGender, _) {
            return Text('$userGender. $userName ($userAge)');
          },
        );
      },
    );
  },
);

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИред рд╣рдордиреЗ рдЕрдкрдиреА build рдкрджреНрдзрддрд┐ рдХреЛ рдкреНрд░рджреВрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП initState / dispose рдЕрдВрджрд░ рдХреЗ рдкреНрд░рджреВрд╖рдг рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ред

(рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП Listenable.merge рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░реЗрдВред рдпрд╣рд╛рдВ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛; рдпрд╣ рд░рдЪрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╣реИ)

рдпрджрд┐ рд╣рдо рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдмрд┐рд▓реНрдбрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рд╕рдЯреАрдХ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рдЦреБрдж рдХреЛ рджреЗрдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ - рдФрд░ Listenable.merge рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реИ (рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдпрд╣ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкрд╕рдВрдж рд╣реИ, ЁЯШЫ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП)

  • рдПрдХ рдХрд╕реНрдЯрдо рдмрд┐рд▓реНрдбрд░ рд▓рд┐рдЦрдирд╛ рдердХрд╛рдК рд╣реИ

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

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

  • рдмрд┐рд▓реНрдбрд░реНрд╕ рдХреЗ рдкреЗрдбрд╝ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдирд╛ рдХрдард┐рди рд╣реИ

    рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдПрдХ ValueListenableBuilder рдирд┐рдХрд╛рд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдпрд╛ рдПрдХ рдирдпрд╛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдпрд╣ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред
    рд╣рдорд╛рд░рд╛ рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдХреБрдЫ рдорд┐рдирдЯ рдЕрдЯрдХреЗ рд╣реБрдП () рдФрд░ {} рдореЗрдВ рдмрд┐рддрд╛ рд╕рдХрддреЗ рд╣реИрдВред


рд╣рдордиреЗ рдЕрднреА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдП рдЧрдП рдмрд┐рд▓реНрдбрд░ рдореБрджреНрджреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реБрдХ рд╣реИрдВред

рдпрджрд┐ рд╣рдо рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╣реБрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд┐рдлрд▓реЗрдХреНрдЯрд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реЛрдЧрд╛:

final userName = useValueListenable(user.name);
final useAge = useValueListenable(user.age);
final useGender = useValueListenable(user.gender);

return Text('$userGender. $userName ($userAge)');

рдпрд╣ рдкрд┐рдЫрд▓реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдб рдореЗрдВ рдЕрдм рдПрдХ рд░реИрдЦрд┐рдХ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рд╣реИред
рдЬрд┐рд╕рдХрд╛ рдорддрд▓рдм рд╣реИ:

  • рдХреЛрдб рдХрд╛рдлреА рдЕрдзрд┐рдХ рдкрдардиреАрдп
  • рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рд╣рдореЗрдВ рдбрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ (){}; рдПрдХ рдирдИ рд▓рд╛рдЗрди рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдПред

рдпрд╣ рдореБрдЦреНрдп provider рдПрдХ рдХреЛ рдкрд╕рдВрдж рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдиреЗ MultiProvider рдХреЛ рдкреЗрд╢ рдХрд░рдХреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдШреЛрдВрд╕рд▓реЗ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ред

рдЗрд╕реА рддрд░рд╣, initState / dispose рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╣рдо рд╣реЙрдЯ-рд░реАрд▓реЛрдб рд╕реЗ рд▓рд╛рднрд╛рдиреНрд╡рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред
рдпрджрд┐ рд╣рдо рдПрдХ рдирдпрд╛ useValueListenable рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдкрд░рд┐рд╡рд░реНрддрди рддреБрд░рдВрдд рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдЖрджрд┐рдо рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ:

String useUserLabel(User user) {
  final userName = useValueListenable(user.name);
  final useAge = useValueListenable(user.age);
  final useGender = useValueListenable(user.gender);

  return '$userGender. $userName ($userAge)';
}

Widget build(context) {
  final label = useUserLabel(user);
  return Text(label);
}

рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ extract as function рд╕рд╛рде рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЕрдзрд┐рдХрд╛рдВрд╢ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред


рдХреНрдпрд╛ рд╡рд╣ рдЖрдкрдХреЗ рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм рд╣реИ?

рдЬрд╝рд░реВрд░ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЙрд╕рдХреЗ рдкрд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд╣реА рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

Widget build(context) {
  if (random.nextBool())
    final title = useLabel(title);
  final label = useLabel(name);
  return Text(label);
}

... рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рддрд░реАрдХреЛрдВ рд╕реЗ рдЫреЛрдЯреА рдЧрд╛рдбрд╝реА рдмрди рдЬрд╛рдПрдЧреАред

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

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

рдареАрдХ-рдареАрдХ рдмрдЧ рдХреЗ рдХрд╛рд░рдг, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╣реБрдХ рдХреЛ рд╕рд╢рд░реНрдд рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП ReactJS рд╕реЗ рд╣реБрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ build рдореЗрдВ рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдкрд░ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВред JS рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдЖрдк рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддреЗ рд╣реИрдВ

const [title, setTitle] = useLabel("title");

рдбрд╛рд░реНрдЯ рд╕рдордХрдХреНрд╖ рд╕рдорд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдЬреЗрдПрд╕ рдХреА рддрд░рд╣ рдЕрдирдкреИрдХрд┐рдВрдЧ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рд▓рдВрдмрд╛ рд╣реИ:

var titleHook = useLabel("title");
String title = titleHook.property;
Function setTitle = titleHook.setter;

рдпрджрд┐ рдЖрдк рд╕рд╢рд░реНрдд рддрд░реНрдХ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдирд┐рд░реНрдорд╛рдг рд╡рд┐рдзрд┐ рдореЗрдВ title рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ _рдЙрдиреНрд╣реЗрдВ рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж_, рдХреНрдпреЛрдВрдХрд┐ рдЕрдм рдХреЙрд▓ рдСрд░реНрдбрд░ рдЕрднреА рднреА рд╕рдВрд░рдХреНрд╖рд┐рдд рд╣реИред рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдард╛рдП рдЧрдП рдЗрди рдореБрджреНрджреЛрдВ рдореЗрдВ рд╕реЗ рдХрдИ рдХреЛ рдКрдкрд░ рд▓рд┐рдВрдХ рдХрд┐рдП рдЧрдП рд╣реБрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

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

рдбрд┐рдмрдЧрд┐рдВрдЧ/рд╕рд╢рд░реНрдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдкреНрд▓рдЧрдЗрди рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдРрд╕рд╛ рдкреНрд▓рдЧрдЗрди рд╣реЛрдЧрд╛:

  • рдЪреЗрддрд╛рд╡рдиреА рджреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди useMyFunction рдирд╛рдо рдХреЗ рдмрд┐рдирд╛ рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ
  • рдЪреЗрддрд╛рд╡рдиреА рджреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реБрдХ рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
  • рдЪреЗрддрд╛рд╡рдиреА рджреЗрдВ рдХрд┐ рд▓реВрдк/рдХреЙрд▓рдмреИрдХ рдореЗрдВ рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕рдореЗрдВ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдЧрд▓рддрд┐рдпреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдиреЗ рд╕рд╛рдмрд┐рдд рдХрд░ рджрд┐рдпрд╛ рдХрд┐ рдпрд╣ рдПрдХ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рдмрд╛рдд рд╣реИред

рддрдм рд╣рдо рд▓рд╛рднреЛрдВ рдХреЗ рд╕рд╛рде рд░рд╣ рдЬрд╛рддреЗ рд╣реИрдВ:

  • рдЕрдзрд┐рдХ рдкрдардиреАрдп рдХреЛрдб (рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ)
  • рдмреЗрд╣рддрд░ рд╣реЙрдЯ-рд░реАрд▓реЛрдб
  • рдЕрдзрд┐рдХ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп / рд░рдЪрдирд╛ рдпреЛрдЧреНрдп рдХреЛрдб
  • рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ - рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдЧрдгрдирд╛ рдХреА рдЧрдИ рдЕрд╡рд╕реНрдерд╛рдПрдБ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред

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

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

class Example extends HookWidget {
  final int userId;

  Widget build(context) {
    // Calls fetchUser whenever userId changes
    // It is the equivalent to both initState and didUpdateWidget
    final future = useMemo1(() => fetchUser(userId), userId);

    final snapshot = useFuture(future);
    if (!snapshot.hasData)
      return Text('loading');
    return Text(snapshot.data.name);
  }  
}

рдЗрд╕ рддрд░рд╣ рдХреЗ useMemo рд╣реБрдХ рдЖрд╕рд╛рди рдкреНрд░рджрд░реНрд╢рди рдЕрдиреБрдХреВрд▓рди рдФрд░ рдШреЛрд╖рдгрд╛рддреНрдордХ рд░реВрдк рд╕реЗ init + рдЕрдкрдбреЗрдЯ рджреЛрдиреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдмрдЧ рд╕реЗ рднреА рдмрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдХрд┐ Property / context.onDispose рдкреНрд░рд╕реНрддрд╛рд╡ рдЫреВрдЯ рдЬрд╛рддрд╛ рд╣реИред
рддрд░реНрдХ рдХреЛ рдЬреАрд╡рди-рдЪрдХреНрд░ рдореЗрдВ рдХрд╕рдХрд░ рдЬреЛрдбрд╝реЗ рдмрд┐рдирд╛ рдпрд╛ ValueNotifier рдХреЗ рд╕рд╛рде рдХреЛрдб рдХреЛ рдЬрдЯрд┐рд▓ рдХрд┐рдП рдмрд┐рдирд╛ рдШреЛрд╖рдгрд╛рддреНрдордХ рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред

ValueGetter рдкреНрд░рд╕реНрддрд╛рд╡ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ, рдЗрд╕ рдкрд░ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА:

рд╣рдо рд░рд┐рдлреИрдХреНрдЯрд░ рдХрд░рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВ:

final int userId;

Widget build(context) {
  final future = useMemo1(() => fetchUser(userId), userId);

рдореЗрдВ:

Widget build(context) {
  final userId = Model.of(context).userId;
  final future = useMemo1(() => fetchUser(userId), userId);

рд╣реБрдХ рдХреЗ рд╕рд╛рде, рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ useMemo рдХрд┐рд╕реА рднреА рдЬреАрд╡рди-рдЪрдХреНрд░ рд╕реЗ рдмрдВрдзрд╛ рдирд╣реАрдВ рд╣реИред

рд▓реЗрдХрд┐рди Property + ValueGetter , рд╣рдореЗрдВ рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Property рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ - рдЬреЛ рдЕрд╡рд╛рдВрдЫрд┐рдд рд╣реИ рдХреНрдпреЛрдВрдХрд┐ Property рдХреЛрдб рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрдИ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдкреБрди: рдЙрдкрдпреЛрдЧред рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдпрддрд╛ рдЦреЛ рджреАред

рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ рдпрд╣ рд╕реНрдирд┐рдкреЗрдЯ рдЗрд╕рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ:

class Example extends StatefulWidget {
  final int userId;
  <strong i="45">@override</strong>
  _ExampleState createState() => _ExampleState();
}

class _ExampleState extends State<Example> {
  Future<User> future;

  <strong i="46">@override</strong>
  void initState() {
    super.initState();
    future = fetchUser(widget.userId);
  }

  <strong i="47">@override</strong>
  void didUpdateWidget(Example oldWidget) {
    super.didUpdateWidget(oldWidget);
    if (oldWidget.userId != widget.userId) {
      future = fetchUser(widget.userId);
    }
  }

  <strong i="48">@override</strong>
  Widget build(BuildContext context) {
    return FutureBuilder<User>(
      future: future,
      builder: (context, snapshot) {
        if (!snapshot.hasData)
          return Text('loading');
        return Text(snapshot.data.name);
      },
    );
  }
}

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдПрдХ рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬрдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ @rrousselGit рдХреЗ рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ

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

рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдо рдХрднреА рдЖрдо рд╕рд╣рдорддрд┐ рддрдХ рдкрд╣реБрдВрдЪ рдкрд╛рдПрдВрдЧреЗред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЬреЛ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЙрд╕ рдкрд░ рднреА рдЕрд╕рд╣рдордд рд╣реИрдВ

рдПрдХ рдЕрдиреБрд╕реНрдорд╛рд░рдХ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рд╕рд╛рдЭрд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЬрд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рд╕рдореБрджрд╛рдп рдХреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВред рдореБрдЭреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдХреЛрдИ рдЖрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИ рдЕрдЧрд░ рдлрд╝реНрд▓рдЯрд░ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореБрдЭреЗ рдЗрд╕ рддрд░рд╣ рдХрд╛ рджреБрдЦ рд╣реЛрддрд╛ рд╣реИ), рдЬрдм рддрдХ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИ:

  • рдПрдХ рдЙрдЪрд┐рдд рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдкреНрд▓рдЧрдЗрди рд╕рд┐рд╕реНрдЯрдо
  • рдбрд╛рд░реНрдЯрдкреИрдб рдХреЗ рдЕрдВрджрд░ рд╕рдВрдХреБрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛

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

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

рд╕рдВрдкрддреНрддрд┐/рд╕рдВрдкрддреНрддрд┐ рдкреНрд░рдмрдВрдзрдХ:

import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart';

typedef InitStateCallback<T> = T Function(T oldValue);
typedef DidUpdateWidgetCallback<T, W extends StatefulWidget> = T Function(W oldWidget);

class Property<T, W extends StatefulWidget> {
  Property({
    T value,
    this.initState,
    this.didUpdateWidget,
    this.dispose,
  }) : _value = value;

  T get value {
    assert(_value != null);
    return _value;
  }
  T _value;

  final InitStateCallback<T> initState;
  void _initState(Property<T, W> oldProperty) {
    if (initState != null)
      _value = initState(oldProperty?.value);
    assert(_value != null);
  }

  final DidUpdateWidgetCallback<T, W> didUpdateWidget;
  void _didUpdateWidget(StatefulWidget oldWidget) {
    if (didUpdateWidget != null) {
      final T newValue = didUpdateWidget(oldWidget);
      if (newValue != null)
        _value = newValue;
    }
  }

  final ValueSetter<T> dispose;
  void _dispose() {
    if (dispose != null)
      dispose(value);
  }
}

mixin PropertyManager<W extends StatefulWidget> on State<W> {
  final Set<Property<Object, W>> _properties = <Property<Object, W>>{};
  bool _ready = false;

  Property<T, W> register<T>(Property<T, W> oldProperty, Property<T, W> property) {
    assert(_ready);
    if (oldProperty != null) {
      assert(_properties.contains(oldProperty));
      _properties.remove(oldProperty);
    }
    assert(property._value == null);
    property._initState(oldProperty);
    _properties.add(property);
    return property;
  }

  <strong i="9">@override</strong>
  void initState() {
    super.initState();
    _ready = true;
    initProperties();
  }

  <strong i="10">@override</strong>
  void reassemble() {
    super.reassemble();
    initProperties();
  }

  <strong i="11">@protected</strong>
  <strong i="12">@mustCallSuper</strong>
  void initProperties() { }

  <strong i="13">@override</strong>
  void didUpdateWidget(W oldWidget) {
    super.didUpdateWidget(oldWidget);
    for (Property<Object, W> property in _properties)
      property._didUpdateWidget(oldWidget);
  }

  <strong i="14">@override</strong>
  void dispose() {
    _ready = false;
    for (Property<Object, W> property in _properties)
      property._dispose();
    super.dispose();
  }
}

рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВрдЧреЗ:

import 'dart:async';

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';

import 'properties.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  <strong i="18">@override</strong>
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Example(userId: 1),
    );
  }
}

class User {
  User(this.name);
  final String name;
}

Future<User> fetchUser(int userId) async {
  await Future.delayed(const Duration(seconds: 2));
  return User('user$userId');
}

class Example extends StatefulWidget {
  Example({ Key key, this.userId }): super(key: key);

  final int userId;

  <strong i="19">@override</strong>
  _ExampleState createState() => _ExampleState();
}

class _ExampleState extends State<Example> with PropertyManager {
  Property future;

  <strong i="20">@override</strong>
  void initProperties() {
    super.initProperties();
    future = register(future, Property(
      initState: (_) => fetchUser(widget.userId),
      didUpdateWidget: (oldWidget) {
        if (oldWidget.userId != widget.userId)
          return fetchUser(widget.userId);
      }
    ));
  }

  <strong i="21">@override</strong>
  Widget build(BuildContext context) {
    return FutureBuilder<User>(
      future: future.value,
      builder: (context, snapshot) {
        if (!snapshot.hasData) return Text('loading');
        return Text(snapshot.data.name);
      },
    );
  }
}

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

рдЖрдк рд╢рд╛рдпрдж рдЗрд╕рдХрд╛ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ State.build рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛ ...

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

@escamoteur рдмрд╕ рдЗрддрдирд╛ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдХреНрдпрд╛ рдЖрдк рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рдмрджрд▓рддреЗ рд╣реИрдВ рдХрд┐ рд╡рд┐рдЬреЗрдЯ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ? рдпрд╛ рдЖрдк рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирдИ рдХреНрд╖рдорддрд╛рдПрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП? рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдореБрдЦреНрдп рдврд╛рдВрдЪреЗ рдореЗрдВ рдХрд┐рд╕реА рднреА рдмрджрд▓рд╛рд╡ рдХреЗ рдмрд┐рдирд╛ рд╣реБрдХ рдФрд░ рд╕рдВрдкрддреНрддрд┐ рдкреНрд░рд╕реНрддрд╛рд╡ рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рдХреИрд╕реЗ рд╕рдВрднрд╡ рд╣реИрдВ, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдпрд╣ рдХрд┐рд╕реА рднреА рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рддрдЪреАрдд рд╕реЗ рдСрд░реНрдереЛрдЧреЛрдирд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ @escamoteur , @rrousselGit рдФрд░ рдЕрдиреНрдп рджреЛрдиреЛрдВ рд╕реЗ рдпрд╣рд╛рдВ рдФрд░ рдЕрдиреНрдп рдЬрдЧрд╣реЛрдВ рд╕реЗ рдЬреЛ рд╕реБрдирд╛ рд╣реИ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ _in_ рд╣реЛрдиреЗ рдХреЗ рдирд╛рддреЗ рдврд╛рдВрдЪреЗ рдХреЛ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдХреА рд╡реИрдзрддрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рддрд░реАрдХрд╛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд╣реБрдВрдЪрдирд╛ред рдЕрдЧрд░ рдЖрдк рдЕрд╕рд╣рдордд рд╣реИрдВ рддреЛ рдореБрдЭреЗ рд╕реБрдзрд╛рд░реЗрдВред

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

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

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

рд╣рдорд╛рд░реА рдкреИрдХреЗрдЬ рдиреАрддрд┐ рдпрд╣рд╛рдВ рдкреНрд░рд▓реЗрдЦрд┐рдд рд╣реИ: https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo#deciding -where-to-put-code

рдореИрдВ рдкреИрдХреЗрдЬ-рдкреНрд░рдердо рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ рдФрд░ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рд╣реИред
рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рдпрд╣ рднреА рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдкреИрдХреЗрдЬреЛрдВ рд╕реЗ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдореВрд▓ рдореЗрдВ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред

рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВ рдпрд╣ рддрд░реНрдХ рдирд╣реАрдВ рджреЗ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ provider рдХреЛ рд╕реНрдкрдВрджрди рдореЗрдВ рд╡рд┐рд▓рдп рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдпрд╣ рднреА рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреА рд╣реИ рдЬрд┐рд╕реЗ рдлрд╝реНрд▓рдЯрд░ рдХреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рд╣рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рд╣реБрдХ рдХреЗ рд╕рд╛рде)ред

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

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

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

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

рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рд╕рднреА рддрд░реНрдХреЛрдВ рдХреЛ рдПрдХ рд╕реНрдерд╛рди рдкрд░ рдкреБрдирд░реНрд╕рдореВрд╣рд┐рдд рдХрд░рдХреЗ рдХреБрдЫ рд╣рдж рддрдХ рдкрдардиреАрдпрддрд╛ рдмрдврд╝рд╛рддрд╛ рд╣реИ; рд▓реЗрдХрд┐рди рдпрд╣ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ

рдЕрдзрд┐рдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╣рдо рдирд╣реАрдВ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ:

Property(
  initState: (_) => fetchUser(widget.userId),
  didUpdateWidget: (oldWidget) {
    if (oldWidget.userId != widget.userId)
      return fetchUser(widget.userId);
  }
)

_ExampleState рдФрд░ рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рддрд░реНрдХ Example рдФрд░ initState + didUpdateWidget рд▓рд┐рдП рдмрд╛рдзреНрдп рд╣реИ

рдпрд╣ рд╣реБрдХ рдХреЗ рд╕рд╛рде рдХреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛?

рд░рд╕реНрдЯ рд╕рдореБрджрд╛рдп рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рд╣реА рджреЗрдЦрдиреЗ рдХреЗ рдмрд╛рдж рдореИрдВ @timsneath рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред рдПрдХ рдмрд╛рд░ рдмрд╛рд╣рд░ рдЖрдиреЗ рдХреЗ рдмрд╛рдж рдХреЛрд░ рд╕реЗ рдХреБрдЫ рдирд┐рдХрд╛рд▓рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдмреАрдПрд▓рдУрд╕реА рдкреИрдЯрд░реНрди рдкреНрд░рджрд╛рддрд╛ рдХреЗ рдЖрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рд▓реЗрдХрд┐рди рдЕрдм рдкреНрд░рджрд╛рддрд╛ рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рд╣реИред рд╢рд╛рдпрдж Flutter_hooks рдЙрд╕реА рддрд░рд╣ "рдзрдиреНрдп" рд╕рдВрд╕реНрдХрд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдП рдЧрдП рд╣реБрдХ рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛, рдЕрдм рд╣реБрдХ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдмрджрд▓ рдирд╣реАрдВ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдЙрдирд╕реЗ рдмрд╛рд╣рд░ рдирд╣реАрдВ рдирд┐рдХрд▓ рд╕рдХрддрд╛ рд╣реИред рдЙрдиреНрд╣реЗрдВ рдЙрдирдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рд╡рд░реНрдЧ рдШрдЯрдХреЛрдВ рдХрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдореВрд▓ рдореЗрдВ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдкреИрдХреЗрдЬ рджрд░реНрд╢рди рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред

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

рдпрд╣ рд╣реБрдХ рдХреЗ рд╕рд╛рде рдХреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛?

React/flutter_hooks рджреНрд╡рд╛рд░рд╛ рднреЗрдЬреЗ рдЧрдП рдХрд┐рд╕реА рднреА рдЖрджрд┐рдо рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

class FetchUser extends Hook<AsyncSnapshot<User>> {
  const FetchUser(this.userId);
  final int userId;

  <strong i="8">@override</strong>
  _FetchUserState createState() => _FetchUserState();
}

class _FetchUserState extends HookState<AsyncSnapshot<User>, FetchUser> {
  Future<User> userFuture;

  <strong i="9">@override</strong>
  void initHook() {
    userFuture = fetchUser(hook.userId);
  }  

  void didUpdateHook(FetchUser oldHook) {
    if (oldHook.userId != hook.userId)
      userFuture = fetchUser(hook.userId);
  }


  <strong i="10">@override</strong>
  User build() {
    return useFuture(userFuture);
  }
}

рдлрд┐рд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛:

class Example extends HookWidget {
  const Example({Key key, this.userId}) : super(key: key);

  final int userId;

  <strong i="14">@override</strong>
  Widget build(BuildContext context) {
    AsyncSnapshot<User> user = use(FetchUser(userId));

    if (!user.hasData)
      return CircularProgressIndicator();
    return Text(user.data.name);
  }
}

рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рддрд░реНрдХ Example рдФрд░ StatefulWidget рдХреЗ рдЬреАрд╡рди-рдЪрдХреНрд░ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИред
рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕рдХреЗ userId рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рддрд╛ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЕрдиреНрдп рд╡рд┐рдЬреЗрдЯ рдПрдХ StatefulWidget рдЬреЛ рдЕрдкрдиреЗ userId рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рддрд╛ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдЗрдирд╣реЗрд░рд┐рдЯреЗрдб рд╡рд┐рдЬреЗрдЯ рд╕реЗ userId рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ред

рдЗрд╕ рд╡рд╛рдХреНрдп-рд╡рд┐рдиреНрдпрд╛рд╕ рд╕реЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣реБрдХ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЬреАрд╡рди-рдЪрдХреНрд░ рдХреЗ рд╕рд╛рде рд╕реНрд╡рддрдВрддреНрд░ State рд╡рд╕реНрддреБрдУрдВ рдХреА рддрд░рд╣ рд╣реИрдВред

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

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╕реНрдпрд╛ рдЬрд┐рд╕рдХрд╛ рдкреНрд░рджрд╛рддрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рд╡реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдкреНрд░рджрд╛рддрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рдирд┐рдкрдЯрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрдм рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐, рдкреНрд░рджрд╛рддрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ context.watch / context.select рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдХрд╛рдлреА рд╢реМрдХреАрди рд╣реИрдВ, рд╡рд░реНрдмреЛрдЬрд╝ Consumer(builder: ...) / Selector(builder:...) рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╡рд┐рдкрд░реАрддред
рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рджреЛрдиреЛрдВ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ _and_ рдмрд┐рдирд╛ рд╣реБрдХ рдХреЗ рдкрд╣рд▓реЗ рдмрддрд╛рдИ рдЧрдИ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░реЗрдВ (рдпрд╛ https://github.com/flutter/flutter/pull/33213, рдЬрд┐рд╕реЗ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛)ред

рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реИ:
рдкреНрд░рджрд╛рддрд╛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП flutter_hooks рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд░рд╣ рд╕рдХрддрд╛ рд╣реИред
рдкреНрд░рджрд╛рддрд╛ рдХрд┐рддрдирд╛ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИ, рдЗрд╕рдХреЗ рдХрд╛рд░рдг рд╣реБрдХ рдкрд░ рдирд┐рд░реНрднрд░ рд░рд╣рдирд╛ рдЕрдиреБрдЪрд┐рдд рд╣реЛрдЧрд╛ред

рддреЛ рдЕрдВрдд рдореЗрдВ, рдореИрдВрдиреЗ рдЪреБрдирд╛:

  • рдлреЛрд░реНрдХрд┐рдВрдЧ рдкреНрд░рджрд╛рддрд╛ ( рддрд╣рдд )
  • рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╕реНрд╡реЗрдЪреНрдЫрд╛ рд╕реЗ "рд╕реНрдкрдВрджрди рдкрд╕рдВрджреАрджрд╛"/Google рдЕрдиреБрд╢рдВрд╕рд╛ рдЦреЛ рджреЗрддреЗ рд╣реИрдВ
  • рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░реЗрдВ (рдФрд░ рдХреБрдЫ рдФрд░)
  • рдПрдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реБрдХ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдЬреЛрдбрд╝реЗрдВ рдЬреЛ context.watch рдЖрдирдВрдж рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗред

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

рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдореИрдВ рд╣реБрдХ рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рд╕рдВрдкрддреНрддрд┐ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмреАрдЪ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВ, рдореВрд▓ рд░реВрдк рд╕реЗ рддреАрди рдЕрдВрддрд░ рд╣реИрдВ:

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

рдХреНрдпрд╛ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрддрдирд╛ рдмрдбрд╝рд╛ рд╕реМрджрд╛ рд╣реИ? рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдЕрдм рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреЛрдб рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рд╣реИред рддреЛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ _only_ рдЕрдм рдПрдХ рдХреНрд░рд┐рдпрд╛рддреНрдордХ рддрд░реНрдХ рд╣реИред

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

рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдЕрдм рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреЛрдб рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рд╣реИред

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

class _WhateverState extends State with PropertyManager {
  // may change over time after some setState calls
  int userId;
}

рдпрджрд┐ рд▓реЛрдЧ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдпрд╣ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдЖрдИрдПрдордПрдЪрдУ, рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд╛рд▓ рдЭрдВрдбрд╛ рд╣реИред

рд▓реЛрдЧ рдХреБрдЫ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдирд╣реАрдВ рд╣реИ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрдкреАрдЖрдИ рдЦрд░рд╛рдм рд╣реИред

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

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

рдХреНрдпрд╛ рдЖрдк рдПрдХ рджреНрд╡рд┐рддреАрдпрдХ рд╡рд┐рдЬреЗрдЯ рдмрдирд╛рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ _ExampleState рдЕрдВрджрд░ рд╕реНрдерд┐рдд рдХреЛрдб рдХреЛ рдХрд┐рд╕реА рднрд┐рдиреНрди рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ?

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

рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП рдореИрдВ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдпрд╣ рдРрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛:

class Example extends StatefulWidget {
  Example({ Key key }): super(key: key);

  <strong i="10">@override</strong>
  _ExampleState createState() => _ExampleState();
}

class _ExampleState extends State<Example> with PropertyManager {
  int _userId;
  Future<User> _future;

  void _setUserId(int newId) {
    if (newId == _userId)
      return;
    setState(() {
      _future = fetchUser(_userId);
    });
  }

  // ...code that uses _setUserId...

  <strong i="11">@override</strong>
  Widget build(BuildContext context) {
    return FutureBuilder<User>(
      future: _future.value,
      builder: (context, snapshot) {
        if (!snapshot.hasData) return Text('loading');
        return Text(snapshot.data.name);
      },
    );
  }
}

рд▓реЛрдЧ рдХреБрдЫ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдирд╣реАрдВ рд╣реИ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрдкреАрдЖрдИ рдЦрд░рд╛рдм рд╣реИред

рдорд╛рдирд╛ред

рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд▓реЛрдЧ рд╕реНрд╡рдпрдВ рдХреБрдЫ рдЦрд░рд╛рдм рд╣реЛрдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдПрдкреАрдЖрдИ рдЦрд░рд╛рдм рд╣реИред рдЬрдм рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ, "рдкреИрдХреЗрдЬ рд▓реЗрдЦрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реБрдХ рдкрд░ рдирд┐рд░реНрднрд░ рдкреИрдХреЗрдЬ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХрдо рд╣реИ", рддреЛ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣реБрдХ рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдПрдХ рдЕрдЪреНрдЫрд╛ рдПрдкреАрдЖрдИ, рдЖрдИрдПрдордПрдЪрдУ, рдЦрд░рд╛рдм рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдЕрдЧрд░ рдХреЛрдИ рдФрд░ рдЗрд╕реЗ рдирд╣реАрдВ рдЕрдкрдирд╛рддрд╛ рд╣реИ; рдЗрд╕реЗ рд░реБрдХрдирд╛ рдЪрд╛рд╣рд┐рдП, рднрд▓реЗ рд╣реА рдХрд┐рд╕реА рдФрд░ рдХреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рди рд╣реЛред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдКрдкрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ Property рдЙрджрд╛рд╣рд░рдг рдЕрдиреНрдп рдкреИрдХреЗрдЬреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрд╡рдпрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВред

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

InheritedWidget рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИ? рдореИрдВ рд▓реЛрдЧреЛрдВ рдкрд░ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдереЛрдкрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ред рд╡реЗ рдЬреЛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЙрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдк рд╕рдЪрдореБрдЪ рдПрдХ рдЧреИрд░-рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░ рд░рд╣реЗ рд╣реИрдВред InheritedWidget рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ рдЕрдкрдиреЗ рд░рд╛рд╕реНрддреЗ рд╕реЗ рд╣рдЯ рдЬрд╛рдПрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ InheritedWidget рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рджреЗрдВред

. рдПрдХ рдЕрдЪреНрдЫрд╛ рдПрдкреАрдЖрдИ, рдЖрдИрдПрдордПрдЪрдУ, рдЦрд░рд╛рдм рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдЕрдЧрд░ рдХреЛрдИ рдФрд░ рдЗрд╕реЗ рдирд╣реАрдВ рдЕрдкрдирд╛рддрд╛ рд╣реИ; рдЗрд╕реЗ рд░реБрдХрдирд╛ рдЪрд╛рд╣рд┐рдП, рднрд▓реЗ рд╣реА рдХрд┐рд╕реА рдФрд░ рдХреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рди рд╣реЛред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдКрдкрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╕рдВрдкрддреНрддрд┐ рдЙрджрд╛рд╣рд░рдг рдЕрдиреНрдп рдкреИрдХреЗрдЬреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрд╡рдпрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВред

рдПрдХ рдЧрд▓рддрдлрд╣рдореА рд╣реИред

рд╕рдорд╕реНрдпрд╛ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣ рдкреНрд░рджрд╛рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдХрд┐ рд╡рд╣ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣реБрдХ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдирд╣реАрдВ рд╣реИрдВ рдЬрдмрдХрд┐ рдкреНрд░рджрд╛рддрд╛ рд╣реИред


рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдХреЛрдб рдПрдХ рд╣реА рд╡рд╕реНрддреБ рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдмрджрд▓рдирд╛ рдЕрд▓рдЧ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдареАрдХ рд╣реИ? рдореБрдЭреЗ рд╕рдЪ рдореЗрдВ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдпрд╣рд╛рдВ рдХрд┐рд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП рдореИрдВ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдпрд╣ рдРрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛:

рдпрд╣ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╣реБрдХ рдмрдирд╛рдо рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдмреАрдЪ рдХреЛрдб рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдпрддрд╛ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ред

рд╣реБрдХ рдХреЗ рд╕рд╛рде, рд╣рдо FetchUser рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

class _WhateverState extends State with PropertyManager {
  // may change over time after some setState calls
  int userId;

  Widget build(context) {
    final user = use(FetchUser(userId));
  }
}

рд╣реБрдХ рдХреЗ рд╕рд╛рде, рд╣рдо FetchUser рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рдпрд╣ рд╡рд╛рдВрдЫрдиреАрдп рдХреНрдпреЛрдВ рд╣реИред FetchUser рдореЗрдВ рдХреЛрдИ рджрд┐рд▓рдЪрд╕реНрдк рдХреЛрдб рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рд╣реБрдХ рд╕реЗ fetchUser рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдбреЗрдкреНрдЯрд░ рд╣реИред рдХреНрдпреЛрдВ рди рдХреЗрд╡рд▓ fetchUser рд╕реАрдзреЗ рдХреЙрд▓ рдХрд░реЗрдВ? рдЖрдк рдЬрд┐рд╕ рдХреЛрдб рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рджрд┐рд▓рдЪрд╕реНрдк рдХреЛрдб рдирд╣реАрдВ рд╣реИред

рдпрд╣ рдкреНрд░рджрд╛рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдХрд┐ рд╡рд╣ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣реБрдХ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдирд╣реАрдВ рд╣реИрдВ рдЬрдмрдХрд┐ рдкреНрд░рджрд╛рддрд╛ рд╣реИред

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

рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рдпрд╣ рд╡рд╛рдВрдЫрдиреАрдп рдХреНрдпреЛрдВ рд╣реИред FetchUser рдХреЗ рдкрд╛рд╕ рдХреЛрдИ рджрд┐рд▓рдЪрд╕реНрдк рдХреЛрдб рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рд╣реБрдХ рд╕реЗ fetchUser рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдбреЗрдкреНрдЯрд░ рд╣реИред рдХреНрдпреЛрдВ рди рдХреЗрд╡рд▓ fetchUser рдХреЛ рд╕реАрдзреЗ рдХреЙрд▓ рдХрд░реЗрдВ? рдЖрдк рдЬрд┐рд╕ рдХреЛрдб рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рджрд┐рд▓рдЪрд╕реНрдк рдХреЛрдб рдирд╣реАрдВ рд╣реИред

рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ред рд╣рдо рдХреЛрдб-рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдпрддрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВред fetchUser рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП ChangeNotifier.addListener рд╕рд╣рд┐рддред

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

int userId;

Widget build(context) {
  AsyncSnapshot<User> user = use(ImplicitFetcher<User>(userId, fetch: () => fetchUser(userId));
}

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

рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рд╣реБрдХ рдЖрджрд┐рдо рд╣реИрдВ

рдПрдХ рд░реВрдкрдХ рдХреЗ рд░реВрдк рдореЗрдВ:
package:animations Animation рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореВрд▓ рдЖрджрд┐рдо рд╣реИред
рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдорд╛рдорд▓рд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп package:animations рд╕рдореБрджрд╛рдп рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП Animation рдХрд╛рдВрдЯреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛

@escamoteur рдмрд╕ рдЗрддрдирд╛ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдХреНрдпрд╛ рдЖрдк рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рдмрджрд▓рддреЗ рд╣реИрдВ рдХрд┐ рд╡рд┐рдЬреЗрдЯ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ? рдпрд╛ рдЖрдк рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирдИ рдХреНрд╖рдорддрд╛рдПрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП? рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдореБрдЦреНрдп рдврд╛рдВрдЪреЗ рдореЗрдВ рдХрд┐рд╕реА рднреА рдмрджрд▓рд╛рд╡ рдХреЗ рдмрд┐рдирд╛ рд╣реБрдХ рдФрд░ рд╕рдВрдкрддреНрддрд┐ рдкреНрд░рд╕реНрддрд╛рд╡ рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рдХреИрд╕реЗ рд╕рдВрднрд╡ рд╣реИрдВ, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

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

рдпрд╣ рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рдЪреАрдЬреЛрдВ рдХреЛ рдХрд░рдиреЗ рд╕реЗ рдордирд╛ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

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

рд▓реЛрдЧ рд╣рдореЗрд╢рд╛ рдЪреАрдЬреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреЗ "рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддрд░реАрдХреЗ" рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдлрд╝реНрд▓рдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рджреЛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддрд░реАрдХреЗ рдирд╣реАрдВ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред

рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ред рд╣рдо рдХреЛрдб-рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдпрддрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВред fetchUser рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП ChangeNotifier.addListener рд╕рд╣рд┐рддред

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

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

рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рд╣реБрдХ рдЖрджрд┐рдо рд╣реИрдВ

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

рдПрдХ рд░реВрдкрдХ рдХреЗ рд░реВрдк рдореЗрдВ:
package:animations Animation рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореВрд▓ рдЖрджрд┐рдо рд╣реИред
рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдорд╛рдорд▓рд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп package:animations рд╕рдореБрджрд╛рдп рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП Animation рдХрд╛рдВрдЯреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛

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


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

рд╣реБрдХ _are_ рдЖрджрд┐рдо
рдпрд╣рд╛рдБ рдбреИрди рдХрд╛ рдПрдХ рд╕реВрддреНрд░ рд╣реИ: https://twitter.com/dan_abramov/status/1093698629708251136 рдЗрд╕реЗ рд╕рдордЭрд╛рддреЗ рд╣реБрдПред рдХреБрдЫ рд╢рдмреНрдж рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд░рд┐рдПрдХреНрдЯ рдХреНрд▓рд╛рд╕ рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ рдФрд░ рдлрд╝реНрд▓рдЯрд░ рд╕реНрдЯреЗрдЯрдлреБрд▓рд╡рд┐рдЬреЗрдЯреНрд╕ рдХреЗ рдмреАрдЪ рд╕рдорд╛рдирддрд╛ рдХреЗ рдХрд╛рд░рдг рддрд░реНрдХ рдЬреНрдпрд╛рджрд╛рддрд░ рдлрд╝реНрд▓рдЯрд░ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ

рдЕрдзрд┐рдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЖрдк flutter_hooks рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░рд╛рдЬреНрдп рдорд┐рд╢реНрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВред

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

рдпрд╣ рдУрдкреА рдореЗрдВ рд╣реИ:

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

рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╡рд╣ рдХреЛрдб рд╕рд░рд▓ рд╣реЛ, рдпрд╛ рдЙрд╕рд╕реЗ рднрд┐рдиреНрди рд░реВрдк рд╕реЗ рднрд┐рдиреНрди рд╣реЛ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЖрджрд┐рдо рдирд╣реАрдВ рд╣реИред рдЖрдкрдХреЛ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реБрдХ-рдЬреИрд╕реЗ рдврд╛рдВрдЪреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╡рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╣реБрдХ-рдЙрдкрдпреЛрдЧ рдХреЛрдб рдХрд░рддрд╛ рд╣реИред

рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХрдХреНрд╖рд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдХрдХреНрд╖рд╛рдПрдВ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдХреЛрдб рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рд╕рд╛рд░реНрдердХ рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рд░рдХ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВред
рдФрд░ рд╡рд░реНрдЧ рдЖрджрд┐рдо рд╣реИрдВред

рдорд┐рдХреНрд╕рд┐рди рдХреЗ рд╕рд╛рде рднреА рдпрд╣реА рдмрд╛рдд рд╣реИ, рдЬреЛ рдХрд┐ рдЖрджрд┐рдо рднреА рд╣реИрдВ

рд╣реБрдХ рдПрдХ рд╣реА рдЪреАрдЬ рд╣реИред

рд╣рдореЗрдВ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдХреЙрд▓ рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реБрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?

рдЬрдм рд╣рдореЗрдВ рдЗрд╕ рддрд░реНрдХ рдХреЛ _one_ рд╕реНрдерд╛рди рдкрд░ рдирд╣реАрдВ рдмрд▓реНрдХрд┐ _two_ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдЗрд╕ рддрд░рд╣ рдХреЗ рддрд░реНрдХ рдХреЛ рдорд┐рдХреНрд╕рд┐рди рдФрд░ рди рд╣реА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред

рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдПрдХ рдареЛрд╕ рдЙрджрд╛рд╣рд░рдг рджреЗрдВ рдЬрд╣рд╛рдВ рдпрд╣ рдорд╛рдорд▓рд╛ рд╣реИред рдЕрдм рддрдХ рд╣рдордиреЗ рдЬрд┐рддрдиреЗ рднреА рдЙрджрд╛рд╣рд░рдг рдкрдврд╝реЗ рд╣реИрдВ рд╡реЗ рд╕рднреА рдмрд┐рдирд╛ рд╣реБрдХ рдХреЗ рд╕рд░рд▓ рд░рд╣реЗ рд╣реИрдВред

рдЕрдм рддрдХ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдореИрдВрдиреЗ @rrousselGit рд╣реБрдХ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рдЕрдиреНрдп рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ рдЬреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдФрд░ рд░рд╛рдЬреНрдп рддрд░реНрдХ рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред

рдорд╛рдирд╛ рдХрд┐ рдореИрдВ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЬреНрдпрд╛рджрд╛ рдбрд╛рд░реНрдЯ рдФрд░ рд╕реНрдкрдВрджрди рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЙрдкрд░реЛрдХреНрдд рд╕рдВрдкрддреНрддрд┐ рд╕рдорд╛рдзрд╛рди рдХреЛрдб рдирдореВрдиреЗ рдореЗрдВ рдЪреАрдЬреЗрдВ рдпрд╛рдж рдЖ рд░рд╣реА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рд╣реИ? рдЖрдЬ рдРрд╕реЗ рдХреМрди рд╕реЗ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЗ рдмрдЬрд╛рдп рдХреЙрдкреА рдкреЗрд╕реНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ?
@rrousselGit рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рдХреНрдпрд╛ рд╣реИ:

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

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

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

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


рдпрд╣рд╛рдВ рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкрд┐рдЫрд▓реЗ рдорд╣реАрдиреЗ рдмрдирд╛рдП рдЧрдП рдХрд╕реНрдЯрдо рд╣реБрдХ рдореА рдпрд╛ рдХреБрдЫ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рд╕рдВрдЧреНрд░рд╣ рд╣реИ:

  • useQuery - рдЬреЛ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдкрд╣рд▓реЗ рджрд┐рдП рдЧрдП ImplicitFetcher рд╣реБрдХ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдПрдХ GraphQL рдХреНрд╡реЗрд░реА рдмрдирд╛рддрд╛ рд╣реИред
  • useOnResume рдЬреЛ рдмрд┐рдирд╛ рдХреЗ AppLifecycleState.resumed рдкрд░ рдХрд╕реНрдЯрдо рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓рдмреИрдХ рджреЗрддрд╛ рд╣реИ
    рд╡рд┐рдЬреЗрдЯ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдСрдмреНрдЬрд░реНрд╡рд░ рдмрдирд╛рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдкрд░ рдЬрд╛рдПрдВ
  • useDebouncedListener рдЬреЛ рд╕реБрдирдиреЗ рдпреЛрдЧреНрдп (рдЖрдорддреМрд░ рдкрд░ рдЯреЗрдХреНрд╕реНрдЯрдлрд┐рд▓реНрдб рдпрд╛ рд╕реНрдХреНрд░реЙрд▓рдХрдВрдЯреНрд░реЛрд▓рд░) рдХреЛ рд╕реБрдирддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╢реНрд░реЛрддрд╛ рдкрд░ рдмрд╣рд╕ рдХреЗ рд╕рд╛рде
  • useAppLinkService рдЬреЛ рд╡рд┐рдЧреЗрдЯреНрд╕ рдХреЛ AppLifecycleState.resumed рд╕рдорд╛рди рдХрд╕реНрдЯрдо рдИрд╡реЗрдВрдЯ рдкрд░ рдХреБрдЫ рддрд░реНрдХ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдирд┐рдпрдореЛрдВ рдХреЗ рд╕рд╛рде
  • useShrinkUIForKeyboard рдХреАрдмреЛрд░реНрдб рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рд╕реБрдЪрд╛рд░реВ рд░реВрдк рд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдПред рдпрд╣ рдПрдХ рдмреВрд▓рд┐рдпрди рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ UI рдХреЛ рдиреАрдЪреЗ рдХреА рдкреИрдбрд┐рдВрдЧ рдХреЗ рдЕрдиреБрдХреВрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдирд╣реАрдВ (рдЬреЛ рдлреЛрдХрд╕рдиреЛрдб рдХреЛ рд╕реБрдирдиреЗ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ)
  • useFilter , рдЬреЛ useDebouncedListener рдФрд░ useState (рдПрдХ рдЖрджрд┐рдо рд╣реБрдХ рдЬреЛ рдПрдХ рдПрдХрд▓ рд╕рдВрдкрддреНрддрд┐ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддрд╛ рд╣реИ) рдХреЛ рдПрдХ рдЦреЛрдЬ рдмрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд┐рд▓реНрдЯрд░ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рддреА рд╣реИред
  • useImplicitlyAnimated<Int/Double/Color/...> - рд╣реБрдХ рдХреЗ рд░реВрдк рдореЗрдВ TweenAnimationBuilder рдмрд░рд╛рдмрд░

рдРрдкреНрд╕ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд▓реЙрдЬрд┐рдХ рдХреЗ рд▓рд┐рдП рдХрдИ рд▓реЛ-рд▓реЗрд╡рд▓ рд╣реБрдХ рдХрд╛ рднреА рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗ рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп:

Whatever whatever;

initState() {
  whatever = doSomething(widget.id);
}

didUpdateWidget(oldWidget) {
  if (oldWidget.id != widget.id)
    whatever = doSomething(widget.id);
}

рд╡реЗ рдХрд░рддреЗ рд╣реИрдВ:

Widget build(context) {
  final whatever = useUnaryEvent<Whatever, int>(widget.id, (int id) => doSomething(id));
}

рдпрд╣ initState / didUpdateWidget / didChangeDependencies рдмреАрдЪ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╕реЗ рдмрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╡реЗ рд░рд┐рд╡рд░рдкреЙрдб рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ useProvider рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдЕрдиреНрдпрдерд╛ StreamBuilder / ValueListenableBuilder


рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╡рд┐рдЬреЗрдЯ рд╢рд╛рдпрдж рд╣реА рдХрднреА "рд╕рд┐рд░реНрдл рдПрдХ рд╣реБрдХ" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд┐рдЬреЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ

class ChatScreen extends HookWidget {
  const ChatScreen({Key key}) : super(key: key);

  <strong i="13">@override</strong>
  Widget build(BuildContext context) {
    final filter = useFilter(debounceDuration: const Duration(seconds: 2));
    final userId = useProvider(authProvider).userId;
    final chatId = useProvider(selectedChatProvider);
    final chat = useQuery(ChatQuery(userId: userId, chatId: chatId, filter: filter.value));

    return Column(
      children: [
        Searchbar(onChanged: (value) => filter.value = value),
        Expanded(
          child: ChatList(chat: chat),
        ),
      ],
    );
  }
}

рдпрд╣ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдФрд░ рдмрд╣реБрдд рдкрдардиреАрдп рд╣реИ (рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдкрдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдкреАрдЖрдИ рдХрд╛ рдмреБрдирд┐рдпрд╛рджреА рдЬреНрдЮрд╛рди рд╣реИ)ред
рдКрдкрд░ рд╕реЗ рдиреАрдЪреЗ рддрдХ рд╕рднреА рддрд░реНрдХ рдкрдврд╝реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ - рдХреЛрдб рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рдмреАрдЪ рдХреЛрдИ рдЫрд▓рд╛рдВрдЧ рдирд╣реАрдВ рд╣реИред
рдФрд░ рдпрд╣рд╛рдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕рднреА рд╣реБрдХ рдХреЛрдбрдмреЗрд╕ рдореЗрдВ рдХрдИ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ

рдЕрдЧрд░ рд╣рдо рдмрд┐рдирд╛ рд╣реБрдХ рдХреЗ рдареАрдХ рд╡рд╣реА рдХрд╛рдо рдХрд░рддреЗ, рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реЛрддрд╛:

class ChatScreen extends StatefulWidget {
  const ChatScreen({Key key}) : super(key: key);

  <strong i="20">@override</strong>
  _ChatScreenState createState() => _ChatScreenState();
}

class _ChatScreenState extends State<ChatScreen> {
  String filter;
  Timer timer;

  <strong i="21">@override</strong>
  void dispose() {
    timer?.cancel();
    super.dispose();
  }

  <strong i="22">@override</strong>
  Widget build(BuildContext context) {
    return Consumer<Auth>(
      provider: authProvider,
      builder: (context, auth, child) {
        return Consumer<int>(
          provider: selectedChatProvider,
          builder: (context, chatId, child) {
            return GraphQLBuilder<Chat>(
              query: ChatQuery(
                userId: auth.userId,
                chatId: chatId,
                filter: filter.value,
              ),
              builder: (context, chat, child) {
                return Column(
                  children: [
                    Searchbar(
                      onChanged: (value) {
                        timer?.cancel();
                        timer = Timer(const Duration(seconds: 2), () {
                          filter = value;
                        });
                      },
                    ),
                    Expanded(
                      child: ChatList(chat: chat),
                    ),
                  ],
                );
              },
            );
          },
        );
      },
    );
  }
}

рдпрд╣ рдХрд╛рдлреА рдХрдо рдкрдардиреАрдп рд╣реИред

  • рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдХреЗ 10 рд╕реНрддрд░ рд╣реИрдВ - 12 рдпрджрд┐ рд╣рдо рдлрд╝рд┐рд▓реНрдЯрд░ рддрд░реНрдХ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП FilterBuilder рдмрдирд╛рддреЗ рд╣реИрдВ
  • рдлрд╝рд┐рд▓реНрдЯрд░ рддрд░реНрдХ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЦрдбрд╝рд╛ рд╣реИред

    • рд╣рдо рдЧрд▓рддреА рд╕реЗ timer рд░рджреНрдж рдХрд░рдирд╛ рднреВрд▓ рд╕рдХрддреЗ рд╣реИрдВ

  • build рдкрджреНрдзрддрд┐ рдХрд╛ рдЖрдзрд╛ рднрд╛рдЧ рдкрд╛рдардХ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИред рдмрд┐рд▓реНрдбрд░реНрд╕ рд╣рдореЗрдВ рдЙрди рдЪреАрдЬрд╝реЛрдВ рд╕реЗ рд╡рд┐рдЪрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдорд╛рдпрдиреЗ рд░рдЦрддреА рд╣реИрдВ
  • рдореИрдВрдиреЗ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдореЗрдВ 5 рдорд┐рдирдЯ рдХрд╛ рдЕрдЪреНрдЫрд╛ рд╕рдордп рдЦреЛ рджрд┐рдпрд╛ рд╣реИ рдХрд┐ рд▓рд╛рдкрддрд╛ рдХреЛрд╖реНрдардХ рдХреЗ рдХрд╛рд░рдг рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ

рд╕реНрд╡рдпрдВ flutter_hooks рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдЕрдкрдиреА рд░рд╛рдп рдХрд╛ рдпреЛрдЧрджрд╛рди рджреВрдВрдЧрд╛ред рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдореИрдВ рд╕реНрдкрдВрджрди рд╕реЗ рдЦреБрд╢ рдерд╛ред рдореИрдВрдиреЗ рдРрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рджреЗрдЦреАред рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝рдиреЗ рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдпреВрдЯреНрдпреВрдм рд╡реАрдбрд┐рдпреЛ рджреЗрдЦрдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдЕрднреА рднреА рдпрдХреАрди рдирд╣реАрдВ рд╣реБрдЖ, рдпрд╣ рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдкреНрд░реЗрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрднреНрдпрд╛рд╕ рдпрд╛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рд▓реЗрдХрд┐рди рдлрд┐рд░ рдореИрдВрдиреЗ рдХреБрдЫ рдиреЛрдЯрд┐рд╕ рдХрд┐рдпрд╛ред рдореИрдВ рд╣рд░ рдХреАрдордд рдкрд░ рд╕реНрдЯреЗрдЯрдлреБрд▓ рд╡рд┐рдЬреЗрдЯреНрд╕ рд╕реЗ рдмрдЪ рд░рд╣рд╛ рдерд╛, рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рд╢рд╛рдорд┐рд▓ рдереЗ, рдФрд░ рдЪреАрдЬреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╡рд░реНрдЧ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд▓рдВрдШрдиред рдЙрд╕рдХреЗ рдХрд╛рд░рдг рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрд▓реНрдкрдХрд╛рд▓рд┐рдХ рд░рд╛рдЬреНрдп рдХреЛ рдмрд╛рдХреА рдРрдк рд░рд╛рдЬреНрдп рдХреЗ рд╕рд╛рде рдПрдХ рд░рд╛рдЬреНрдп рдкреНрд░рдмрдВрдзрди рд╕рдорд╛рдзрд╛рди рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдерд╛, рдФрд░ рдХреЗрд╡рд▓ рд╕реНрдЯреЗрдЯрд▓реЗрд╕ рд╡рд┐рдЬреЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЛ Navigator , рдпрд╛ BuildContext рд▓рд┐рдП InheritedWidget s / Providers рдЙрдЪреНрдЪрддрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдХрд╛рд░рдг рдЬрд▓реНрджреА рд╕реЗ рд╕реНрдкрдВрджрди рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдкреЗрдбрд╝ред рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд░рд╣рд╛ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд░рд╛рдЬреНрдп рдкреНрд░рдмрдВрдзрди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдерд╛, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдирд╣реАрдВ рдерд╛ред рд▓реЗрдХрд┐рди рдпреВрдЖрдИ рдореЗрдВ рд░рд╛рдЬреНрдп рдкреНрд░рдмрдВрдзрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рдХреБрдЫ рднреА рдХрд░ рд╕рдХрддрд╛ рдерд╛ред

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

рдореЗрд░реЗ рд▓рд┐рдП, рдпрд╣ рдХреНрд╖рдгрд┐рдХ рд░рд╛рдЬреНрдп/рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдХрд░реНрддрд╛ рдХреА рддрд░рд╣ рд╣реИред рдореБрдЭреЗ UI рдореЗрдВ рд╕рднреА рд╕рдмреНрд╕рдХреНрд░рд┐рдкреНрд╢рди рдХрд╛ рдирд┐рдкрдЯрд╛рди рдпрд╛рдж рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдЕрднреА рднреА рдЗрд╕ рддрдереНрдп рдХреЗ рдкреНрд░рддрд┐ рдмрд╣реБрдд рд╕рдЪреЗрдд рд╣реВрдВ рдХрд┐ flutter_hooks рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣реА рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдореЗрд░реЗ рдХреЛрдб рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдФрд░ рдкреБрди: рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯрди рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред рдореЗрд░реЗ рд╕реНрдирд╛рддрдХ рдЕрдиреБрд╕рдВрдзрд╛рди рдФрд░ рдордиреЛрд░рдВрдЬрди рдХреЗ рд▓рд┐рдП рдкрд┐рдЫрд▓реЗ рдПрдХ рд╕рд╛рд▓ рдореЗрдВ ~ 10 рдРрдк рд▓рд┐рдЦрдиреЗ рдХреА рдмрд╛рдд рдХрд░реЗрдВред

рджреВрд╕рд░реЛрдВ рдХреА рддрд░рд╣, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдлрд╝реНрд▓рдЯрд░ рдПрд╕рдбреАрдХреЗ рдореЗрдВ рдЗрд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдкреНрд░реЗрд░рдгрд╛ рдХреНрдпрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣рд╛рдБ рдЙрд╕ рд╡рд┐рд╖рдп рдкрд░ рджреЛ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВред

  1. рдХрднреА-рдХрднреА рдореИрдВ рдРрд╕реЗ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реБрдХ рдмрдирд╛рдЙрдВрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдХ рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдкреНрд░рд╛рд░рдВрдн/рдирд┐рдкрдЯрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП golden_layout , рдпрд╛ zefyr )ред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ flutter_hooks рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдРрд╕реЗ рдкреИрдХреЗрдЬ рд╕реЗ рд▓рд╛рднрд╛рдиреНрд╡рд┐рдд рд╣реЛрдВрдЧреЗред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдРрд╕реЗ рдкреИрдХреЗрдЬ рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдФрдЪрд┐рддреНрдп рд╕рд╛рдмрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдЬрд┐рд╕рдореЗрдВ рд╕рдЪрдореБрдЪ 1-3 рдХрд╛рд░реНрдп рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рд╡рд┐рдХрд▓реНрдк рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдПрдХ рдХрд┐рдЪрди-рд╕рд┐рдВрдХ рдкреИрдХреЗрдЬ рдмрдирд╛рдпрд╛ рдЬрд╛рдП рдЬрд┐рд╕рдореЗрдВ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╡рд┐рднрд┐рдиреНрди рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╣реБрдХ рд╣реЛрдВ, рдореИрдВ рддрдм рдХреЗрд╡рд▓ рдПрдХ git рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЙрди рдЕрдиреНрдп рдкреИрдХреЗрдЬреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рд╡реНрдпрдХреНрддрд┐ + flutter_hooks рдХреЛ рдореЗрд░реЗ git рдкрд░ рдирд┐рд░реНрднрд░ рд░рд╣рдирд╛ рд╣реЛрдЧрд╛ред рд▓рд╛рдн рдХреЗ рд▓рд┐рдП рдЖрджреЗрд╢ (рдЬреЛ рдХрдо рдЦреЛрдЬрдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЙрди рдкреИрдХреЗрдЬреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рд╣реИ рдЬрд┐рдирдХреА рд╡реЗ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ), рдпрд╛ рдРрд╕реЗ рдкреИрдХреЗрдЬ рдкрд░ рдЬрд┐рд╕рдореЗрдВ 3 рдлрд╝рдВрдХреНрд╢рди рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдпрд╛ рдореИрдВ pub.dev рдкрд░ рдЧрд╛рд░реНрдбрди-рд╕рд┐рдВрдХ рдкреИрдХреЗрдЬ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддрд╛ рд╣реВрдВред рд╕рднреА рд╡рд┐рдЪрд╛рд░ рд╣рд╛рд╕реНрдпрд╛рд╕реНрдкрдж рд▓рдЧрддреЗ рд╣реИрдВ, рдФрд░ рдмрд╣реБрдд рдЦреЛрдЬреЗ рдЬрд╛рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИрдВред flutter_hooks рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдХреЙрдкреА рдФрд░ рдкреЗрд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рддрд░реНрдХ рдХреЛ рд╕реНрд╡рдпрдВ рд╕рдордЭрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХреЛрдб/рдкреИрдХреЗрдЬ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рдмрд┐рдВрджреБ рдХреЛ рдпрд╛рдж рдХрд░рддрд╛ рд╣реИред рдлрд╝рдВрдХреНрд╢рдВрд╕ рдореВрд▓ рдкреИрдХреЗрдЬ рдореЗрдВ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рдЬрд╛рдПрдВрдЧреЗ, рди рдХрд┐ рдХреБрдЫ 'рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдкреИрдХреЗрдЬ' рдореЗрдВред рдпрджрд┐ flutter_hooks рдврд╛рдВрдЪреЗ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдерд╛, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рд╕рд┐рд░реНрдл рдПрдХ рдкреИрдХреЗрдЬ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдпрд╛ characters рдЬреИрд╕реЗ рдврд╛рдВрдЪреЗ рд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдореВрд▓ рдкреИрдХреЗрдЬ рдХреЗ рд▓реЗрдЦрдХ рд╕рд░рд▓ рд╣реБрдХ рдХреЗ рд▓рд┐рдП рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд░рдЦрддреЗ рд╣реИрдВ рдлрд╝рдВрдХреНрд╢рди, рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 1-3 рдлрд╝рдВрдХреНрд╢рди рдкреИрдХреЗрдЬ рдХреА рдЧрдбрд╝рдмрдбрд╝реА рдирд╣реАрдВ рд╣реЛрдЧреАред
    рдпрджрд┐ рдлрд╝реНрд▓рдЯрд░ рджреНрд╡рд╛рд░рд╛ flutter_hooks рдХреЛ рдирд╣реАрдВ рдЕрдкрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдореБрдЭреЗ 1-3 рдлрд╝рдВрдХреНрд╢рди рдкреИрдХреЗрдЬреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдЬреЛ pub.dev рдЦреЛрдЬ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░ рджреЗрддрд╛ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдпреЗ рдкреИрдХреЗрдЬ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЫреЛрдЯреЗ рд╣реЛрдВрдЧреЗ, рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ @rrousselGit рд╕реЗ рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ рдпрд╣ рдПрдХ рдЖрджрд┐рдо рд╣реИред рдпрджрд┐ flutter_hooks рднрдВрдбрд╛рд░ рдкрд░ 1228 рд╕рд┐рддрд╛рд░реЗ @rrousselGit рджреНрд╡рд╛рд░рд╛ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╕рдВрдХреЗрдд рдирд╣реАрдВ рд╣реИ, рддреЛ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреНрдпрд╛ рд╣реИред

  2. рдореИрдВ рдлрд╝реНрд▓рдЯрд░ рд░реЗрдкреЛ рдореЗрдВ рдпреЛрдЧрджрд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдпреВрдЯреНрдпреВрдм рд╡реАрдбрд┐рдпреЛ рджреЗрдЦ рд░рд╣рд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдпрд╣ рджреЗрдЦрдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ рдХрд┐ рдореИрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рдерд╛, рд╡реАрдбрд┐рдпреЛ рдмрдирд╛рдиреЗ рд╡рд╛рд▓рд╛ рд╡реНрдпрдХреНрддрд┐ рдирдИ рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдХрд╛рдлреА рдЖрд╕рд╛рдиреА рд╕реЗ рдЬреБрдбрд╝ рдЧрдпрд╛ рд▓реЗрдХрд┐рди dispose , didUpdateWidget , рдФрд░ debugFillProperties рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд▓рдЧрднрдЧ рднреВрд▓ рд╣реА рдЧрдпрд╛ред рдПрдХ рд╕реНрдЯреЗрдЯрдлреБрд▓ рд╡рд┐рдЬреЗрдЯ рдХреА рд╕рднреА рдЬрдЯрд┐рд▓рддрд╛рдУрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рджреЗрдЦрдХрд░, рдФрд░ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЛ рдпрд╛рдж рдХрд░рдирд╛ рдХрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдореБрдЭреЗ рдЙрди рдкрд░ рдлрд┐рд░ рд╕реЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реЛ рдЧрдпрд╛, рдФрд░ рдореБрдЭреЗ рдореБрдЦреНрдп рдлрд╝реНрд▓рдЯрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдпреЛрдЧрджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддрдирд╛ рдЙрддреНрд╕рд╛рд╣рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕рдиреЗ рдореБрдЭреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд░реЛрдХ рджрд┐рдпрд╛ рд╣реИ, рдореБрдЭреЗ рдЕрднреА рднреА рдпреЛрдЧрджрд╛рди рджреЗрдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ рдЬрд┐рд╕реЗ рдмрдирд╛рдП рд░рдЦрдирд╛ рдФрд░ рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдпрд╣ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдХреЛрдб рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдареАрдХ рд╕реЗ рдирд┐рдкрдЯрд╛рдпрд╛ рд╣реИ рдФрд░ рдХреНрд╖рдгрд┐рдХ рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЦреНрдпрд╛рд▓ рд░рдЦрд╛ рд╣реИред

рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЪрд▓реА рдЖ рд░рд╣реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рд╕рдордп-рд╕рдордп рдкрд░ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рд╕реНрдкрдВрджрди рдЯреАрдо рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдХреБрдЫ рд╣рдж рддрдХ рдЪрдХрд┐рдд рд╣реВрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдХрд┐рд╕реА рдРрдк рдХреЛ рджреЛрдиреЛрдВ рддрд░рд╣ рд╕реЗ рдЖрдЬрд╝рдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдирд╣реАрдВ рдирд┐рдХрд╛рд▓рд╛ рд╣реИ, рдФрд░ рдЕрдкрдиреЗ рд▓рд┐рдП рдЕрдВрддрд░ рджреЗрдЦреЗрдВред рдореИрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдпрд╛ рдЗрд╕реЗ рдврд╛рдВрдЪреЗ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдПрдХреАрдХреГрдд рдирд╣реАрдВ рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, flutter_hook рдврд╛рдВрдЪреЗ рдХрд╛ рдореБрдЦреНрдп рднрд╛рдЧ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреНрд░рд▓реЗрдЦрд┐рдд рдХреЛрдб рдХреА рдХреЗрд╡рд▓ 500ish рд▓рд╛рдЗрдиреЗрдВ рд╣реИред рджреЛрдмрд╛рд░рд╛, рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдпрджрд┐ рдпрд╣ рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЕрдкрдиреЗ 2 рд╕реЗрдВрдЯ рджреЗрдиреЗ рдФрд░ рдмреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдХреЛ рдирд╛рд░рд╛рдЬ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдмрд╛рдд рдирд╣реАрдВ рдХреА рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ @rrousselGit рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рдЕрдВрдХ рдмрдирд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рд░рд╣рд╛ рд╣реИред

рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЪрд▓реА рдЖ рд░рд╣реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рд╕рдордп-рд╕рдордп рдкрд░ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рд╕реНрдкрдВрджрди рдЯреАрдо рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдХреБрдЫ рд╣рдж рддрдХ рдЪрдХрд┐рдд рд╣реВрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдХрд┐рд╕реА рдРрдк рдХреЛ рджреЛрдиреЛрдВ рддрд░рд╣ рд╕реЗ рдЖрдЬрд╝рдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдирд╣реАрдВ рдирд┐рдХрд╛рд▓рд╛ рд╣реИ, рдФрд░ рдЕрдкрдиреЗ рд▓рд┐рдП рдЕрдВрддрд░ рджреЗрдЦреЗрдВред

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

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

рдореИрдВ рдПрдХ рдЕрдиреБрд░рдХреНрд╖рдХ рдХреЗ рдорджрджрдЧрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд╕реНрдкрд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рд╕рдВрдШрд░реНрд╖ рдХрд░рддрд╛ рд╣реВрдВред

рдорд╛рдирд╛ред рдЗрд╕ рдЪрд░реНрдЪрд╛ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рд╣рд┐рдХреНрд╕реА рдХрд╛ рдЖрднрд╛рд░реА рд╣реВрдВред

рдореИрдВ рдЗрд╕ рд╕реВрддреНрд░ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж рдФрд░ рдЧрд╣рд░рд╛рдИ рд╕реЗ рд╕рдордЭ рдирд╣реАрдВ рдкрд╛ рд░рд╣рд╛ рд╣реВрдВ

рдирд┐рд╖реНрдкрдХреНрд╖ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдореБрджреНрджрд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╣реБрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИред
рдпрд╣ рд╕рдорд╛рдзрд╛рди рдХреЗ рдмрдЬрд╛рдп рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╣реИ

рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд╣реИ?

рдореИрдВ рдпрд╣рд╛рдВ рджреЛрдиреЛрдВ рдкрдХреНрд╖реЛрдВ ( @rrousselGit рдФрд░ @Hixie) рдХреЛ рдорд╣рд╕реВрд╕ рдХрд░ рд╕рдХрддрд╛

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

рдХреЛрдб рдХреЗ рдХрдо рд╕реЗ рдХрдо> 95% рдХреА рддрд░рд╣ рдореИрдВ рдХреЗрд╡рд▓ рдШреЛрд╖рдгрд╛рддреНрдордХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдб рд╡рд┐рдзрд┐ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рд▓рд┐рдЦрддрд╛ рд╣реВрдВ, рдХреЛрдИ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдпрд╛ рд▓реМрдЯрд╛рдП рдЧрдП рд╡рд┐рдЬреЗрдЯ рдЙрдкрдЯреНрд░реА рдХреЗ рдмрд╛рд╣рд░ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд╕рднреА рддрд░реНрдХ рднрд╛рдЧ рдЙрди рд░рд╛рдЬреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЕрдВрджрд░ рд╣реИрдВ рдЬреЛ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ, рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдФрд░ рдирд┐рдкрдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВ рдФрд░ рдЬреЛрдбрд╝реЗрдВ рд╢реНрд░реЛрддрд╛рдУрдВ (рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ MobX рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ) рдФрд░ рдРрд╕реА рддрд╛рд░реНрдХрд┐рдХ рд╕рд╛рдордЧреНрд░реАред рдЪреВрдВрдХрд┐ рдлрд╝реНрд▓рдЯрд░ рдореЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рднреА рд╣реИ, рдпрд╣ рдмрд╣реБрдд рд╣реА рдореВрд▓ рд▓рдЧрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рдЖрдкрдХреЛ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рд╣рдореЗрд╢рд╛ рд╕реНрдкрд╖реНрдЯ рдФрд░ рдЦреБрд▓реЗ рд░рд╣рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдорд┐рд▓рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВ - рдпрд╣ рдореБрдЭреЗ рд╣рдореЗрд╢рд╛ рдРрд╕реЗ рд╡рд┐рдЬреЗрдЯреНрд╕ рдХреЛ StatefulWidget рдореЗрдВ рдмрджрд▓рдиреЗ рдФрд░ initState/рдирд┐рдкрдЯрд╛рди рдореЗрдВ рд╕рдорд╛рди рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рднреА рд╣рдореЗрд╢рд╛ рдЙрд╕ рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рдареАрдХ рд╡рд╣реА рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЖрдк рд╕реАрдзреЗ рдЙрд╕ рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдореЗрд░реЗ рд▓рд┐рдП рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдЬреИрд╕реЗ @Hixie рдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЦреБрдж рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдпрд╣ рдореБрдЭреЗ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рдХреЛ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ flutter_hooks рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЗрд╕реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реИред flutter_hooks рдореБрдЭреЗ рдЕрднреА рднреА рдпрд╣ рд╕реЛрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдХрд┐ рдХрд┐рд╕ рддрд░рд╣ рдХреЗ рд░рд╛рдЬреНрдп рдПрдХ рд╣реБрдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦреЗ рдЬрд╛рдиреЗ рд▓рд╛рдпрдХ рд╣реИрдВ рдФрд░ рдЗрд╕рд▓рд┐рдП рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ - рд╡рд┐рднрд┐рдиреНрди рд╕реНрд╡рд╛рджреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдпрд╛ рддреЛ рд╡рд┐рднрд┐рдиреНрди "рдПрдХрд▓" рдЙрдкрдпреЛрдЧ рд╣реБрдХ рдпрд╛ рдХреЛрдИ рд╣реБрдХ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдмрд╣реБрдд рдмрд╛рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рдХрд╕реНрдЯрдо рд╡рд╛рд▓реЗ рд▓рд┐рдЦрдиреЗ рдХреА рдкреНрд░рд╡реГрддреНрддрд┐ рд░рдЦрддреЗ рд╣реИрдВред

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

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

рдЕрдЧрд░ рдореИрдВ рдЧрд▓рдд рд╣реВрдВ рддреЛ рдореБрдЭреЗ рд╕реБрдзрд╛рд░реЗрдВ рд▓реЗрдХрд┐рди рдпрд╣ рдзрд╛рдЧрд╛ рдПрдХ рдкрдардиреАрдп рдФрд░ рд░рдЪрдирд╛ рдпреЛрдЧреНрдп рддрд░реАрдХреЗ рд╕реЗ рдХрдИ рд╡рд┐рдЧреЗрдЯреНрд╕ рдореЗрдВ рд░рд╛рдЬреНрдп рддрд░реНрдХ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╣реБрдХ рдирд╣реАрдВред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рдзрд╛рдЧрд╛ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЦреБрд▓реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдХреЗ рдХрд╛рд░рдг рдЦреЛрд▓рд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рд╕рдорд╛рдзрд╛рди рдХреНрдпрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╣реБрдХ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡реЗ рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИрдВ рдФрд░ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ @rrousselGit рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣рд╛рдВ рд╕рдорд╕реНрдпрд╛/рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдФрд░ рд╕рдордЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд░рд╣рд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИрдВ) рддрд╛рдХрд┐ рдПрдХ рдФрд░ рд╕рдорд╛рдзрд╛рди рд╢рд╛рдпрдж рд╕реНрдкрдВрджрди рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рдореВрд▓ рд╣реЛ рд╕рдХреЗ рдХреЗ рд╕рд╛рде рдФрд░ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ред рдЕрдм рддрдХ рдореЗрд░реЗ рдЬреНрдЮрд╛рди рдХреЗ рд▓рд┐рдП рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдХреЛрдИ рдЕрдиреНрдп рд╕рдорд╛рдзрд╛рди рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдореБрджреНрджреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ?

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

рдХрд╛рдлреА рдХрдо рдкрдардиреАрдп

рд╕рдВрдкрддреНрддрд┐ рд╕рдорд╛рдзрд╛рди рдЗрддрдиреА рдЖрд╕рд╛рдиреА рд╕реЗ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдкреНрд░рддреАрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдпрд╛ рдпрд╣ рдПрдХ рдЧрд▓рдд рдирд┐рд╖реНрдХрд░реНрд╖ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЦреАрдВрдЪрд╛ рд╣реИ (?) рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкрд░ рдХреЛрдИ рдЬрд╡рд╛рдм рдирд╣реАрдВ рдерд╛:

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

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

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

рдореЗрд░реЗ рд▓рд┐рдП, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╕рдорд╕реНрдпрд╛ рдХреЗ рдорд╣рддреНрд╡ рдФрд░ рдЙрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ Google рдХреА рднреВрдорд┐рдХрд╛ рдкрд░ рдЕрд╕рд╣рдордд рд╣реИрдВред
рдпрджрд┐ рджреЛрдиреЛрдВ рдкрдХреНрд╖ рдЗрд╕ рдкрд░ рд╕рд╣рдордд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рд╕рдордЭ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рд╣рдо рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдХреИрд╕реЗ рдирд┐рдкрдЯрд╛ рдЬрд╛рдП, рдЗрд╕ рдкрд░ рдЙрддреНрдкрд╛рджрдХ рдЪрд░реНрдЪрд╛ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рд╕рдорд╛рдзрд╛рди рдЪрд╛рд╣реЗ рдЬреЛ рднреА рд╣реЛред

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

рдЬрдм рд╣реБрдХ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рддреЛ рдореЗрд░рд╛ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдмрдХрд┐ рдлрд╝реНрд▓рдЯрд░ рдХреЛ

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

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

рдмрд╣реБрдд рдмрд╛рд░ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдкреИрдХреЗрдЬ рдмрдирд╛рддреЗ рд╕рдордп, рд╣рдо рдмрд╣рд╕ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдкреИрдХреЗрдЬ рдХреЛ "рд╢реБрджреНрдз" рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕ рдЕрд░реНрде рдореЗрдВ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдбрд╛рд░реНрдЯ + рд╕реНрдкрдВрджрди рдПрд╕рдбреАрдХреЗ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдпрджрд┐ рд╣рдо рдЗрд╕рдореЗрдВ рдХреБрдЫ рдЕрдиреНрдп рдкреИрдХреЗрдЬреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдХреМрди рд╕рд╛ рд╡рд╛рд▓реЗред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдкреНрд░рджрд╛рддрд╛ "рд╢реБрджреНрдз" рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП рдмрд╛рд╣рд░ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдХреНрд╕рд░ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рддреА рд╣реИред рдПрдХ рдРрдк рдХреЗ рд▓рд┐рдП рд╣рдореЗрд╢рд╛ рдПрдХ рд╣реА рдмрд╣рд╕ рд╣реЛрддреА рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рдкреИрдХреЗрдЬ рдареАрдХ рд╣реИрдВ рдФрд░ рдХреМрди рд╕реЗ рдирд╣реАрдВред рдкреНрд░рджрд╛рддрд╛ рд╣рд░рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣реБрдХ рдЬреИрд╕рд╛ рдХреБрдЫ рдЕрднреА рднреА рдПрдХ рдкреИрдХреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдкреНрд░рд╢реНрди рдЪрд┐рд╣реНрди рд╣реИред

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

(рд╣рдорд╛рд░рд╛ рдкреИрдХреЗрдЬ рд░реВрдврд╝рд┐рд╡рд╛рдж рдЖрддрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрддреАрдд рдореЗрдВ рдЕрдиреНрдп рдкреИрдХреЗрдЬ рдкреНрд░рдмрдВрдзрдХреЛрдВ рдкрд░ рдкреИрдХреЗрдЬ рдФрд░ рдирд┐рд░реНрднрд░рддрд╛ рдЧрдбрд╝рдмрдбрд╝реА рд╕реЗ рдЬрд▓рд╛ рджрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рд╢рд╛рдпрдж рдЕрджреНрд╡рд┐рддреАрдп рдирд╣реАрдВ рд╣реИред)

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

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

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

рд╣рдордиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд░реЗрд╕реНрдЯреЛрд░реЗрдмрд▓рдкреНрд░реЙрдкрд░реНрдЯреАрдЬ рдХреЛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рд╣реИред рдпрд╣ рджреЗрдЦрдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рддрд░рд╣ рдпрд╣рд╛рдВ рд▓реАрд╡рд░реЗрдЬ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ...

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

@ рд╣рд┐рдХреНрд╕реА рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ рд╡рд┐рдЧреЗрдЯреНрд╕ рдХреЗ рдмреАрдЪ рдПрдХ рд░рдЪрдирд╛рддреНрдордХ рддрд░реАрдХреЗ рд╕реЗ рд░рд╛рдЬреНрдп рддрд░реНрдХ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ? рдЗрд╕рд▓рд┐рдП рдЖрдкрдиреЗ рдХрд┐рд╕реА рддрд░рд╣ ResuableProperties рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛?

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

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

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

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

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

рдЖрдЧреЗ рдХрд╛ рд░рд╛рд╕реНрддрд╛ рдХреМрди рддрдп рдХрд░рддрд╛ рд╣реИ?
рдЕрдЧрд▓рд╛ рдХрджрдо рдХреНрдпрд╛ рд╣реИ?

рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдШрд╛рддрдХ рд╕рдорд╕реНрдпрд╛ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдЕрдиреБрд╢рд╛рд╕рди рдФрд░ рдкреНрд░рд▓реЗрдЦрди рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рд╕реЗ рдЖрдк рдЗрд╕рд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди IMHO рдЗрд╕ рдХреЛрдб рдХреЗ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

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

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

@ рд╣рд┐рдХреНрд╕реА рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ рд╡рд┐рдЧреЗрдЯреНрд╕ рдХреЗ рдмреАрдЪ рдПрдХ рд░рдЪрдирд╛рддреНрдордХ рддрд░реАрдХреЗ рд╕реЗ рд░рд╛рдЬреНрдп рддрд░реНрдХ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ? рдЗрд╕рд▓рд┐рдП рдЖрдкрдиреЗ рдХрд┐рд╕реА рддрд░рд╣ ResuableProperties рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛?

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

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

рдореЗрд░рд╛ рдХрд╣рдирд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдПрдХ рдЕрдЪреНрдЫреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдХреЛ рд░реИрдкрд░ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред

рдЕрдЧрд▓рд╛ рдХрджрдо рдХреНрдпрд╛ рд╣реИ?

рдХрдИ рдЕрдЧрд▓реЗ рдЪрд░рдг рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

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

рдпрд╣ рдЕрдВрдХ рд╕реВрддреНрд░ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рдкрдврд╝рд╛ рдЧрдпрд╛ рдФрд░ рдореБрдЭреЗ рдпрд╣ рджреЗрдЦрдХрд░ рдЦреБрд╢реА рд╣реЛ рд░рд╣реА рд╣реИ рдХрд┐ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рд╕рднреНрдп рдмрдирд╛ рд╣реБрдЖ рд╣реИред

рдореБрдЭреЗ рдпрд╣ рджреЗрдЦрдиреЗ рд╕реЗ рдирдлрд░рдд рд╣реЛрдЧреА рдХрд┐ рдПрдХ рдЕрд╕рднреНрдп рдзрд╛рдЧрд╛ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред рдЗрд╕ рд╕реВрддреНрд░ рдореЗрдВ рдЗрддрдиреА рдХрдо рд╕рд╣рд╛рдиреБрднреВрддрд┐ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдкрдврд╝рдирд╛ рдФрд░ рдХрд┐рдирд╛рд░реЗ рд╕реЗ рдкрд╛рд▓рди рдХрд░рдирд╛ рдХрдард┐рди рд╣реЛ рдЧрдпрд╛ рд╣реИ

рдореЗрд░рд╛ рдХрд╣рдирд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдПрдХ рдЕрдЪреНрдЫреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдХреЛ рд░реИрдкрд░ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред

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

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

рдХреЛрд░ рдореЗрдВ рдПрдХ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдХрдВрдкреЛрдЬрд╝реЗрдмрд▓ рд╕реНрдЯреЗрдЯ рд▓реЙрдЬрд┐рдХ рд╕реЙрд▓реНрдпреВрд╢рди рдХрд╛ рдорддрд▓рдм рд╣реЛрдЧрд╛ рдХрд┐ рд▓реЛрдЧреЛрдВ рдХреЛ рд░реИрдкрд░ рд▓рд┐рдЦрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реЛрдЧреА рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рддрд░реНрдХ рдХреЛ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЬреЛрдбрд╝реЗ рдмрд┐рдирд╛ рд╕рднреА рдкреИрдХреЗрдЬреЛрдВ рдореЗрдВ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рднреЗрдЬ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

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

рд╡рд░реНрддрдорд╛рди рдкреНрд░рддрд┐рдмрдВрдз рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИрдВ рдХрд┐ рд╣реБрдХ рднрд╛рд╖рд╛ рд╕реАрдорд╛рдУрдВ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рдкреИрдЪ рд╣реИрдВред

рдХреБрдЫ рднрд╛рд╖рд╛ рдореЗрдВ, рд╣реБрдХ рдПрдХ рднрд╛рд╖рд╛ рдирд┐рд░реНрдорд╛рдг рд╣реЛрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ:

state count = 0;

return RaisedButton(
  onPressed: () => count++,
  child: Text('clicked $count times'),
)

рдпрд╣ async /sync рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛, рдЬреЛ рдХреЙрд▓ рдХреЗ рджреМрд░рд╛рди рдХреБрдЫ рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рдмрдирд╛рдП рд░рдЦ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕реЗ рдЕрдм рдЧреИрд░-рд╕рд╢рд░реНрдд рдЙрдкрдпреЛрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рднрд╛рд╖рд╛ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдЪрд░ рдХреЛ рдЙрдирдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрдЬрд╛рдп рдЙрдирдХреА рдкрдВрдХреНрддрд┐ рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдЕрд▓рдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореИрдВ рдЬреЛрдбрд╝реВрдВрдЧрд╛ рдХрд┐ рд╣реБрдХ рд╕реАрдорд╛рдПрдВ --track-widget-creation рд╕реАрдорд╛рдУрдВ рдХреЗ рд╕рдорд╛рди рд╣реИрдВред

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

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

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

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

рдпрд╣рд╛рдБ рдереЛрдбрд╝рд╛ рд╕рд╛ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░рддреЗ рд╣реБрдП, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдХреА рд╕рднреНрдпрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рд╣реИред рдореБрдЭреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣рд╛рдВ рдХреЛрдИ рдЕрд╕рднреНрдп рд╣реЛ рд░рд╣рд╛ рд╣реИред

рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдРрд╕рд╛ рд╡рд┐рд╖рдп рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╣рд░ рддрд░рдл рд╕реЗ рд▓реЛрдЧ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдзреНрдпрд╛рди рджреЗрддреЗ рд╣реИрдВред

  • @rrousselGit рдХрдИ рд╡рд░реНрд╖реЛрдВ рд╕реЗ StackOverflow рдФрд░ package:provider рдЗрд╢реНрдпреВ рдЯреНрд░реИрдХрд░ рдкрд░ рд░рд╛рдЬреНрдп рдкреНрд░рдмрдВрдзрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢реБрд░реБрдЖрддреА рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рджреЗ рд░рд╣рд╛ рд╣реИред рдореИрдВ рдХреЗрд╡рд▓ рдЗрди рдлрд╛рдпрд░рд╣реЛрдЬ рдХреЗ рдмрд╛рдж рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рд░реЗрдореА рдХреЗ рдкрд░рд┐рд╢реНрд░рдо рдФрд░ рдзреИрд░реНрдп рдХреЗ рд▓рд┐рдП рд╕рдореНрдорд╛рди рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИред
  • рдлрд╝реНрд▓рдЯрд░ рдЯреАрдо рдХреЗ рдлрд╝реНрд▓рдЯрд░ рдХреЗ рдПрдкреАрдЖрдИ, рдЗрд╕рдХреА рд╕реНрдерд┐рд░рддрд╛, рд╕рддрд╣, рд░рдЦрд░рдЦрд╛рд╡ рдФрд░ рдкрдардиреАрдпрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдзреНрдпрд╛рди рд░рдЦрддреЗ рд╣реИрдВред рдпрд╣ рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рд╣реИ рдХрд┐ рдлрд╝реНрд▓рдЯрд░ рдХрд╛ рдбреЗрд╡рд▓рдкрд░ рдЕрдиреБрднрд╡ рд╡рд╣ рд╣реИ рдЬрд╣рд╛рдБ рд╡рд╣ рдЖрдЬ рд╣реИред
  • рд╕реНрдкрдВрджрди рдбреЗрд╡рд▓рдкрд░реНрд╕ рд░рд╛рдЬреНрдп рдкреНрд░рдмрдВрдзрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдкрд░рд╡рд╛рд╣ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЕрдкрдиреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рдордп рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рдпрд╣реА рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╕рднреА рдкрдХреНрд╖реЛрдВ рдХреЗ рдкрд╛рд╕ рдЗрд╕ рдмрд╛рдд рдкрд░ рдмрд╣рд╕ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╡реЗ рдХреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рднреА рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрджреЗрд╢реЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдореЗрдВ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред

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

рдЕрдЧрд░, рджреВрд╕рд░реА рдУрд░, рд▓реЛрдЧреЛрдВ рдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдЪрд░реНрдЪрд╛ рд╣рд╛рде рд╕реЗ рдирд┐рдХрд▓ рд░рд╣реА рд╣реИ, рддреЛ рдЖрдЗрдП рд░реБрдХреЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред

(рдЕрд▓рдЧ рд╕реЗ, рдореИрдВ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП @gaearon рдХреЛ рдЪрд┐рд▓реНрд▓рд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ рд░рд┐рдПрдХреНрдЯ рдХрд╛ рдЕрдиреБрднрд╡ рдЕрдореВрд▓реНрдп рд╣реИред)

@ рдЗрдореИрдиреБрдПрд▓-рд▓реБрдВрдбрдореИрди

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

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдореИрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдирд╣реАрдВ рдмрддрд╛ рд╕рдХрддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ред :-)

@escamoteur

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

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

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

рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдЬреЛ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рд╣реИ, рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдк рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ? https://github.com/flutter/flutter/issues/51752#issuecomment -669626522

рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЛрдб-рд╕реНрдирд┐рдкреЗрдЯ рд╣реИред

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

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореЗрд░рд╛ рдорддрд▓рдм рдХреЛрдб-рд╕реНрдирд┐рдкреЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдерд╛, рдРрдк рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВред

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

рдореЗрд░реЗ рдкрд╛рд╕ рд░рд┐рд╡рд░рдкреЙрдб рдкрд░ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ, рдЬреИрд╕реЗ https://marvel.riverpod.dev/#/ рдЬрд╣рд╛рдВ рд╕реНрд░реЛрдд рдХреЛрдб рдпрд╣рд╛рдВ рд╣реИ: https://github.com/rrousselGit/river_pod/tree/master/examples/marvel/lib
рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдм рддрдХ рдЬреЛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЙрд╕рд╕реЗ рдмрд╣реБрдд рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

@ рд╣рд┐рдХреНрд╕реА

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

рдореИрдВ рдПрдХ рд╣реА рдирд╛рд╡ рдореЗрдВ рд╣реВрдБред
рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдБ, рдореИрдВ рдпрд╣рд╛рдБ рд╡рд░реНрдгрд┐рдд рдореБрджреНрджреЛрдВ рдХреЛ рднреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рд╕рдордЭрддрд╛ рд╣реВрдБред рдореИрдВ рдпрд╣ рднреА рдирд╣реАрдВ рд╕рдордЭрддрд╛ рдХрд┐ "рд░рд╛рдЬреНрдп рддрд░реНрдХ" рдХреНрдпрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рд▓реЛрдЧ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдореЗрд░реЗ рдкрд╛рд╕ рдХрдИ рд╕реНрдЯреЗрдЯрдлреБрд▓ рдлреЙрд░реНрдо рд╡рд┐рдЬреЗрдЯ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдореЗрдВ рджрд╕рд┐рдпреЛрдВ рдлреЙрд░реНрдо рдлрд╝реАрд▓реНрдб рд╣реИрдВ, рдФрд░ рдореБрдЭреЗ рдЯреЗрдХреНрд╕реНрдЯ рдХрдВрдЯреНрд░реЛрд▓рд░ рдФрд░ рдлреЛрдХрд╕рдиреЛрдбреНрд╕ рдХреЛ рд╕реНрд╡рдпрдВ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдирд╛ рд╣реИред рдореИрдВ рдЙрдиреНрд╣реЗрдВ рд╕реНрдЯреЗрдЯрд▓реЗрд╕рд╡рд┐рдЬреЗрдЯ рдХреА рдЬреАрд╡рдирдЪрдХреНрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдмрдирд╛рддрд╛ рдФрд░ рдЙрдирдХрд╛ рдирд┐рдкрдЯрд╛рди рдХрд░рддрд╛ рд╣реВрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдХрд╛рдлреА рдердХрд╛рдК рд╣реИ, рдореЗрд░реЗ рдкрд╛рд╕ рдРрд╕рд╛ рдХреЛрдИ рд╡рд┐рдЬреЗрдЯ рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╕рдорд╛рди рдорд╛рддреНрд░рд╛ рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ/рдлреЛрдХрд╕ рдиреЛрдбреНрд╕ рдпрд╛ рд╕рдорд╛рди рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реЛред рдЙрдирдХреЗ рдмреАрдЪ рдПрдХрдорд╛рддреНрд░ рд╕рд╛рдорд╛рдиреНрдп рдмрд╛рдд рд╕реНрдЯреЗрдЯрдлреБрд▓ рд╣реЛрдиреЗ рдФрд░ рдПрдХ рд░реВрдк рд╣реЛрдиреЗ рдХреА рд╕рд╛рдорд╛рдиреНрдп рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИред рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рдХрд┐ рдпрд╣ рдПрдХ рдкреИрдЯрд░реНрди рд╣реИ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреЛрдб рджреЛрд╣рд░рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдореЗрд░реЗ рдХреЛрдб рдХреЗ рдмрд╣реБрдд рд╕реЗ рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рдореБрдЭреЗ рд╕рд░рдгреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реВрдк рдХрд░рдирд╛ рд╣реИ, рдореИрдВ рдЕрдкрдиреЗ рдРрдк рджреЛрд╣рд░рд╛рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдореЗрдВ "(рдЪреАрдЬреЛрдВ рдореЗрдВ var рдЪреАрдЬрд╝)" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред

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

рдореЗрд░реЗ рдкрд╛рд╕ рдпрд╣рд╛рдВ рд▓рд╛рдП рдЧрдП рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдореБрджреНрджреЗ рд╣реИрдВ, рдЬреЛ рдХреБрдЫ рд╣рдж рддрдХ рдЖрдкрдХреЗ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВ:

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

рдпрд╣ рдХрд╛рдлреА рдХрдо рдкрдардиреАрдп рд╣реИред

  • рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдХреЗ 10 рд╕реНрддрд░ рд╣реИрдВ - 12 рдпрджрд┐ рд╣рдо рдлрд╝рд┐рд▓реНрдЯрд░ рддрд░реНрдХ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП FilterBuilder рдмрдирд╛рддреЗ рд╣реИрдВ
  • рдлрд╝рд┐рд▓реНрдЯрд░ рддрд░реНрдХ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЦрдбрд╝рд╛ рд╣реИред

    • рд╣рдо рдЧрд▓рддреА рд╕реЗ timer рд░рджреНрдж рдХрд░рдирд╛ рднреВрд▓ рд╕рдХрддреЗ рд╣реИрдВ
  • build рдкрджреНрдзрддрд┐ рдХрд╛ рдЖрдзрд╛ рднрд╛рдЧ рдкрд╛рдардХ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИред рдмрд┐рд▓реНрдбрд░реНрд╕ рд╣рдореЗрдВ рдЙрди рдЪреАрдЬрд╝реЛрдВ рд╕реЗ рд╡рд┐рдЪрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдорд╛рдпрдиреЗ рд░рдЦрддреА рд╣реИрдВ
  • рдореИрдВрдиреЗ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдореЗрдВ 5 рдорд┐рдирдЯ рдХрд╛ рдЕрдЪреНрдЫрд╛ рд╕рдордп рдЦреЛ рджрд┐рдпрд╛ рд╣реИ рдХрд┐ рд▓рд╛рдкрддрд╛ рдХреЛрд╖реНрдардХ рдХреЗ рдХрд╛рд░рдг рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ

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

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

рдореИрдВ рдпрд╣ рднреА рдирд╣реАрдВ рд╕рдордЭрддрд╛ рдХрд┐ "рд░рд╛рдЬреНрдп рддрд░реНрдХ" рдХреНрдпрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рд▓реЛрдЧ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдХрд╛рдлреА рдЙрдЪрд┐рдд
рд░рд╛рдЬреНрдп рддрд░реНрдХ рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдпреВрдЖрдИ рддрд░реНрдХ рд╣реЛрдЧрд╛, рдФрд░ рд╡рд┐рдЬреЗрдЯ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдХреНрдпрд╛ рд▓рд╛рдПрдЧрд╛ред

рд╣рдо рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рд╡рд┐рдЬреЗрдЯ рдкрд░рдд рдХреЛ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЬреЛ рдХреБрдЫ рдмрдЪрд╛ рд╣реЛрдЧрд╛ рд╡рд╣ рд╣реИ RenderObjects.

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдиреНрдпреВрдирддрдо рдХрд╛рдЙрдВрдЯрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

var counter = 0;

final counterLabel = RenderParagraph(
  TextSpan(text: '$counter'),
  textDirection: TextDirection.ltr,
);

final button = RenderPointerListener(
  onPointerUp: (_) {
    counter++;
    counterLabel.text = TextSpan(text: '$counter');
  },
  child: counterLabel,
);

рдпрд╣ рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рдЬрдЯрд┐рд▓ рд╣реЛред рд▓реЗрдХрд┐рди рдпрд╣ рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ counterLabel рд░реЗрдВрдбрд░рд┐рдВрдЧ рдкрд░ рдПрдХ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣реИ

рд╡рд┐рдЬреЗрдЯ рдХреЗ рд╕рд╛рде, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИ:

class _CounterState exends State {
  int counter = 0;

  Widget build(context ) {
    return GestureDetector(
      onTap: () => setState(() => counter++);
      child: Text('$counter'),
    );
  }
}

рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдиреЗ рдЗрд╕реЗ рдШреЛрд╖рдгрд╛рддреНрдордХ рдмрдирд╛рдХрд░ Text рддрд░реНрдХ рдХреЛ рдХрд╛рд░рдХ рдмрдирд╛рдпрд╛ рд╣реИред
рдпрд╣ рдПрдХ рдиреНрдпреВрдирддрдо рдкрд░рд┐рд╡рд░реНрддрди рд╣реИред рд▓реЗрдХрд┐рди рдПрдХ рдмрдбрд╝реЗ рдХреЛрдбрдмреЗрд╕ рдкрд░, рдпрд╣ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рд░рд▓реАрдХрд░рдг рд╣реИред

рд╣реБрдХ рдареАрдХ рдпрд╣реА рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрдЬрд╛рдп Text , рдЖрдкрдХреЛ рд╕реНрдЯреЗрдЯ рд▓реЙрдЬрд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рд╣реБрдХ рдорд┐рд▓рддреЗ рд╣реИрдВред рдЬрд┐рд╕рдореЗрдВ рд╢реНрд░реЛрддрд╛, рдмрд╣рд╕ рдХрд░рдирд╛, HTTP рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛,...


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

рдпрд╣ рдкреНрд░рджрд╛рддрд╛ рд╕реЗ рдЕрд╕рдВрдмрдВрдзрд┐рдд рд╣реИ (рдпрд╣ рдХреЛрдб рдкреНрд░рджрд╛рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ)ред
рдпрджрд┐ рдХреБрдЫ рднреА рд╣реЛ, рддреЛ рдкреНрд░рджрд╛рддрд╛ рдХреЗ рдкрд╛рд╕ рдпрд╣ рдмреЗрд╣рддрд░ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ context.watch рдмрдЬрд╛рдп Consumer ред

рдорд╛рдирдХ рд╕рдорд╛рдзрд╛рди Consumer рдХреЛ ValueListenableBuilder рд╕реЗ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ - рдЬреЛ рдареАрдХ рдЙрд╕реА рд╕рдорд╕реНрдпрд╛ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред

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

@satvikpendem
рдореИрдВ рдорджрдж рдХрд░рдиреЗ рдХреЛ рддреИрдпрд╛рд░ рд╣реВрдВред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ flutter_hooks рд░реЗрдкреЛ рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдРрдк рд╢рд╛рдпрдж рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реБрдХ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдФрд░ рд╡реЗ рдХреНрдпрд╛ рдЖрд╕рд╛рди/рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫреА рд╢реБрд░реБрдЖрдд рд╣реЛрдЧреАред

рдореИрдВ рдпрд╣ рднреА рд╕реЛрдЪрддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рдЗрд╕ рдЕрдВрдХ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЧрдП рдХреБрдЫ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдФрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрджреНрдпрддрди: рдХреЛрдб рдпрд╣рд╛рдБ рд╣реИ, https://github.com/TimWhiting/local_widget_state_approaches
рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рднрдВрдбрд╛рд░ рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рдирд╛рдо рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рди рдорд╛рдиреЗрдВ рдХрд┐ рдпрд╣реА рд╡рд╣ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореИрдВрдиреЗ рдореВрд▓ рдХрд╛рдЙрдВрдЯрд░ рдРрдк рдХреЛ рд╕реНрдЯреЗрдЯрдлреБрд▓ рдФрд░ рд╣реБрдХ рдореЗрдВ рдХрд┐рдпрд╛ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рдЖрдЬ рд░рд╛рдд рдХреЗ рдмрд╛рдж рдЬреНрдпрд╛рджрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдЬреЛ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдЕрдзрд┐рдХ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдЬреЛ рдХреЛрдИ рднреА рдпреЛрдЧрджрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдХреГрдкрдпрд╛ рдкрд╣реБрдВрдЪ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВред

рд╣рдордиреЗ рдпрд╣рд╛рдВ рдЬрд┐рди рдареЛрд╕ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рд╣реИ, рдЬреИрд╕реЗ "fetchUser" рдЙрджрд╛рд╣рд░рдг, рд╣рдореЗрд╢рд╛ "рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЖрдк рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рдВрднрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ рдФрд░ рд╣реБрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА" рдХреА рддрд░реНрдЬ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реБрдЖ рд╣реИред "рдареАрдХ рд╣реИ, рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдЖрдкрдХреЛ рд╣реБрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ"ред

рдореИрдВ рдЕрд╕рд╣рдордд рд╣реВрдВред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдореИрдВрдиреЗ рдРрд╕рд╛ рджреЗрдЦрд╛ рд╣реИ "рдЖрдк рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЛ рд╕рдВрднрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ" рдФрд░ рд╕рд╣рдордд рд╣реБрдП рдХрд┐ рдкрд░рд┐рдгрд╛рдореА рдХреЛрдб рд╣реБрдХ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдмреЗрд╣рддрд░ рдерд╛ред

рдореЗрд░рд╛ рдХрд╣рдирд╛ рдпрд╣ рдерд╛ рдХрд┐ рдЬрдм рд╣рдо рдЪреАрдЬреЛрдВ рдХреЛ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдкрд░рд┐рдгрд╛рдореА рдХреЛрдб рддреНрд░реБрдЯрд┐-рдкреНрд░рд╡рдг рдФрд░/рдпрд╛ рдХрдо рдкрдардиреАрдп рд╣реИред
рдпрд╣ fetchUser рднреА рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ

рд╣реБрдХ рдареАрдХ рдпрд╣реА рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрдЬрд╛рдп Text , рдЖрдкрдХреЛ рд╕реНрдЯреЗрдЯ рд▓реЙрдЬрд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рд╣реБрдХ рдорд┐рд▓рддреЗ рд╣реИрдВред рдЬрд┐рд╕рдореЗрдВ рд╢реНрд░реЛрддрд╛, рдмрд╣рд╕ рдХрд░рдирд╛, HTTP рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛,...

рдирд╣реАрдВ, рдореБрдЭреЗ рдЕрднреА рднреА рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ рдХрд┐ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд░рд╛рдЬреНрдп рддрд░реНрдХ рдХреНрдпрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдХрдИ рд╡рд┐рдЬреЗрдЯ рд╣реИрдВ рдЬреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЙрдирдХреЗ "initState/didUpdateDependency" рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдкрдврд╝рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рджреЛ рд╡рд┐рдЬреЗрдЯ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рд╕рдЯреАрдХ рд╡рд╣реА рдХреНрд╡реЗрд░реА рдмрдирд╛рддреЗ рд╣реИрдВ рдЗрд╕рд▓рд┐рдП рдЙрдирдХрд╛ "рддрд░реНрдХ" рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИред

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

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


рдпрд╣ рдкреНрд░рджрд╛рддрд╛ рд╕реЗ рдЕрд╕рдВрдмрдВрдзрд┐рдд рд╣реИ (рдпрд╣ рдХреЛрдб рдкреНрд░рджрд╛рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ)ред
рдпрджрд┐ рдХреБрдЫ рднреА рд╣реЛ, рддреЛ рдкреНрд░рджрд╛рддрд╛ рдХреЗ рдкрд╛рд╕ рдпрд╣ рдмреЗрд╣рддрд░ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ context.watch рдмрдЬрд╛рдп Consumer ред

рд╣реБрд╣? рдЖрдкрдХреЗ "рдЪреИрдЯрд╕реНрдХреНрд░реАрди" рд╣реБрдХрд╡рд┐рдЬреЗрдЯ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рдкреНрд░рддрд┐рд░реВрдк рдпрд╣ рдерд╛:

<strong i="19">@override</strong>
  Widget build(BuildContext context) {
    return Consumer<Auth>(
      provider: authProvider,
      builder: (context, auth, child) {
        return Consumer<int>(
          provider: selectedChatProvider,
          builder: (context, chatId, child) {

рдпрд╣ рдкреНрд░рджрд╛рддрд╛ рд╕реЗ рдХреИрд╕реЗ рдЕрд╕рдВрдмрдВрдзрд┐рдд рд╣реИ? рдореИрдВ рдЙрд▓рдЭрди рдореЗрдВ рд╣реВрдВред рдореИрдВ рдкреНрд░рджрд╛рддрд╛ рдореЗрдВ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рджрд╛рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдХреЛрдб рдЬреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИред

рдореИрдВ рдЗрд╕ рдмрд╛рдд рдкрд░ рдЬреЛрд░ рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рдЬрдЯрд┐рд▓ рд░рд╛рдЬреНрдпреЛрдВ рдХрд╛ рдирд╣реАрдВ рд╣реИред
рдпрд╣ рдЫреЛрдЯреЗ рд╡реЗрддрди рд╡реГрджреНрдзрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдЬрд┐рд╕реЗ рдкреВрд░реЗ рдХреЛрдбрдмреЗрд╕ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

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

рдореЗрд░реА рдЕрдиреБрд╢рдВрд╕рд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп ImplicitFetcher рдЬреИрд╕реЗ рд╕рд╛рдЗрдб-рдмрд╛рдп-рд╕рд╛рдЗрдб рдорд╛рдЗрдХреНрд░реЛ-рд╕реНрдирд┐рдкреЗрдЯ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ, рдФрд░ _objectively_ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ рдХрд┐ рдорд╛рдкрдиреЗ рдпреЛрдЧреНрдп рдореАрдЯреНрд░рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреМрди рд╕рд╛ рдХреЛрдб рдмреЗрд╣рддрд░ рд╣реИ, рдФрд░ рдЗрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдЫреЛрдЯреЗ рд╕реНрдирд┐рдкреЗрдЯ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВред


рдпрд╣ рдкреНрд░рджрд╛рддрд╛ рд╕реЗ рдХреИрд╕реЗ рдЕрд╕рдВрдмрдВрдзрд┐рдд рд╣реИ? рдореИрдВ рдЙрд▓рдЭрди рдореЗрдВ рд╣реВрдВред рдореИрдВ рдкреНрд░рджрд╛рддрд╛ рдореЗрдВ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рджрд╛рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдХреЛрдб рдЬреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИред

рдпрд╣ рдХреЛрдб рдкреНрд░рджрд╛рддрд╛ рд╕реЗ рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рдПрдХ рдЕрд▓рдЧ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рд╣реИ рдЬреЛ рдЗрдирд╣реЗрд░рд┐рдЯреЗрдбрд╡рд┐рдбреНрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдкреНрд░рджрд╛рддрд╛ рдХреЗ Consumer рдореЗрдВ provider рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рд╣реИред

рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдЖрдк Consumer -> ValueListenableBuilder/StreamBuilder/BlocBuilder/рдСрдмреНрдЬрд░реНрд╡рд░/...

рдЙрдирдХреЗ "initState/didUpdateDependency" рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рджреЛ рд╡рд┐рдЬреЗрдЯ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рд╕рдЯреАрдХ рд╡рд╣реА рдХреНрд╡реЗрд░реА рдмрдирд╛рддреЗ рд╣реИрдВ рдЗрд╕рд▓рд┐рдП рдЙрдирдХрд╛ "рддрд░реНрдХ" рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИред

рд╣рдо рдЬрд┐рд╕ рд░рд╛рдЬреНрдп рддрд░реНрдХ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╡рд╣ "рдПрдХ рдкреНрд░рд╢реНрди рдкреВрдЫреЗрдВ" рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ "рдЬрдм x рдмрджрд▓рддрд╛ рд╣реИ рддреЛ рдХреБрдЫ рдХрд░реЗрдВ"ред "рдХреБрдЫ рдХрд░реЛ" рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди "рдЬрдм рдПрдХреНрд╕ рдмрджрд▓рддрд╛ рд╣реИ" рдЖрдо рд╣реИ

рдареЛрд╕ рдЙрджрд╛рд╣рд░рдг:
рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЬрдм рднреА рдЖрдИрдбреА рдореЗрдВ рдмрджрд▓рд╛рд╡ рдЖрдП рддреЛ рд╡рд┐рдЬреЗрдЯ рдПрдХ HTTP рдЕрдиреБрд░реЛрдз рдХрд░реЗред
рд╣рдо package:async рдХреЗ CancelableOperation рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рдВрдмрд┐рдд рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рднреА рд░рджреНрдж рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдЕрдм, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рд╡рд┐рдЬреЗрдЯ рд╣реИрдВ рдЬреЛ рдмрд┐рд▓реНрдХреБрд▓ рд╡рд╣реА рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдЕрд▓рдЧ HTTP рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рдеред
рдЕрдВрдд рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИ:

CancelableOperation<User> pendingUserRequest;

initState() {
  pendingUserRequest = fetchUser(widget.userId);
}

didUpdateWidget(oldWidget) {
  if (widget.userId != oldWidget.userId) {
      pendingUserRequest.cancel();
      pendingUserRequest = fetchUser(widget.userId);
  }
}

dispose() {
  pendingUserRequest.cancel();
}

рд╡реА.рдПрд╕.:

CancelableOperation<Message> pendingMessageRequest;

initState() {
  pendingMessageRequest = fetchMessage(widget.messageId);
}

didUpdateWidget(oldWidget) {
  if (widget.userId != oldWidget.messageId) {
      pendingMessageRequest.cancel();
      pendingMessageRequest = fetchMessage(widget.messageId);
      message = pendingMessageRequest.value;
  }
}

dispose() {
  pendingMessageRequest.cancel();
}

рдлрд░реНрдХ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реИ рдХрд┐ рд╣рдордиреЗ fetchUser рдХреЛ fetchMessage ред рддрд░реНрдХ рдЕрдиреНрдпрдерд╛ 100% рд╕рдорд╛рди рд╣реИред рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдЬреЛ рддреНрд░реБрдЯрд┐-рдкреНрд░рд╡рдг рд╣реИред

рд╣реБрдХ рдХреЗ рд╕рд╛рде, рд╣рдо рдЗрд╕реЗ useUnaryCancelableOperation рд╣реБрдХ рдореЗрдВ рдХрд╛рд░рдХ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕рдорд╛рди рджреЛ рд╡рд┐рдЬреЗрдЯ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдХрд░реЗрдВрдЧреЗ:

Widget build(context) {
  Future<User> user = useUnaryCancelableOperation(userId, fetchUser);
}

рдмрдирд╛рдо

Widget build(context) {
  Future<Message> message = useUnaryCancelableOperation(messageId, fetchMessage);
}

рдЗрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ, рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рд░рджреНрдж рдХрд░рдиреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рднреА рддрд░реНрдХ рд╕рд╛рдЭрд╛ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдПрдХ рд╕рд╛рд░реНрдердХ рдЕрдВрддрд░ рд░рд╣ рдЧрдпрд╛ рд╣реИ, рдЬреЛ fetchUser рдмрдирд╛рдо fetchMessage ред
рд╣рдо рдЗрд╕рдореЗрдВ рд╕реЗ рдПрдХ рдкреИрдХреЗрдЬ рднреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ useUnaryCancelableOperation , рдФрд░ рдЕрдм рд╣рд░ рдХреЛрдИ рдЕрдкрдиреЗ рдРрдк рдореЗрдВ рдЗрд╕рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

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

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

рдлрд░реНрдХ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реИ рдХрд┐ рд╣рдордиреЗ fetchUser рдХреЛ fetchMessage ред рддрд░реНрдХ рдЕрдиреНрдпрдерд╛ 100% рд╕рдорд╛рди рд╣реИред рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдЬреЛ рддреНрд░реБрдЯрд┐-рдкреНрд░рд╡рдг рд╣реИред

рддреНрд░реБрдЯрд┐ рдкреНрд░рд╡рдг рдХреНрдпрд╛ рд╣реИ рдФрд░ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рд╣реИ? рдЕрдореВрд░реНрддрддрд╛ рдФрд░ рд╡рд░реНрдЧ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреА рдПрдХ рдкреВрд░реА рдирдИ рдкрд░рдд рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рддрд╛рдХрд┐ рд╣рдореЗрдВ рдХрдХреНрд╖рд╛ рдореЗрдВ рддреАрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рди рд╣реЛ рдФрд░ рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИред

рджреЛрдмрд╛рд░рд╛, рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рдХрд┐ рдХреБрдЫ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреИрдЯрд░реНрди рд╣реИ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рд╕реБрд╡рд┐рдзрд╛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдЖрдк рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рджреЛрд╣рд░рд╛рд╡ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреЛ рдХрдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдХреЗрд╡рд▓ StatefulWidget* рд╡рд░реНрдЧ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдмрд┐рдЯреНрд╕ рдХреЗ рд╕рд╛рде initstate/didUpdateWidget рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╣реБрдХ рдХреЗ рд╕рд╛рде, рд╣рдо рдЗрд╕реЗ useUnaryCancelableOperation рд╣реБрдХ рдореЗрдВ рдХрд╛рд░рдХ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕рдорд╛рди рджреЛ рд╡рд┐рдЬреЗрдЯ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдХрд░реЗрдВрдЧреЗ:

Widget build(context) {
  Future<User> user = useUnaryCancelableOperation(userId, fetchUser);
}

рдмрдирд╛рдо

Widget build(context) {
  Future<Message> message = useUnaryCancelableOperation(messageId, fetchMessage);
}

рдЗрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ, рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рд░рджреНрдж рдХрд░рдиреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рднреА рддрд░реНрдХ рд╕рд╛рдЭрд╛ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдПрдХ рд╕рд╛рд░реНрдердХ рдЕрдВрддрд░ рд░рд╣ рдЧрдпрд╛ рд╣реИ, рдЬреЛ fetchUser рдмрдирд╛рдо fetchMessage ред
рд╣рдо рдЗрд╕рдореЗрдВ рд╕реЗ рдПрдХ рдкреИрдХреЗрдЬ рднреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ useUnaryCancelableOperation , рдФрд░ рдЕрдм рд╣рд░ рдХреЛрдИ рдЕрдкрдиреЗ рдРрдк рдореЗрдВ рдЗрд╕рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдореБрдЭреЗ рдЦреЗрдж рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░реА рдУрд░ рд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИред рдЗрд╕ рддрдереНрдп рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐ рдпрд╣ рдХреЛрдб рдЕрддрд┐рд░реЗрдХ рдХреА рдХреЗрд╡рд▓ рдПрдХ рдЫреЛрдЯреА рд░рд╛рд╢рд┐ рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИ, рдПрдХ рдХреЛрдб рдХреЛ "рдХрд╛рд░рдХ рдмрдирд╛рдирд╛" рдЬреЛ рдХрд┐ рдЕрд╡рдзрд╛рд░рдгрд╛рддреНрдордХ рд░реВрдк рд╕реЗ "initState" рдФрд░ "рдЕрдкрдбреЗрдЯ" рдЬреАрд╡рдирдЪрдХреНрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдирд┐рд░реНрдорд╛рдг рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рд╣реИред

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

рдЕрдЧрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рд╣реИ рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕ рдмрдЧ рдХреЛ рдмрдВрдж рдХрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП

@ рд╣рд┐рдХреНрд╕реА рдХреГрдкрдпрд╛ рдордд рдХрд░реЛред рд▓реЛрдЧ рдЗрд╕ рдореБрджреНрджреЗ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдЖрдкрдХреЗ рд╕рд╛рде reddit рдкрд░ рдЙрд╕реА рдЪреАрдЬрд╝ рдХреЗ рдмрд╛рд░реЗ https://github.com/szotp/SwiftUI_vs_Flutter

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

рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕реНрдкрдВрджрди рдЯреАрдо рдХреЛ рдХрдо рд╕реЗ рдХрдо рдЗрд╕реЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрдиреЗ рдФрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдорд╛рдзрд╛рди/рд╕реБрдзрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реВрдВред

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

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣рд╛рдВ рдЕрдзрд┐рдХ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдХреНрдХрд╛ рдирд╣реАрдВ рд╕рдордЭрддрд╛ред рдпрд╣ рдЙрд╕рдХреЗ рдЪреЗрд╣рд░реЗ рдкрд░ рд╕реНрдкрд╖реНрдЯ рд╣реИред

рд╣реБрдХ рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХреА рдЧрдИ рд╕рдорд╕реНрдпрд╛ рд╕рд░рд▓ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдпрд╣ рдХреЛрдб рдХреЛ DRY рд░рдЦрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд╛рдн рд╕реНрдкрд╖реНрдЯ рд╣реИрдВ, рдХрдо рдХреЛрдб == рдХрдо рдмрдЧ, рд░рдЦрд░рдЦрд╛рд╡ рдЖрд╕рд╛рди рд╣реИ, рдмрдЧ рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рдЬрдЧрд╣, рдирд┐рдЪрд▓реА рд▓рд╛рдЗрди рдХреА рдЧрд┐рдирддреА рд╕рдордЧреНрд░ рд░реВрдк рд╕реЗ рдкрдардиреАрдпрддрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХрд░рддреА рд╣реИ, рдЬреВрдирд┐рдпрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдмреЗрд╣рддрд░ рдЗрдВрд╕реБрд▓реЗрдЯреЗрдб рд╣реИрдВ рдЖрджрд┐ред

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

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

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

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

@szotp рдореИрдВрдиреЗ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ ... рдореИрдВ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рдЖрдзрд╛рд░рднреВрдд рдРрдкреНрд╕ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╣рдо рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░ рд╕рдХреЗрдВред рдореИрдВ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдХрд░реВрдБрдЧрд╛ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рд╣рдо рдХреНрдпрд╛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрд▓рдд рд╡реНрдпрдХреНрддрд┐ рд╣реВрдВред

@escamoteur рдмреЗрд╕рд▓рд╛рдЗрди рдРрдкреНрд╕ рд╣рдореЗрдВ рдРрд╕реЗ рд╕рдорд╛рдзрд╛рди рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗ рдЬрд┐рдирдореЗрдВ рдХрдард┐рдирд╛рдЗрдпрд╛рдВ рдирд╣реАрдВ рд╣реИрдВред

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

рдЕрдЧрд░ рдХреЛрдИ рдЗрд╕реЗ рдЖрдЧреЗ рдмрдврд╝рд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рд╣реИ (https://github.com/flutter/flutter/issues/51752#issuecomment-670249755 and https://github.com /рд╕реНрдкрдВрджрди/рд╕реНрдкрдВрджрди/рдореБрджреНрджреЛрдВ/51752#рдЗрд╢реНрдпреВрдХрдореЗрдВрдЯ-670232842)ред рдпрд╣ рд╣рдореЗрдВ рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмрд┐рдВрджреБ рджреЗрдЧрд╛ рдЬрд┐рд╕рд╕реЗ рд╣рдо рд╕рднреА рд╕рд╣рдордд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЙрд╕ рд╕рдорд╕реНрдпрд╛ рдХреА рд╕реАрдорд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ; рдлрд┐рд░, рд╣рдо рдЙрди рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЙрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╕рднреА рдЗрдЪреНрдЫрд╛рдУрдВ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП @rrousselGit рдХреА рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛, @Rudiksz рдХреА рд╕реНрд╡рдЪреНрдЫ рдирд┐рд░реНрдорд╛рдг рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛, рдЖрджрд┐), рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдЙрди рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдмреЗрд╕рд▓рд╛рдЗрди рдРрдкреНрд╕ рдХрд╛ рд╕рдВрджрд░реНрднред

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

рдХреНрдпрд╛ рдХреЛрдИ рдЗрд╕рд╕реЗ рд╕рд╣рдордд рдирд╣реАрдВ рд╣реИ? рдХреНрдпрд╛ рд╣рдо рд╡рд╣рд╛рдВ рд╕реЗ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдФрд░ рд╕рдорд╛рдзрд╛рди рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдЖрдЧреЗ рдирд╣реАрдВ рдмрдврд╝ рд╕рдХрддреЗ? рд╣рдореЗрдВ рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рд╣реЛрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдкрд╣рд▓реЗ рдПрдХ рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдЬреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рд╣рдо рдЕрднреА рднреА рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рд▓рд┐рдЦрд╛ рд╣реИ рдХрд┐ рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдирд╛рдо рд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЦреБрд▓рд╛ рд╣реИ рдФрд░ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдЬрдЧрд╣ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ:
" рд░рд╛рдЬреНрдп рддрд░реНрдХ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдпрд╛ рддреЛ рдмрд╣реБрдд рдХрдард┐рди рд╣реИ рдпрд╛ рдмрд╣реБрдд рдХрдард┐рди рд╣реИ "

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

@ рд╣рд┐рдХреНрд╕реА рдХреГрдкрдпрд╛ рдордд рдХрд░реЛред рд▓реЛрдЧ рдЗрд╕ рдореБрджреНрджреЗ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдЖрдкрдХреЗ рд╕рд╛рде reddit рдкрд░ рдЙрд╕реА рдЪреАрдЬрд╝ рдХреЗ рдмрд╛рд░реЗ https://github.com/szotp/SwiftUI_vs_Flutter

рдЖрдкрдХреЗ рд╕реНрд╡рд┐рдлреНрдЯрдпреВрдЖрдИ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдбрд╛рд░реНрдЯ рдореЗрдВ рдХреЛрдб рдХреА рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдмрд╕ StatefulWidget рд╡рд░реНрдЧ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдХреЗред

рдореЗрд░реЗ рдкрд╛рд╕ StatefulWidgets рд╣реИрдВ рдЬреЛ рдХрд┐рд╕реА рднреА рдиреЛрдЯрд┐рдлрд╝рд╛рдпрд░ рдХреА рд╕рджрд╕реНрдпрддрд╛ рдирд╣реАрдВ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░/рдпрд╛ рдХреЛрдИ рдмрд╛рд╣рд░реА рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдРрд╕реЗ рд╣реА рд╣реИрдВред рдореЗрд░реЗ рдкрд╛рд╕ рд▓рдЧрднрдЧ резрежреж рдХрд╕реНрдЯрдо рд╡рд┐рдЬреЗрдЯ рд╣реИрдВ (рд╣рд╛рд▓рд╛рдБрдХрд┐ рд╕рднреА рд╕реНрдЯреЗрдЯрдлреБрд▓ рдирд╣реАрдВ рд╣реИрдВ), рдФрд░ рд╢рд╛рдпрдж рдЙрдирдореЗрдВ рд╕реЗ резрел рдХреЗ рдкрд╛рд╕ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХрд╛ "рд╕рд╛рдорд╛рдиреНрдп рд░рд╛рдЬреНрдп рддрд░реНрдХ" рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣рд╛рдБ рдЙрджрд╛рд╣рд░рдгреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рд╣реИред

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

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

рдлрд╝реНрд▓рдЯрд░ рдореЗрдВ рдПрдХ рдирдпрд╛ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд┐рдЬреЗрдЯ рдЬреЛрдбрд╝рдирд╛ рдЬреЛ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП StatefulWidget (рдпрд╛ рдирд╣реАрдВ) рдХреЛ рдЙрдкрд╡рд░реНрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдареАрдХ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕реЗ StatefulWidget рдореЗрдВ рд╣реА рдмреЗрдХ рди рдХрд░реЗрдВред рдореЗрд░реЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╡рд┐рдЬреЗрдЯ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ "рд╣реБрдХ" рд╕рд┐рд╕реНрдЯрдо рдпрд╛ рдорд╛рдЗрдХреНрд░реЛрд╕реНрдЯреЗрдЯ рдХреЗ рд╕рд╛рде рдЖрдиреЗ рд╡рд╛рд▓реЗ рдУрд╡рд░рд╣реЗрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

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

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

рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЗрд╕ рдЕрдВрдХ рдореЗрдВ рд╢реАрд░реНрд╖рдХ "рдХрдард┐рди" рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реИ: рдХреНрдпреЛрдВрдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣рдо рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ рдЙрд╕рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреЛрдИ рд▓рдЪреАрд▓рд╛рдкрди рдирд╣реАрдВ рд╣реИред


рдЗрд╕реЗ рджреЗрдЦрдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИ:

рдпрд╣ рдореБрджреНрджрд╛ рдореВрд▓ рд░реВрдк рд╕реЗ рдпрд╣ рддрд░реНрдХ рджреЗ рд░рд╣рд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд╕реНрдЯреЗрдЯ рд▓реЙрдЬрд┐рдХ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдЬреЗрдЯ рд▓реЗрдпрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╕реБрдЭрд╛рдП рдЧрдП рд╕рдорд╛рдзрд╛рди рд╣реИрдВ "рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ RenderObjects рдХреЗ рд╕рд╛рде рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ"ред

_рд▓рдВрдмреЗ рд╕рдордп рдореЗрдВ, рдЕрдирд╛рд╡рд╢реНрдпрдХ рдУрд╡рд░рд╣реЗрдб рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреА рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпрд╛рдБ (рдЙрд░реНрдл рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ) рд▓рд┐рдЦрдирд╛ рдПрдХ рдЫреЛрдЯрд╛ рдЯреНрд░реЗрдбрдСрдлрд╝ рд╣реИред

рдЗрд╕ рдХрдерди рдХреЗ рд╕рд╛рде рдпреБрдЧрд▓ рдирд┐рдЯреНрд╕:

  1. рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдирд╣реАрдВ рд╣реИрдВ, рдпрджрд┐ рдЖрдк рдХреЛрд╖реНрдардХ, рд░реЗрдЦрд╛ рд░рд┐рдХреНрддрд┐ @overides рдЖрджрд┐ рдХреЛ Thing.DOTween() )ред 15 рд╣рд╛рд╕реНрдпрд╛рд╕реНрдкрдж рд╣реИред
  1. рдпрд╣ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдПрдХ рджрд░реНрдж рд╣реИред рдпрд╣ 50 рд▓рд╛рдЗрди рдХреНрд▓рд╛рд╕ рд╣реЛрдиреЗ рдХреА рдореВрд░реНрдЦрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рдЬрд╣рд╛рдВ рдЗрд╕рдХреА 30 рд▓рд╛рдЗрдиреЗрдВ рд░реЙрдЯ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рд╣реИред рдЗрд╕рдХреА рдЙрд▓рдЭрдиред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк _dont_ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдХреЛрдИ рдЪреЗрддрд╛рд╡рдиреА рдпрд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ, рдЖрдкрдиреЗ рдЕрднреА рдПрдХ рдмрдЧ рдЬреЛрдбрд╝рд╛ рд╣реИред
  2. рдореБрдЭреЗ рд╣реБрдХ рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЗ рд╕рд╛рде рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рд▓рд╛рдпрдХ рдХреЛрдИ рдУрд╡рд░рд╣реЗрдб рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИред рд╣рдо рд╡рд╕реНрддреБрдУрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рдкрд░ рдореБрдЯреНрдареА рднрд░ fxns рдХреЗ рд╕рд╛рдеред рдбрд╛рд░реНрдЯ рдореЗрдВ, рдЬреЛ рдмрд╣реБрдд рддреЗрдЬ рд╣реИред рдпрд╣ рдПрдХ рд▓рд╛рд▓ рд╣реЗрд░рд┐рдВрдЧ рдЗрдореЛ рд╣реИред

@esDotDev

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

рд╡рд┐рдЧреЗрдЯреНрд╕ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ред рдЬрд┐рд╕ рддрд░рд╣ ValueNotifier рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ рдкреИрдЯрд░реНрди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП ChangeNotifier рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рд╡реИрд╕реЗ рд╣реА рд╣рд░ рдХреЛрдИ рдЕрдкрдиреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП StatelessWidgets рдХреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕реНрд╡рд╛рдж рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИред

рд╣рд╛рдВ, рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдПрдХ рдкреНрд░рднрд╛рд╡реА рддрд░реАрдХрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╛рдВрдЫрд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред рдЕрдЧрд░ рдореЗрд░реЗ рдкрд╛рд╕ 1 рдПрдирд┐рдореЗрдЯрд░ рд╣реИ, рддреЛ рдореИрдВ рд╕рд┐рд░реНрдл рдПрдХ рдЯреНрд╡рд┐рдирдПрдиреАрдореЗрд╢рдирдмрд┐рд▓реНрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдмрдврд╝рд┐рдпрд╛, рдпрд╣ рдЕрднреА рднреА рдХреЛрдб рдХреА 5 рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рддрд░рд╣ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреЛ рднреА рд╣реЛред рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ... рдмрд╣реБрдд рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореЗрд░реЗ рдкрд╛рд╕ 2 рдпрд╛ 3 рд╣реИрдВ? рдЕрдм рдореИрдВ рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╢рд┐рдХрд╛рд░ рдирд░рдХ рдореЗрдВ рд╣реВрдВ, рдЕрдЧрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рд╕реАрдкреАрдПрд▓ рдЕрдиреНрдп рд╕реНрдЯреЗрдЯрдлреБрд▓ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕рдм рдереЛрдбрд╝реЗ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдХреА рдЧрдбрд╝рдмрдбрд╝реА рдмрди рдЧрдпрд╛ рд╣реИ, рдпрд╛ рдореИрдВ рдХреБрдЫ рдмрд╣реБрдд рд╣реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рдЬреЗрдЯ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рд╕реЗрдЯрдЕрдк, рдЕрдкрдбреЗрдЯ рдФрд░ рдЯрд┐рдпрд░рдбрд╛рдЙрди рдХреЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рд╕рдорд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реИред рддрд░реНрдХред

рд╡рд┐рдЧреЗрдЯреНрд╕ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ред рдЬрд┐рд╕ рддрд░рд╣ ValueNotifier рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ рдкреИрдЯрд░реНрди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП ChangeNotifier рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рд╡реИрд╕реЗ рд╣реА рд╣рд░ рдХреЛрдИ рдЕрдкрдиреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП StatelessWidgets рдХреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕реНрд╡рд╛рдж рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИред

рдЖрдк рдПрдХ рд╕рдордп рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдмреЗрд╕-рдХреНрд▓рд╛рд╕ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдкреИрдорд╛рдирд╛ рдирд╣реАрдВ рд╣реИ

рдорд┐рдХреНрд╕рд┐рдВрд╕ рдЕрдЧрд▓рд╛ рддрд╛рд░реНрдХрд┐рдХ рдкреНрд░рдпрд╛рд╕ рд╣реИред рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдУрдкреА рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╣реИ, рд╡реЗ рдпрд╛ рддреЛ рд╕реНрдХреЗрд▓ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

@esDotDev

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

рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд┐рдЬреЗрдЯ рдЬрд┐рд╕реЗ 3-4 рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдирд┐рдореЗрд╢рди рдХрдВрдЯреНрд░реЛрд▓рд░ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИ, рдПрдХ рдмрд╣реБрдд рд╣реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рд╕реЗрдЯрдЕрдк/рдЯрд┐рдпрд░рдбрд╛рдЙрди рддрд░реНрдХ рдХреЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рд╕рдорд░реНрдерди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдврд╛рдВрдЪреЗ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ initState/didUpdateWidget рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдкрд╣рд▓реЗ рд╕реНрдерд╛рди рдкрд░ рдЙрдЬрд╛рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддрд╛рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рджрд┐рд▓ рдХреА рдЗрдЪреНрдЫрд╛ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрдЕрдк рдХрд╛ рдЕрдкрдирд╛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЧреНрд░рд╣ рдХрд░ рд╕рдХреЗрдВред

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

@esDotDev

3. рдореБрдЭреЗ рд╣реБрдХ рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЗ рд╕рд╛рде рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рд▓рд╛рдпрдХ рдХреЛрдИ рдУрд╡рд░рд╣реЗрдб рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИред рд╣рдо рд╡рд╕реНрддреБрдУрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рдкрд░ рдореБрдЯреНрдареА рднрд░ fxns рдХреЗ рд╕рд╛рдеред рдбрд╛рд░реНрдЯ рдореЗрдВ, рдЬреЛ рдмрд╣реБрдд рддреЗрдЬ рд╣реИред рдпрд╣ рдПрдХ рд▓рд╛рд▓ рд╣реЗрд░рд┐рдВрдЧ рдЗрдореЛ рд╣реИред

рдпрджрд┐ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди flutter_hooks рдкреИрдХреЗрдЬ рдЬреИрд╕рд╛ рдХреБрдЫ рд╣реИ рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд╕рддреНрдп рд╣реИред рд╣рд╛рдВ, рдЕрд╡рдзрд╛рд░рдгрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдпрд╣ рдЗрд╕рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╣реАрдВ рднреА рддреБрдЪреНрдЫ рдпрд╛ рдХреБрд╢рд▓ рдирд╣реАрдВ рд╣реИред

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

рдХреНрдпрд╛ рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рдРрдк рдХреЗ рд░реВрдк рдореЗрдВ @brianegan рдХреЗ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд▓реЗрдирд╛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ?

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

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

рд╕рдлрд╛рдИ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдмрд╛рдд, рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реИ "рдореБрдЭреЗ рдЗрд╕ рд░рд╛рдЬреНрдп/рд╢реНрд░реЛрддрд╛/рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рд╕рд╛рдл рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрдм рдпрд╣ рдкреНрд░реЛрдк/рд░рд╛рдЬреНрдп рдмрджрд▓рддрд╛ рд╣реИ" рдХреЗ рдмрдЬрд╛рдп "рдореБрдЭреЗ рдПрдХреНрд╕ рдХреЛ рд╕рд╛рдл рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛рдж рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ рдЬрдм рд╕рднреА рдкреНрд░реЛрдк/рд░рд╛рдЬреНрдп рдмрджрд▓рддреЗ рд╣реИрдВ рдпрд╛ рдЬрдм рдкреВрд░рд╛ рдШрдЯрдХ рдирд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ"ред

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

@escamoteur @Rudiksz @Hixie рд╡рд╣рд╛рдБ @TimWhiting рд╣реИ рдХрд┐ рдореИрдВ рдЬрд╣рд╛рдВ рд╣рдо рдЗрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реБрд░реВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдордВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рдПрдХ GitHub рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐/рд╕рдореВрд╣ рдпрд╣ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд░реЗрдВрдЧреЗред рд╡реЗ рдкреВрд░реНрдг рд╡рд┐рдХрд╕рд┐рдд рдРрдкреНрд╕ рдирд╣реАрдВ рд╣реИрдВ, рдЕрдзрд┐рдХ рдкреЗрдЬреЛрдВ рдХреЛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрджрд┐ рд╡реЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдРрдкреНрд╕ рднреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рддрдм рд╣рдо рд╕рдорд╕реНрдпрд╛рдУрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдмреЗрд╣рддрд░ API рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред @TimWhiting рдореЗрд░реЗ рдЕрдиреБрдорд╛рди рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдЖрдордВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

https://github.com/TimWhiting/local_widget_state_approaches

рдЬреЗрдЯрдкреИрдХ рдХрдВрдкреЛрдЬрд╝ рднреА рд╣реБрдХ рдХреЗ рд╕рдорд╛рди рд╣реИ, рдЬрд┐рд╕рдХреА рддреБрд▓рдирд╛ рдпрд╣рд╛рдБ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдХреА

@satvikpendem @TimWhiting рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ! рдзрдиреНрдпрд╡рд╛рджред

@esDotDev
рдмрд╣реБрдд рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧ рдХреЗрд╕ рдФрд░ рд╕реЗрдЯрдЕрдк/рдЯрд┐рдпрд░рдбрд╛рдЙрди рддрд░реНрдХ рдХреЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рд╕рдорд░реНрдерди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдврд╛рдВрдЪреЗ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

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

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

рдореЗрд░рд╛ рднрд┐ред рд▓реЗрдХрд┐рди рдпрд╣ initState () + рдирд┐рдкрдЯрд╛рди () + didUpdateрдирд┐рд░реНрднрд░рддрд╛ () рд╣реИ, рдФрд░ рдкрд┐рдЫрд▓реЗ 2 рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХреЗ рд▓рд╛рдкрддрд╛ рд╣реЛрдиреЗ рд╕реЗ рдмрдЧ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рд╣рд┐рдд рдЙрджрд╛рд╣рд░рдг рдХреБрдЫ рдРрд╕рд╛ рд╣реЛрдЧрд╛: рдПрдХ рдРрд╕рд╛ рджреГрд╢реНрдп рд▓рд┐рдЦреЗрдВ рдЬреЛ 1 рд╕реНрдЯреНрд░реАрдордХрдВрдЯреНрд░реЛрд▓рд░ рдФрд░ 2 рдПрдирд┐рдореЗрдЯрд░ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реЛред

рдЬрд╣рд╛рдБ рддрдХ рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдБ рдЖрдкрдХреЗ рдкрд╛рд╕ 3 рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:

  1. рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рдореЗрдВ рейреж рдпрд╛ рдЕрдзрд┐рдХ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдФрд░ рдХреБрдЫ рдорд┐рд╢реНрд░рдг рдЬреЛрдбрд╝реЗрдВред рдЬреЛ рди рдХреЗрд╡рд▓ рд╡рд░реНрдмреЛрдЬрд╝ рд╣реИ, рдмрд▓реНрдХрд┐ рд╢реБрд░реВ рдореЗрдВ рдкрд╛рд▓рди рдХрд░рдирд╛ рдХрд╛рдлреА рдХрдард┐рди рд╣реИред
  2. рдЕрдкрдиреЗ рд╡реНрдпреВ рдХреЛрдб рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд▓рдЧрднрдЧ 15 рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рд╕реНрддрд░реЛрдВ рдХреЗ рд▓рд┐рдП 2 рдЯреНрд╡рд┐рдирдПрдиреАрдореЗрд╢рдирдмрд┐рд▓реНрдбрд░ рдФрд░ рд╕реНрдЯреНрд░реАрдордмрд┐рд▓реНрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдФрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд▓рд┐рдП рдЕрднреА рднреА рдмрд╣реБрдд рд╕рд╛рд░реЗ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рд╣реИрдВред
  3. рдЕрдкрдиреА 3 рд╕реНрдЯреЗрдЯрдлреБрд▓ рд╕рдм-рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдб () рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдЧреИрд░-рдЗрдВрдбреЗрдВрдЯ рдХреЛрдб рдХреА 6 рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рддрд░рд╣ рдЬреЛрдбрд╝реЗрдВ, рдФрд░ рдХрд┐рд╕реА рднреА рдХрд╕реНрдЯрдо рдЗрдирд┐рдЯ/рдирд╖реНрдЯ рдХреЛрдб рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ

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

рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдПрдХ рдирдП рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП 3 рдХрд╛ рд╕рдВрдЬреНрдЮрд╛рдирд╛рддреНрдордХ рднрд╛рд░ рдЕрдиреНрдп 2 рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╛рдлреА рдХрдо рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рдирдП рджреЗрд╡ рдпрд╣ рднреА рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ TweenAnimationBuilder рдореМрдЬреВрдж рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ SingleTickerProvider рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рд╕реАрдЦрдирд╛ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдПрдХ рдХрд╛рд░реНрдп рд╣реИред рдХреЗрд╡рд▓ рдпрд╣ рдХрд╣рдирд╛, "рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдПрдХ рдПрдирд┐рдореЗрдЯрд░ рджреЗрдВ", рдПрдХ рдЖрд╕рд╛рди рдФрд░ рдЕрдзрд┐рдХ рдордЬрдмреВрдд рддрд░реАрдХрд╛ рд╣реИред

рдореИрдВ рдЖрдЬ рдХреБрдЫ рдХреЛрд╢рд┐рд╢ рдХрд░реВрдБрдЧрд╛ рдФрд░ рдХреЛрдб рдХрд░реВрдБрдЧрд╛ред

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

рд╕рд╣реАред рд╣рдореЗрдВ рдХреЛрдб рдХрд╛ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд┐рд╢реНрд╡ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдПрдВ рдЬреЛ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдХреЗ 15 рд╕реНрддрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рдХрд┐рд╕реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдХреЛрдб рдХреА 30 рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ 6 рдкрдВрдХреНрддрд┐рдпреЛрдВ + рд╕реИрдХрдбрд╝реЛрдВ рдкрдВрдХреНрддрд┐рдпреЛрдВ рд╕реЗ рдмрджрд▓рдиреЗ рд╕реЗ рд╕рдВрдЬреНрдЮрд╛рдирд╛рддреНрдордХ рднрд╛рд░ рдХреИрд╕реЗ рдХрдо рд╣реЛрддрд╛ рд╣реИ? рд╣рд╛рдБ, рдореИрдВ рд╕рд┐рд░реНрдл "рдЬрд╛рджреВ" рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ рдЬреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдирд┐рдпрдо рдирд╣реАрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╣реБрдХ рдкреИрдХреЗрдЬ рдЖрдкрдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрдирд┐рд╢реНрдЪрд┐рдд рд╢рдмреНрджреЛрдВ рдХреЗ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдирд┐рд░реНрдорд╛рдг рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдмрд╛рдзрд╛ рд╣реИред

рдореЗрд░реЗ рдкрд╛рд╕ рдХреЛрдб рдХреА 200 рд╕реЗ рдХрдо рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдХреЛрдб рдХреА 15k рд▓рд╛рдЗрдиреЛрдВ рд╡рд╛рд▓реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдлреЛрдХрд╕рдиреЛрдбреНрд╕, рдЯреЗрдХреНрд╕реНрдЯрдХрдВрдЯреНрд░реЛрд▓рд░, рд╕рд┐рдВрдЧрд▓рдЯрд┐рдХрд░рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рдпрд╛ рдореЗрд░реЗ рд╕реНрдЯреЗрдЯрдлреБрд▓ рд╡рд┐рдЬреЗрдЯреНрд╕ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдЬреАрд╡рди рдЪрдХреНрд░ рд╡рд┐рдзрд┐рдпрд╛рдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЖрдк рдХрд┐рд╕ рд╕рдВрдЬреНрдЮрд╛рдирд╛рддреНрдордХ рдЕрдзрд┐рднрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

@Rudiksz рдХреГрдкрдпрд╛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдЖрдХреНрд░рд╛рдордХ рд╣реЛрдирд╛ рдмрдВрдж рдХрд░реЗрдВред
рд╣рдо рдмрд┐рдирд╛ рд▓рдбрд╝реЗ рдЕрд╕рд╣рдордд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред


рд╣реБрдХ рдХреА рдХрдореА рдореЗрд░реА рдЪрд┐рдВрддрд╛рдУрдВ рдореЗрдВ рд╕рдмрд╕реЗ рдХрдо рд╣реИред

рд╣рдо рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╣реБрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред
рдЕрдЧрд░ рд╣рдореЗрдВ рдХрд░рдирд╛ рд╣реИ, рддреЛ рд╣рдо рдПрдХ рдЕрд▓рдЧ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдЖ рд╕рдХрддреЗ рд╣реИрдВред

рдХреНрдпрд╛ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ рд╡рд╣ рд╕рдорд╕реНрдпрд╛ рдЬрд┐рд╕реЗ рд╣рдо рд╣рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

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

рдпрд╣ рд╣реБрдХ рдмрд╛рдзрд╛рдУрдВ рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд▓реЛрдЧреЛрдВ рдиреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХреА рд╣реИред

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

рдпрд╣ рд╣реБрдХ рдмрд╛рдзрд╛рдУрдВ рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд▓реЛрдЧреЛрдВ рдиреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХреА рд╣реИред

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

рдореБрдЭреЗ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рддрд░реНрдХ рдХреЛ рдирд┐рд░реНрдорд╛рдг рд╡рд┐рдзрд┐ рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдирд╛ рдХрд╣реАрдВ рднреА рдмрд┐рд▓реНрдб рд╡рд┐рдзрд┐ рдореЗрдВ рд╡рд┐рдЬреЗрдЯ рдкреЗрдбрд╝ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП "рдордЬрдмреВрд░" рдЬреИрд╕рд╛ рд╣реА рдирд╣реАрдВ рд╣реИред рдирд┐рд░реНрдорд╛рдг рд╡рд┐рдзрд┐ рдХрд╛ рдкреВрд░рд╛ рдХрд╛рд░рдг рдореМрдЬреВрджрд╛ рд╕реНрдерд┐рддрд┐ (рдЪрд░ рдХрд╛ рд╕реЗрдЯ) рд▓реЗрдирд╛ рдФрд░ рдПрдХ рд╡рд┐рдЬреЗрдЯ рдкреЗрдбрд╝ рдмрдирд╛рдирд╛ рд╣реИ рдЬреЛ рддрдм рдЪрд┐рддреНрд░рд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдореИрдВ рдореБрдЭреЗ рдХреЛрдб рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдиреЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рднреА рд╣реВрдВ рдЬреЛ initState/didUpdateWidget рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдЕрдВрджрд░ рд╡рд┐рдЬреЗрдЯ рдмрдирд╛рддрд╛ рд╣реИред

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

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

рдПрдХ рд╕рд╛рдЗрдб-рдиреЛрдЯ рдХреЗ рд░реВрдк рдореЗрдВ, Riverpod , рдореЗрд░реЗ рдирд╡реАрдирддрдо рдкреНрд░рдпреЛрдЧ рдореЗрдВ, рдмрд╛рдзрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛, рдХреБрдЫ рдмрд╣реБрдд рд╣реА рд╣реБрдХ-рдЬреИрд╕реЗ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ:

Consumer(
  provider: provider,
  builder: (context, value) {
    return Consumer(
      provider: provider2,
      builder: (context, value2) {
        return Text('$value $value2');
      },
    );
  },
)

рдХреЛ рд▓реЗрдХрд░:

Consumer(
  builder (context, watch) {
    final value = watch(provider);
    final value2 = watch(provider2);
  },
)

рдЬрд╣рд╛рдВ watch рдХреЛ рд╕рд╢рд░реНрдд рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

Consumer(
  builder: (context, watch) {
    final value = watch(provider);
    if (something) {
      final value2 = watch(provider2);
    }
  },
)

рдХрд╕реНрдЯрдо StatelessWidget / StatefulWidget рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рд╣реЛрдиреЗ рд╕реЗ рд╣рдо рдкреВрд░реА рддрд░рд╣ рд╕реЗ Consumer рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ:

class Example extends ConsumerStatelessWidget {
  <strong i="21">@override</strong>
  Widget build(ConsumerBuildContext context) {
    final value = context.watch(provider);
    final value2 = context.watch(provider2);
  }
}

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

рддреЛ рд╣рдо рдЕрднреА рднреА рд╣реБрдХ рдХреЗ рд▓рдЪреАрд▓реЗрдкрди рд╕реЗ рджреВрд░ рд╣реИрдВ

@rrousselGit рдореИрдВ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдмрд┐рдирд╛ рд▓рдЧрддрд╛ рд╣реИ StatelessWidget / StatefulWidget рд╡рд░реНрдЧреЛрдВ рдФрд░ ConsumerStatelessWidget рдХреА рддрд░рд╣ рдХреБрдЫ рдмрдирд╛рдиреЗ, рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ context.watch рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ BuildContext рдХреНрд▓рд╛рд╕ рдФрд░ рдкреНрд░рджрд╛рддрд╛ рдХреЗ рдкрд╛рд╕ рдЗрдирд╣реЗрд░рд┐рдЯреЗрдбрд╡рд┐рдбреНрдЬ рдХреЗ рд╕рд╛рде рд╡реЙрдЪ рдлрдВрдХреНрд╢рди рдкреНрд░рджрд╛рди рдХрд░рдирд╛ред

рд╡рд╣ рдЕрд▓рдЧ рд╡рд┐рд╖рдп рд╣реИред рд▓реЗрдХрд┐рди tl; dr, рд╣рдо рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдЗрдирд╣реЗрд░рд┐рдЯреЗрдбрд╡рд┐рдбреНрдЬ рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ: https://github.com/flutter/flutter/issues/30062

рдЙрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, https://github.com/flutter/flutter/issues/12992 рдФрд░ https://github.com/flutter/flutter/pull/33213 рдХреЗ рдХрд╛рд░рдг InheritedWidgets рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣рдореЗрдВ рдмреНрд▓реЙрдХ рдХрд░ рджреЗрдЧрд╛

рд╕рдВрдХрд▓реНрдкрдирд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдореИрдВ рдЙрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╕рдордЭрдирд╛ рд╢реБрд░реВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬрд┐рдирдХрд╛ рд╡рд░реНрдгрди рдпрд╣рд╛рдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рднреА рдЗрд╕реЗ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд╣реВрдВред

рд╕реНрдкрдВрджрди рдХреА рддреБрд▓рдирд╛ рд╕реНрд╡рд┐рдлреНрдЯрдпреВрдЖрдИ рд╕реЗ рдХрд░рдирд╛, рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдпрд╛ рдпреЛрдВ рдХрд╣реЗрдВ - рдЪреАрдЬреЗрдВ рдЙрддрдиреА рдорд╣рд╛рди рдирд╣реАрдВ рд╣реИрдВ рдЬрд┐рддрдиреА рд╡реЗ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред

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

рдпрд╣ рдРрд╕рд╛ рд╣реИ рдЬреИрд╕реЗ @rrousselGit рдХрд╣рддреЗ рд╣реИрдВ, рдкреБрд░рд╛рдиреЗ рджрд┐рдиреЛрдВ (UIKit) рдореЗрдВ рд╣рдореЗрдВ рдЕрдкрдиреЗ UIViews (RenderObjects рдХреЗ рд╕рдорддреБрд▓реНрдп) рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдореЙрдбрд▓ рд╕реЗ рджреЗрдЦрдиреЗ рдФрд░ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдпреЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдирд╛ рдпрд╛рдж рд░рдЦреЗрдВ, рдЕрдкреНрд░рдпреБрдХреНрдд рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рд╣рдЯрд╛рдПрдВ, рд░реАрд╕рд╛рдпрдХрд▓ рдХрд░реЗрдВ, рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдпрд╣ рдХреЛрдИ рд░реЙрдХреЗрдЯ рд╕рд╛рдЗрдВрд╕ рдирд╣реАрдВ рдерд╛, рдФрд░ рдХрдИ рд▓реЛрдЧреЛрдВ рдиреЗ рдЗрд╕ рдкреБрд░рд╛рдиреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдирд╣реАрдВ рджреЗрдЦрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рд╣рд░ рдХреЛрдИ рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рд╣реЛрдЧрд╛ рдХрд┐ рдлрд╝реНрд▓рдЯрд░ рдиреЗ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рд╣реИред
рд╕реНрдЯреЗрдЯрдлреБрд▓рдиреЗрд╕ рдХреЗ рд╕рд╛рде, рдпрд╣ рдореБрджреНрджрд╛ рдмрд╣реБрдд рд╣реА рд╕рдорд╛рди рд╣реИ: рдпрд╣ рдЙрдмрд╛рдК, рддреНрд░реБрдЯрд┐ рдкреНрд░рд╡рдг рдХрд╛рд░реНрдп рд╣реИ рдЬрд┐рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

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

StatefulWidget рдЗрди рдЫреЛрдЯреА рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЧреИрд░-рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп, рдбреЛрдореЗрди рд╡рд┐рд╢рд┐рд╖реНрдЯ рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрдо рд╕реНрддрд░ рд╣реИ, рдЬрд╣рд╛рдВ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЯреЗрдХреНрд╕реНрдЯ рдХрдВрдЯреНрд░реЛрд▓рд░, рдПрдирд┐рдореЗрд╢рди, рдпрд╛ рдЬреЛ рднреА рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЙрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЬрдм рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЗ рдЧреИрд░-рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдбреЛрдореЗрди рд╡рд┐рд╢рд┐рд╖реНрдЯ рдШрдЯрдХреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдореИрдВ рдЙрд▓рдЭрди рдореЗрдВ рд╣реВрдВ, рддреЛ рдЖрдкрдХреЛ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд╡рд┐рдЬреЗрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рдареАрдХ рд╡рд┐рдкрд░реАрдд рд╣реЛрддрд╛ рд╣реИред

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

рд╣реБрдХ, рд╣реБрдХ рдЬреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рд╕рд┐рд░реНрдл "рдСрдЯреЛрдореЗрд╢рди" рдХреА рд╡рдХрд╛рд▓рдд рдХрд░рдирд╛ рдпрд╣ рдХрд╣рдиреЗ рдЬреИрд╕рд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдПрдХ рдирд┐рдореНрди рд╕реНрддрд░ рдХреЗ рд╡рд┐рдЬреЗрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдЙрдЪреНрдЪ рд╕реНрддрд░ , рдЧреИрд░-рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рддрд░реНрдХ рдХреЛ рд╕рдВрднрд╛рд▓ рд╕рдХреЗ рдЬрд┐рд╕реЗ рдХреЛрдИ рднреА рддрдерд╛рдХрдерд┐рдд рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рд▓рд┐рдЦреЗ рдмрд┐рдирд╛ рдХрднреА рднреА рд░рдЦрдирд╛ рдЪрд╛рд╣реЗрдЧрд╛ред

рд╕реНрдЯреЗрдЯрдлреБрд▓рдиреЗрд╕ рдХреЗ рд╕рд╛рде, рдпрд╣ рдореБрджреНрджрд╛ рдмрд╣реБрдд рд╣реА рд╕рдорд╛рди рд╣реИ: рдпрд╣ рдЙрдмрд╛рдК, рддреНрд░реБрдЯрд┐ рдкреНрд░рд╡рдг рдХрд╛рд░реНрдп рд╣реИ рдЬрд┐рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдлрд┐рд░ рд╕реЗред рдЖрдк __"рдЧреИрд░-рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп, рдбреЛрдореЗрди рд╡рд┐рд╢рд┐рд╖реНрдЯ рдШрдЯрдХреЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдЖрдкрдХреЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЯреЗрдХреНрд╕реНрдЯ рдХрдВрдЯреНрд░реЛрд▓рд░, рдПрдирд┐рдореЗрд╢рди, рдпрд╛ рдЬреЛ рднреА рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ"__?!

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

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

рдореЗрд░реЗ StatefulWidgets рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдореЗрд░реЗ рдХреЛрдб рдмреЗрд╕ рдХрд╛ рд▓рдЧрднрдЧ 1% рд╣реИред рдХреНрдпрд╛ рдпрд╣ рддреНрд░реБрдЯрд┐ рдкреНрд░рд╡рдг рд╣реИ? рдХреЛрдб рдХреА рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдмрдЧ рдХрд╛ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рд╕реНрд░реЛрдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВред рдХреНрдпрд╛ рдпрд╣ рдмреЛрдЭрд┐рд▓ рд╣реИ? 15000 рдХреЗ рдХреЛрдб рдХреА 200 рд▓рд╛рдЗрдиреЗрдВ? рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рд╕реЛрдЪрддрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд┐рд░реНрдл рдореЗрд░реА рд░рд╛рдп рд╣реИред рд╕реНрдкрдВрджрди рдХреЗ рдкрд╛рда/рдПрдиреАрдореЗрд╢рди рдирд┐рдпрдВрддреНрд░рдХ, рдлреЛрдХрд╕рдиреЛрдбреНрд╕ рдореЗрдВ рд╕рднреА рдореБрджреНрджреЗ рд╣реИрдВ рдЬрд┐рди рдкрд░ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд░реНрдмреЛрдЬрд╝ рд╣реЛрдирд╛ рдПрдХ рдирд╣реАрдВ рд╣реИред

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

рдпрд╣рд╛рдВ рдХреБрдЫ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рд╕реБрдирдХрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ 1 рдХреЗ рдмрдЬрд╛рдп рдХреЛрдб рдХреА 5 рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдирд╛ 5 рдЧреБрдирд╛ рдХрдард┐рди рд╣реИред рдпрд╣ред

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

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

рдЗрд╕рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░реВрдВрдЧрд╛ рдЬреЛ рдПрдХ рдЫреЛрдЯреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП flutter_hooks рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╢рдп рдореЗрдВ рд╣реИрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдЗрд╕рдХрд╛ рдХрд┐рд░рд╛рдпрд╛ рдХреИрд╕рд╛ рд╣реИ, рдлрд┐рд░ рдЗрд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рддрд░реАрдХреЗ рд╕реЗ рдлрд┐рд░ рд╕реЗ рдХрд░реЗрдВред рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рдХреЗрд╡рд▓ @Hixie рдХреЗ рд╕реБрдЭрд╛рд╡ рдХреЗ

рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рдХреЗрд╡рд▓ @Hixie рдХреЗ рд╕реБрдЭрд╛рд╡ рдХреЗ

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

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

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

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

рдмрд╣рд╕ рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реИ:

Widget build(context) {
  return ValueListenableBuilder<String>(
    valueListenable: someValueListenable,
    builder: (context, value, _) {
      return StreamBuilder<int>(
        stream: someStream,
        builder: (context, value2) {
          return TweenAnimationBuilder<double>(
            tween: Tween(...),
            builder: (context, value3) {
              return Text('$value $value2 $value3');
            },
          );
        },
      );
    },
  );
}

рдпрд╣ рдХреЛрдб рдкрдардиреАрдп рдирд╣реАрдВ рд╣реИред

рд╣рдо рдПрдХ рдирдпрд╛ рдХреАрд╡рд░реНрдб рдкреЗрд╢ рдХрд░рдХреЗ рдкрдардиреАрдпрддрд╛ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдЗрд╕рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ:

Widget build(context) {
  final value = keyword ValueListenableBuilder(valueListenable: someValueListenable);
  final value2 = keyword StreamBuilder(stream: someStream);
  final value3 = keyword TweenAnimationBuilder(tween: Tween(...));

  return Text('$value $value2 $value3');
}

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


рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЬрдм рдмрд┐рд▓реНрдбрд░ рд░реВрдЯ рд╡рд┐рдЬреЗрдЯ рдирд╣реАрдВ рд╣реИ?

рдЙрджрд╛рд╣рд░рдг:

Widget build(context) {
  return Scaffold(
    body: StreamBuilder(
      stream: stream,
      builder: (context, value) {
        return Consumer<Value2>(
          builder: (context, value2, child) {
            return Text('${value.data} $value2');
          },
        );
      },
    ),
  );
}

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

Widget build(context) {
  return Scaffold(
    body: {
      final value = keyword StreamBuilder(stream: stream);
      final value2 = keyword Consumer<Value2>();
      return Text('${value.data} $value2');
    }
  );
}

рд▓реЗрдХрд┐рди рдпрд╣ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдореБрджреНрджреЗ рд╕реЗ рдХреИрд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ?

рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐, рдмрд┐рд▓реНрдбрд░реНрд╕ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рд░рд╛рдЬреНрдп рддрд░реНрдХ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЙрдирдХрд╛ рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рд╣рдо _many_ рдмрд┐рд▓реНрдбрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рд╡реЗ рдХреЛрдб рдХреЛ рдмрд╣реБрдд рдкрдардиреАрдп рдирд╣реАрдВ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ https://github.com/flutter/flutter/issues/51752#issuecomment -669626522

рдЗрд╕ рдирдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде, рд╣рдордиреЗ рдкрдардиреАрдпрддрд╛ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдЬреИрд╕реЗ, рд╣рдо рдмрд┐рд▓реНрдбрд░реНрд╕ рдореЗрдВ рдФрд░ рдЪреАрдЬреЗрдВ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред

рддреЛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд useFilter рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

FilterBuilder(
  debounceDuration: const Duration(seconds: 2),
  builder: (context, filter) {
    return TextField(onChange: (value) => filter.value = value);
  }
)

рдЬрд┐рд╕реЗ рд╣рдо рдирдП рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

class ChatScreen extends HookWidget {
  const ChatScreen({Key key}) : super(key: key);

  <strong i="15">@override</strong>
  Widget build(BuildContext context) {
    final filter = keyword FilterBuilder(debounceDuration: const Duration(seconds: 2));
    final userId = keyword Consumer(authProvider).userId;
    final chatId = keyword Consumer(selectedChatProvider);
    final chat = keyword QueryBuilder(ChatQuery(userId: userId, chatId: chatId, filter: filter.value));

    return Column(
      children: [
        Searchbar(onChanged: (value) => filter.value = value),
        Expanded(
          child: ChatList(chat: chat),
        ),
      ],
    );
  }
}

рдХрд╕реНрдЯрдо рд╣реБрдХ/рдмрд┐рд▓реНрдбрд░реНрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдордиреЗ "рдПрдХреНрд╕рдЯреНрд░реЗрдХреНрдЯ рдРрдЬрд╝ рдлрдВрдХреНрд╢рди" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдмрд╛рдд рдХреА, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдордиреЗ рд╣реБрдХ рдХреЗ рд╕рд╛рде рдмрд╛рдд рдХреА рдереА?

рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдмрд┐рд▓реНрдбрд░реНрд╕ рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреЛ рдирд┐рдХрд╛рд▓рдХрд░ рд╣рдо рдРрд╕реЗ рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рднреА рдРрд╕рд╛ рд╣реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

Builder<Chat> ChatBuilder()  {
  final filter = keyword FilterBuilder(debounceDuration: const Duration(seconds: 2));
  final userId = keyword Consumer(authProvider).userId;
  final chatId = keyword Consumer(selectedChatProvider);
  final chat = keyword QueryBuilder(ChatQuery(userId: userId, chatId: chatId, filter: filter.value));

  return Builder(chat);
}

class ChatScreen extends HookWidget {
  const ChatScreen({Key key}) : super(key: key);

  <strong i="21">@override</strong>
  Widget build(BuildContext context) {
    final chat = keyword ChatBuilder();

    return Column(
      children: [
        Searchbar(onChanged: (value) => filter.value = value),
        Expanded(
          child: ChatList(chat: chat),
        ),
      ],
    );
  }
}

рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЗрд╕ рддрд░рд╣ рдХреЗ рд╡рд╛рдХреНрдп-рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд╕рднреА рдирд┐рд╣рд┐рддрд╛рд░реНрдереЛрдВ рдкрд░ рдЬреНрдпрд╛рджрд╛ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рдореВрд▓ рд╡рд┐рдЪрд╛рд░ рд╣реИред


рд╣реБрдХ рдпрд╣ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред
рд╣реБрдХ рдХреА рд╕реАрдорд╛рдПрдВ рдореМрдЬреВрдж рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рднрд╛рд╖рд╛ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдмрдЬрд╛рдп рдкреИрдХреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдФрд░ рдХреАрд╡рд░реНрдб use , рдЬреИрд╕реЗ рдХрд┐ keyword StreamBuilder use StreamBuilder рдмрди рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЕрдВрддрддрдГ useStream рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

рдпрд╣ рдХреЛрдб рдХрд╛рдлреА рдЕрдзрд┐рдХ рдкрдардиреАрдп рд╣реИ

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд░рд╛рдп рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИред рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдХреБрдЫ рд▓реЛрдЧ рд╕реЛрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдЕрдзрд┐рдХ рдкрдардиреАрдп рд╣реИрдВ; рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореИрдВ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рдЬрд╛рджреВ-рдХрдо рд╕рдВрд╕реНрдХрд░рдг рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рджреВрд╕рд░реА рд╢реИрд▓реА рдХреЛ рд╕рдВрднрд╡ рдмрдирд╛рдиреЗ рдореЗрдВ рдореБрдЭреЗ рдХреЛрдИ рдЖрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИред

рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдЕрдЧрд▓рд╛ рдХрджрдо @TimWhiting рдХреЗ рдРрдк (https://github.com/TimWhiting/local_widget_state_approaches/blob/master/lib/stateful/counter.dart) рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ рддрд╛рдХрд┐ рдЗрд╕реЗ рдХреБрдЫ рдРрд╕рд╛ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛрдВред рдЬрд┐рд╕реЗ рд╣рдо рд╕реБрд▓рдЭрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдХреНрдпрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП https://github.com/flutter/flutter/issues/51752#issuecomment -670959424 рд╣реБрдХреНрд╕ рдЗрди рд░рд┐рдПрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рдгрд╛ рдХреЗ рд╕рдорд╛рди рд╣реИред рдмрд┐рд▓реНрдбрд░ рдкреИрдЯрд░реНрди рд░реЗрдВрдбрд░ рдкреНрд░реЙрдкреНрд╕ рдкреИрдЯрд░реНрди рдХреЗ рд╕рдорд╛рди рд▓рдЧрддрд╛ рд╣реИ рдЬреЛ рд░рд┐рдПрдХреНрдЯ рдореЗрдВ рдкреНрд░рдЪрд▓рд┐рдд рд╣реБрдЖ рдХрд░рддрд╛ рдерд╛ (рд▓реЗрдХрд┐рди рдЗрд╕реА рддрд░рд╣ рдЧрд╣рд░реЗ рдкреЗрдбрд╝реЛрдВ рдХрд╛ рдиреЗрддреГрддреНрд╡ рдХрд░рддрд╛ рдерд╛)ред рдмрд╛рдж рдореЗрдВ @trueadm рдиреЗ рд░реЗрдВрдбрд░ рдкреНрд░реЙрдкреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╢реБрдЧрд░ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛, рдФрд░ рдмрд╛рдж рдореЗрдВ рдЗрд╕рд╕реЗ рд╣реБрдХ (рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░рдирдЯрд╛рдЗрдо рдУрд╡рд░рд╣реЗрдб рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП) рдХрд╛ рдиреЗрддреГрддреНрд╡ рдХрд┐рдпрд╛ред

`Widget build(context) {
  return ValueListenableBuilder<String>(
    valueListenable: someValueListenable,
    builder: (context, value, _) {
      return StreamBuilder<int>(
        stream: someStream,
        builder: (context, value2) {
          return TweenAnimationBuilder<double>(
            tween: Tween(...),
            builder: (context, value3) {
              return Text('$value $value2 $value3');
            },
          );
        },
      );
    },
  );
}`

рдпрджрд┐ рдкрдардиреАрдпрддрд╛ рдФрд░ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдореБрджреНрджрд╛ рд╣реИ рддреЛ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

  <strong i="8">@override</strong>
  Widget build(context) {
    return ValueListenableBuilder<String>(
      valueListenable: someValueListenable,
      builder: (context, value, _) => buildStreamBuilder(value),
    );
  }

  StreamBuilder<int> buildStreamBuilder(String value) => StreamBuilder<int>(
        stream: someStream,
        builder: (context, value2) => buildTweenAnimationBuilder(value, value2),
      );

  Widget buildTweenAnimationBuilder(String value, AsyncSnapshot<int> value2) =>
      TweenAnimationBuilder<double>(
        duration: Duration(milliseconds: 500),
        tween: Tween(),
        builder: (context, value3, _) => Text('$value $value2 $value3'),
      );

рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди рдЖрдкрдХреА рдЪреАрдЬрд╝ рдирд╣реАрдВ рд╣реИрдВ, рдпрд╛ рдЖрдкрдХреЛ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддреЛ рдЙрдиреНрд╣реЗрдВ рд╡рд┐рдЬреЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рдХрд╛рд▓реЗрдВ

class NewWidget extends StatelessWidget {
  var someValueListenable;

  var someStream;

  <strong i="12">@override</strong>
  Widget build(context) {
    return ValueListenableBuilder<String>(
      valueListenable: someValueListenable,
      builder: (context, value, _) {
        return MyStreamedWidget(value, someStream);
      },
    );
  }
}

class MyStreamedWidget extends StatelessWidget {
  const MyStreamedWidget(
    this.value,
    this.someStream, {
    Key key,
  }) : super(key: key);

  final String value;
  final Stream someStream;

  <strong i="13">@override</strong>
  Widget build(BuildContext context) {
    return StreamBuilder<int>(
      stream: someStream,
      builder: (context, value2) => MyAnimatedWidget(value, value2),
    );
  }
}

class MyAnimatedWidget extends StatelessWidget {
  final String value;
  final AsyncSnapshot<int> value2;

  const MyAnimatedWidget(
    this.value,
    this.value2, {
    Key key,
  }) : super(key: key);

  <strong i="14">@override</strong>
  Widget build(BuildContext context) {
    return TweenAnimationBuilder<double>(
      tween: Tween(),
      builder: (context, value3, _) {
        return Text('$value $value2 $value3');
      },
    );
  }
}

рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдРрд╕рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рдирдП рдХреАрд╡рд░реНрдб рдпрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реЛред

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

рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдХреЛрдб рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдпрд╣ рдмрд╛рд╣рд░реА рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕ (рдЬреИрд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯреЗрдбрд╡рд┐рдЬреЗрдЯреНрд╕, рдпрд╛ (рдЕрд░реНрдз) рд╡реИрд╢реНрд╡рд┐рдХ рд╕реНрдерд┐рддрд┐) рдкрд░ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдХрдо рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред

@Rudiksz рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЖрдк рдпрд╣рд╛рдВ рдЪрд░реНрдЪрд╛ рдореЗрдВ рдХреБрдЫ рднреА рдЬреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВред рд╣рдо рдЗрди рдореБрджреНрджреЛрдВ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рдгрдиреАрддрд┐рдпреЛрдВ рд╕реЗ рдЕрд╡рдЧрдд рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдкреВрд░реЗ рджрд┐рди рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЛ рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рддреЛ рдЖрдк рдЪреАрдЬреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡реИрд╕реЗ рд╣реА рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рд╡реЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдЖрдкрдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд░рд╛рдп рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИред рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдХреБрдЫ рд▓реЛрдЧ рд╕реЛрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдЕрдзрд┐рдХ рдкрдардиреАрдп рд╣реИрдВ; рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореИрдВ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рдЬрд╛рджреВ-рдХрдо рд╕рдВрд╕реНрдХрд░рдг рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рджреВрд╕рд░реА рд╢реИрд▓реА рдХреЛ рд╕рдВрднрд╡ рдмрдирд╛рдиреЗ рдореЗрдВ рдореБрдЭреЗ рдХреЛрдИ рдЖрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИред

рдЕрдЧрд░ рдпрд╣ рд░рд╛рдп рдХреА рдмрд╛рдд рд╣реИ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рджрд┐рд╢рд╛ рдореЗрдВ рдХрд╛рдлреА рдПрдХрддрд░рдлрд╛ рд╣реИред

  1. рджреЛрдиреЛрдВ рдореЗрдВ рдЬрд╛рджреВ рд╣реИред рдореИрдВ рдЬрд░реВрд░реА рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдмрд┐рд▓реНрдбрд░ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред рдЧреИрд░-рдЬрд╛рджреВ рд╕рдВрд╕реНрдХрд░рдг рдЗрди рдмрд┐рд▓реНрдбрд░реЛрдВ рдХреЗ рдЕрдВрджрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реИред рд╕рд┐рдВрдЧрд▓рдПрдиреАрдореЗрд╢рдирдЯрд┐рдХрд░рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рдорд┐рдХреНрд╕рд┐рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕реНрдкрдВрджрди рджреЗрд╡реЛрдВ рдХреЗ 95% рдХреЗ рд▓рд┐рдП рднреА рдЬрд╛рджреВ рд╣реИред
  2. рдПрдХ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪрд░ рдирд╛рдореЛрдВ рдХреЛ рдЕрд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╛рдж рдореЗрдВ рдкреЗрдбрд╝ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдХрд┐ value1 рдФрд░ value2 , рджреВрд╕рд░реЗ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд╕рд╛рдордиреЗ рдФрд░ рдХреЗрдВрджреНрд░ рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдкрд╛рд░реНрд╕рд┐рдВрдЧ/рд░рдЦрд░рдЦрд╛рд╡ рдЬреАрдд рд╣реИред
  3. рд╡рд┐рдЬреЗрдЯ рдЯреНрд░реА рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдореЗрдВ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдХреЗ 6 рд╕реНрддрд░ рд╣реЛрддреЗ рд╣реИрдВ, рджреВрд╕рд░реЗ рдореЗрдВ 0
  4. рдПрдХ 5 рдЦрдбрд╝реА рд░реЗрдЦрд╛рдПрдВ рд╣реИрдВ, рджреВрд╕рд░реА 15
  5. рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рд╛рдордЧреНрд░реА рдХреЗ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдкреНрд░рдореБрдЦрддрд╛ рд╕реЗ рджрд┐рдЦрд╛рддрд╛ рд╣реИ (рдкрд╛рда ()) рджреВрд╕рд░рд╛ рдЗрд╕реЗ рдЫреБрдкрд╛рддрд╛ рд╣реИ, рдиреЗрд╕реНрдЯреЗрдб, рдиреАрдЪреЗ рдкреЗрдбрд╝ рдореЗрдВред рдПрдХ рдФрд░ рд╕реНрдкрд╖реНрдЯ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдЬреАрддред

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

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

@Rudiksz рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЖрдк рдпрд╣рд╛рдВ рдЪрд░реНрдЪрд╛ рдореЗрдВ рдХреБрдЫ рднреА рдЬреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВред рд╣рдо рдЗрди рдореБрджреНрджреЛрдВ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рдгрдиреАрддрд┐рдпреЛрдВ рд╕реЗ рдЕрд╡рдЧрдд рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдкреВрд░реЗ рджрд┐рди рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЛ рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рддреЛ рдЖрдк рдЪреАрдЬреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡реИрд╕реЗ рд╣реА рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рд╡реЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдЖрдкрдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рд╕рд┐рд╡рд╛рдп рдЕрдЧрд░ рдпрд╣ рдореВрд▓ рдврд╛рдВрдЪреЗ рдореЗрдВ рдмрджрд▓рд╛рд╡ рд╣реИ рддреЛ рдпрд╣ рдореБрдЭреЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдирд╣реАрдВ?

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

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

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

рдпрд╣ рдмрдЦреВрдмреА рдмрддрд╛рддрд╛ рд╣реИред рд╕реНрдкрдВрджрди рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╕рд┐рдВрдЧрд▓-рд▓рд╛рдЗрди рдмрд┐рд▓реНрдбрд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

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

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

рд╕рд┐рд╡рд╛рдп рдЕрдЧрд░ рдпрд╣ рдореВрд▓ рдврд╛рдВрдЪреЗ рдореЗрдВ рдмрджрд▓рд╛рд╡ рд╣реИ рддреЛ рдпрд╣ рдореБрдЭреЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдирд╣реАрдВ?

@Rudiksz рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдХреЛрдИ рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ рдХрд┐ рд╣рдо рд╕реНрдЯреЗрдЯрдлреБрд▓ рд╡рд┐рдЬреЗрдЯреНрд╕ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВред рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рд╣рдореЗрд╢рд╛ рдЙрдирдХреЗ рд╡рд░реНрддрдорд╛рди рд╕реНрд╡рд░реВрдк рдореЗрдВ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдЬреЛ рднреА рд╕рдорд╛рдзрд╛рди рд▓реЗрдХрд░ рдЖ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд╣ рдпрд╛ рддреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдмрджрд▓рд╛рд╡ рдХреЗ рд╕реНрдЯреЗрдЯрдлреБрд▓ рд╡рд┐рдЬреЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛, рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд┐рдЬреЗрдЯ рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред рд╣рдо рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рд╕реНрдЯреЗрдЯрдлреБрд▓ рд╡рд┐рдЬреЗрдЯ рдЦрд░рд╛рдм рд╣реИрдВ, рдмрд╕ рд╣рдо рдПрдХ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд┐рдЬреЗрдЯ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдЕрдзрд┐рдХ рдХрдВрдкреЛрдЬреЗрдмрд▓ рд╡рд┐рдЬреЗрдЯ рд╕реНрдерд┐рддрд┐ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕реЗ рдПрдХ рд╕реНрдЯреЗрдЯрдлреБрд▓ рд╡рд┐рдЬреЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЛрдЪреЗрдВ рдХрд┐ рдЗрд╕рд╕реЗ рдЬреБрдбрд╝реА рдПрдХ рд╕реНрдЯреЗрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдмрдЬрд╛рдп рдХрдИ рд╕реНрдЯреЗрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИрдВ, рдФрд░ рдПрдХ рдмрд┐рд▓реНрдб рдлрдВрдХреНрд╢рди рдЬреЛ рдЕрд▓рдЧ рд╣реИ рд▓реЗрдХрд┐рди рдЙрди рд╕реНрдЯреЗрдЯ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рддрдХ рдкрд╣реБрдВрдЪ рд╣реИред рдЗрд╕ рддрд░рд╣, рдЖрдк рдЙрдирдХреЗ initState рдФрд░ dispose рдХреЗ рд╕рд╛рде рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд┐рдЯреНрд╕ (рдЙрд╕ рд░рд╛рдЬреНрдп рд╕реЗ рдЬреБрдбрд╝реЗ рд░рд╛рдЬреНрдп рддрд░реНрдХ рдХреЗ рд╕рд╛рде) рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХ рдореЙрдбреНрдпреВрд▓рд░ рдЕрд╡рд╕реНрдерд╛, рдЬрд┐рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдлрд┐рд░, рдпрд╣ рдХреЛрдИ рдареЛрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдРрд╕реЗ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдмрджрд▓ рдЬрд╛рдП рдЬреЛ рдЕрдзрд┐рдХ flutter рдЬреИрд╕рд╛ рд╣реЛ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ред

рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдЕрдЧрд▓рд╛ рдХрджрдо @TimWhiting рдХреЗ рдРрдк (https://github.com/TimWhiting/local_widget_state_approaches/blob/master/lib/stateful/counter.dart) рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ рддрд╛рдХрд┐ рдЗрд╕реЗ рдХреБрдЫ рдРрд╕рд╛ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛрдВред рдЬрд┐рд╕реЗ рд╣рдо рд╕реБрд▓рдЭрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рд╣рдЬрд╛рд░ рдХрдЯреМрддреА рд╕реЗ рдореМрдд рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдпрд╣ рд╕рд┐рд░реНрдл рдмреНрд▓реЛрдЯ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдХреЛрдбрдмреЗрд╕ рдореЗрдВ рдкрдардиреАрдпрддрд╛ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдкреНрд░рднрд╛рд╡ рдЫреЛрдЯреЗ рд╡рд┐рдЧреЗрдЯреНрд╕ рдореЗрдВ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдкреВрд░реА рдХрдХреНрд╖рд╛ <100 рд▓рд╛рдЗрди рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдЖрдзрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдПрдирд┐рдореЗрдЯрд░ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рдкреНрд░рдмрдВрдзрди рдореЗрдВ рдЦрд░реНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рддреЛ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрдирдореЗрдВ рд╕реЗ 30 рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рд╕реЗ рдХреНрдпрд╛ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛, 1 рдирд╣реАрдВред

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рд╣реИ:

<strong i="10">@override</strong>
  Widget build(BuildContext context) {
    final controller = get AnimationController(vsync: this, duration: widget.duration);
    //do stuff
  }

рдФрд░ рдЗрд╕:

  AnimationController _controller;

  <strong i="14">@override</strong>
  void initState() {
    super.initState();
    _controller = AnimationController(vsync: this, duration: widget.duration);
  }

  <strong i="15">@override</strong>
  void didUpdateWidget(Example oldWidget) {
    super.didUpdateWidget(oldWidget);
    if (widget.duration != oldWidget.duration) {
      _controller.duration = widget.duration;
    }
  }

  <strong i="16">@override</strong>
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  <strong i="17">@override</strong>
  Widget build(BuildContext context) {
    //Do Stuff
  }

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

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

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

рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ

рд╣рд╛рдБ, рдПрдкреАрдЖрдИ рдбрд┐рдЬрд╛рдЗрди рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдореЗрд░реА рдЬрд┐рдВрджрдЧреА рдореЗрдВ рд╕реНрд╡рд╛рдЧрдд рд╣реИред

рддреЛ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрдирдореЗрдВ рд╕реЗ 30 рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рд╕реЗ рдХреНрдпрд╛ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛, 1 рдирд╣реАрдВред

рдпрд╣ 30 рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реИрдВ рдЬреЛ рдорджрдж рдХрд░реЗрдВрдЧреЗ, рдпрд╣ 1 рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рдкрд░реНрдпрд╛рдкреНрдд рд╡рд┐рд╕реНрддреГрдд рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рд░рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХрд╣реЗрдВрдЧреЗ "рдареАрдХ рд╣реИ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЬреЛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ _real_ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ"ред

рдпрд╣ 30 рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реИрдВ рдЬреЛ рдорджрдж рдХрд░реЗрдВрдЧреЗ, рдпрд╣ 1 рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рдкрд░реНрдпрд╛рдкреНрдд рд╡рд┐рд╕реНрддреГрдд рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЙрди рддрд░реАрдХреЛрдВ рд╕реЗ рд╕рд░рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЖрдк рдХрд╣реЗрдВрдЧреЗ "рдареАрдХ рд╣реИ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЬреЛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ"ред

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

рдПрдХ рдЖрд╡реЗрджрди рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рдЬреЛ рдХреБрдЫ рдРрд╕рд╛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рд╕рд░рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдПрдХ рдордЫрд▓реА рдХреЛ рдкреЗрдбрд╝реЛрдВ рдкрд░ рдЪрдврд╝рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╕реЗ рдЖрдВрдХрдирд╛ рд╣реИред

рд╣рдо рдХреЗрд╡рд▓ рд╣реБрдХ рдХрд╛ рдиреНрдпрд╛рдп рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╣рдо рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдРрд╕рд╛ рд╣реИ рдЬреЛ рд╕рднреА рдХреА рдЬрд░реВрд░рддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред

(рдореИрдВ рдЙрддреНрд╕реБрдХ рд╣реВрдВ рдХрд┐ рдЖрдк рдпрд╣рд╛рдВ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХреИрд╕реЗ рдХрд░реЗрдВрдЧреЗ, рдпрджрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдореЗрдВ рдЖрд╡реЗрджрди рд▓рд┐рдЦрдХрд░ рдФрд░ рдЙрдирдХреА рддреБрд▓рдирд╛ рдХрд░рдХреЗ рдирд╣реАрдВред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЖрдк рдХрд┐рд╕ рдореВрд▓реНрдпрд╛рдВрдХрди рдореАрдЯреНрд░рд┐рдХ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджреЗрдВрдЧреЗ?)

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдиреНрдпрд╛рдп рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрдЪрд┐рдд рддрд░реАрдХрд╛ рдПрдХ рдЖрд╡реЗрджрди рдирд╣реАрдВ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдПрдкреАрдЖрдИ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЙрдкрдпреЛрдЧ рдХреЛ рдпрд╣рд╛рдВ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рддрд░рд╣ рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛)ред

рд╣рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдХреЛ рдХрд┐рд╕ рдЖрдзрд╛рд░ рдкрд░ рдЖрдВрдХрдирд╛ рдЪрд╛рд╣рд┐рдП:

  • рдХреНрдпрд╛ рдкрд░рд┐рдгрд╛рдореА рдХреЛрдб рд╡рд╕реНрддреБрдирд┐рд╖реНрда рд░реВрдк рд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ?

    • рдХреНрдпрд╛ рдпрд╣ рдЧрд▓рддрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрддрд╛ рд╣реИ?

    • рдХреНрдпрд╛ рдпрд╣ рдЕрдзрд┐рдХ рдкрдардиреАрдп рд╣реИ?

    • рдХреНрдпрд╛ рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ?

  • рдХреЛрдб рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?
  • рдЗрд╕ рдПрдкреАрдЖрдИ рд╕реЗ рдХрд┐рддрдиреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

    • рдХреНрдпрд╛ рд╣рдо рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд▓рд╛рдн рдЦреЛ рджреЗрддреЗ рд╣реИрдВ?

рдЬрдм рдЗрд╕ рдЧреНрд░рд┐рдб рдкрд░ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ Property / addDispose рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ "рдХреНрдпрд╛ рдкрд░рд┐рдгрд╛рдореА рдХреЛрдб рдмреЗрд╣рддрд░ рд╣реИ?" рд╕реНрдХреЛрд░, рд▓реЗрдХрд┐рди рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдФрд░ рд▓рдЪреАрд▓реЗрдкрди рджреЛрдиреЛрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЦрд░рд╛рдм рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░реЗрдВред

рдореИрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдпреЛрдЧ рдореЗрдВ рджреЗрдЦреЗ рдмрд┐рдирд╛ рдЙрди рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдЙрддреНрддрд░ рдХреИрд╕реЗ рджрд┐рдпрд╛ рдЬрд╛рдПред

рдХреНрдпреЛрдВ?

рдореБрдЭреЗ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП Property рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╡реЗрджрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереА рдХрд┐ рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдХреЛрдб рдмрдирд╛рдиреЗ рдФрд░ рдХрдИ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдХрдард┐рдирд╛рдИ рд╣реЛрдЧреАред

рд╣рдо рдХрд┐рд╕реА рднреА рдореМрдЬреВрджрд╛ *рдмрд┐рд▓реНрдбрд░ рдХреЛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рдо рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рд╣реБрдХ рдпрд╛ рд░рд┐рдПрдХреНрдЯ рд╕рдореБрджрд╛рдп рдореЗрдВ рдмрдиреЗ рдХреБрдЫ рд╣реБрдХ рдХреЛ рднреА рдЖрдЬрдорд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдСрдирд▓рд╛рдЗрди рдЙрдкрд▓рдмреНрдз рд╣реБрдХ рдХреЗ рдХрдИ рд╕рдВрдХрд▓рди рд╣реИрдВ)ред

рдореБрдЭреЗ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП Property рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╡реЗрджрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереА рдХрд┐ рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдХреЛрдб рдмрдирд╛рдиреЗ рдФрд░ рдХрдИ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдХрдард┐рдирд╛рдИ рд╣реЛрдЧреАред

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореИрдВ рдЖрдкрдХреА рдкреНрд░рд╡реГрддреНрддрд┐ рдХреЛ рдпрд╣рд╛рдВ рд╕рд╛рдЭрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ (рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕ рддрдереНрдп рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рд╕рдВрдкрддреНрддрд┐ (https://github.com/flutter/flutter/issues/51752#issuecomment-667737471) рдиреЗ рддрдм рддрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрдм рддрдХ рдЖрдкрдиреЗ рдХрд╣рд╛ рдХрд┐ рдЗрд╕реЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реИ рдПрдХ рд╣реА рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рдЬреЗрдЯ рдФрд░ рд╕реНрдерд╛рдиреАрдп рд░рд╛рдЬреНрдп рджреЛрдиреЛрдВ рд╕реЗ, рдЬреЛ рдореБрдЭреЗ рдкрддрд╛ рдирд╣реАрдВ рдерд╛, рдЬрдм рддрдХ рдЖрдк рдЗрд╕реЗ рдирд╣реАрдВ рд▓рд╛рддреЗ рдереЗ рддрдм рддрдХ рдПрдХ рдмрд╛рдзрд╛ рдереА)ред рдЕрдЧрд░ рдореИрдВ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдЙрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рднреА рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдХреНрдпрд╛ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдареАрдХ рд╣реЛрдЧрд╛, рдпрд╛ рдХреНрдпрд╛ рдХреЛрдИ рдирдИ рд╕рдорд╕реНрдпрд╛ рд╣реЛрдЧреА рдЬреЛ рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ? рд▓рдХреНрд╖реНрдп рдХреЗ рдмрд┐рдирд╛ рд╣рдо рд╕рднреА рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ рд▓рдХреНрд╖реНрдп рд╣реИ, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд╣рдо рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди рддреИрдпрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

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

рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ _any_ рдирд╣реАрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдиреЗ рдУрдкреА рдореЗрдВ рдПрдХ рджрд┐рдпрд╛ рдерд╛, рдФрд░ рдЬрдм рдореИрдВрдиреЗ рдЕрдкрдирд╛ рдкрд╣рд▓рд╛ рд╕рдВрдкрддреНрддрд┐ рдкреНрд░рд╕реНрддрд╛рд╡ (https://github.com/flutter/flutter/issues/51752#issuecomment-664787791) рдмрдирд╛рдпрд╛ рдерд╛, рддреЛ рдЖрдкрдиреЗ рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд┐рдпрд╛ рдерд╛ рдЬреЛ рдХрд┐ рд╕рдЪрд┐рддреНрд░ рдирд╣реАрдВ рдереЗ рдореВрд▓ рдирд┐рд░реНрдорд╛рддрд╛ред

рд╣рдо рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рд╣реБрдХ рдпрд╛ рд░рд┐рдПрдХреНрдЯ рд╕рдореБрджрд╛рдп рдореЗрдВ рдмрдиреЗ рдХреБрдЫ рд╣реБрдХ рдХреЛ рднреА рдЖрдЬрдорд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдСрдирд▓рд╛рдЗрди рдЙрдкрд▓рдмреНрдз рд╣реБрдХ рдХреЗ рдХрдИ рд╕рдВрдХрд▓рди рд╣реИрдВ)ред

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

рдпрд╣ 30 рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реИрдВ рдЬреЛ рдорджрдж рдХрд░реЗрдВрдЧреЗ, рдпрд╣ 1 рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рдкрд░реНрдпрд╛рдкреНрдд рд╡рд┐рд╕реНрддреГрдд рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рд░рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХрд╣реЗрдВрдЧреЗ "рдареАрдХ рд╣реИ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЬреЛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ _real_ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ"ред

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

рдРрд╕рд╛ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдпреЛрдЬрди рдХреЗ рддрд░реАрдХреЗ рд╕реЗ рдЕрдиреБрд░реЛрдзрд┐рдд рдкрдардиреАрдпрддрд╛ рдФрд░ рдордЬрдмреВрддреА рдХреЗ рд▓рд╛рднреЛрдВ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реЛред

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

рдЕрдиреНрдп рд╕рднреА рддрд░реНрдХ (рдЬреИрд╕реЗ AnimationController рдмрдирд╛рдирд╛ рдФрд░ рдирд┐рдкрдЯрд╛рдирд╛) рдЗрд╕ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рднреА рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдореЗрдВ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

Widget build(context) {
  return AnimationControllerBuilder(
    duration: Duration(seconds: 2),
    builder: (context, animationController) {

    }
  );
}

рдЕрдВрдд рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрджрд░реНрд╢ рдЙрджрд╛рд╣рд░рдг StreamBuilder рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣рд╛ рд╣реИ:

  • рдзрд╛рд░рд╛ Widget рд╕реЗ рдЖрддреА рд╣реИ
  • // рдПрдХ рдЗрдирд╣реЗрд░рд┐рдЯреЗрдбрд╡рд┐рдЬреЗрдЯ рд╕реЗ
  • рд╕реНрдерд╛рдиреАрдп рд░рд╛рдЬреНрдп рд╕реЗ

рдФрд░ "рд╕рдордп рдХреЗ рд╕рд╛рде рдзрд╛рд░рд╛ рдмрджрд▓ рд╕рдХрддреА рд╣реИ" рдХреЗ рдЦрд┐рд▓рд╛рдл рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдорд╛рдорд▓реЗ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ, рдЗрд╕рд▓рд┐рдП:

  • рдПрдХ рдирдИ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд╕рд╛рде didUpdateWidget
  • рдЗрдирд╣реЗрд░рд┐рдЯреЗрдбрд╡рд┐рдЬреЗрдЯ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛
  • рд╣рдордиреЗ рд╕реЗрдЯрд╕реНрдЯреЗрдЯ рдХрд╣рд╛ рд╣реИ

рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ Property рдпрд╛ onDispose

@esDotDev рдХреНрдпрд╛ рдЖрдк "рдЕрдиреБрд░реЛрдзрд┐рдд рдкрдардиреАрдпрддрд╛ рдФрд░ рдордЬрдмреВрддреА рд▓рд╛рднреЛрдВ" рдХреА рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдЕрдЧрд░ рдХреЛрдИ рдРрд╕рд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдПрдирд┐рдореЗрд╢рди рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЛ рдЙрди рдкрдардиреАрдпрддрд╛ рдФрд░ рдордЬрдмреВрддреА рдХреЗ рд▓рд╛рднреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдпрд╣рд╛рдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

@rrousselGit рдореИрдВ рд╕рдВрдкрддреНрддрд┐ рдХреА рд╡рдХрд╛рд▓рдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рдХрд╣рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХреЛрдИ рдРрд╕рд╛ рд╕рдорд╛рдзрд╛рди рддреИрдпрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдЬреЛ StreamBuilder рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдХреЗ рдмрд┐рдирд╛, рдХреНрдпрд╛ рдпрд╣ рд╣реЛрдЧрд╛? рдЖрдк рдЦреБрд╢ рд╣реЛрдВрдЧреЗ?

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХреЛрдИ рдРрд╕рд╛ рд╕рдорд╛рдзрд╛рди рддреИрдпрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдЬреЛ StreamBuilder рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдХреЗ рдмрд┐рдирд╛, рдХреНрдпрд╛ рдпрд╣ рд╣реЛрдЧрд╛? рдЖрдк рдЦреБрд╢ рд╣реЛрдВрдЧреЗ?

рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣рд╛рдВ

рд╣рдореЗрдВ рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреА рддреБрд▓рдирд╛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдиреНрдп рд╕рдорд╛рдзрд╛рдиреЛрдВ рд╕реЗ рдХрд░рдиреА рд╣реЛрдЧреАред рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╕реНрддрд░ рддрдХ рдкрд╣реБрдВрдЪ рдЬрд╛рдПрдЧрд╛ред

@esDotDev рдХреНрдпрд╛ рдЖрдк "рдЕрдиреБрд░реЛрдзрд┐рдд рдкрдардиреАрдпрддрд╛ рдФрд░ рдордЬрдмреВрддреА рд▓рд╛рднреЛрдВ" рдХреА рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

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

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

@esDotDev рдЕрдЧрд░ рдХреЛрдИ рдРрд╕рд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдЙрди рдкрдардиреАрдпрддрд╛ рдФрд░ рдордЬрдмреВрддреА рдХреЗ рд▓рд╛рднреЛрдВ рдХреЗ рд╕рд╛рде

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

рдПрдХ рдлрд╝рдВрдХреНрд╢рди-рдЬреИрд╕реА рдПрдкреАрдЖрдИ рд╣реЛрдирд╛ рдЬреЛ рдПрдХ рдРрд╕рд╛ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЬреАрд╡рди-рд╕рдордп рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЧрд▓рдд рд╕рдордЭ рд╣реИред рд╣реБрдХ рдХрд╛ рдЬреАрд╡рдирдХрд╛рд▓ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЙрдк-рд░рд╛рдЬреНрдп рд╣реИрдВред рд╡реЗ _рд╣рдореЗрд╢рд╛_ рдЙрд╕ рд░рд╛рдЬреНрдп рдХреЗ рдЬреАрд╡рдирдХрд╛рд▓ рдХреЗ рд▓рд┐рдП рдореМрдЬреВрдж рд░рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдЙрдирдХрд╛ "рдЙрдкрдпреЛрдЧ" рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрд╛ред рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рд╢рд╛рдпрдж рдЕрдЬреАрдм рдФрд░ рдЕрдкрд░рд┐рдЪрд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреА рдХрдореА рдирд╣реАрдВ рд╣реИред

рдЗрд╕реА рддрд░рд╣ рдПрдХ TweenAnimationBuilder() рдХрд╛ рдЬреАрд╡рдирдХрд╛рд▓ рднреА рд╕реНрдкрд╖реНрдЯ рд╣реИред рдЬрдм рдЗрд╕рдХреЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдЪрд▓реЗ рдЬрд╛рдПрдВрдЧреЗ рддреЛ рдпрд╣ рдЪрд▓рд╛ рдЬрд╛рдПрдЧрд╛ред рдЪрд╛рдЗрд▓реНрдб рд╡рд┐рдЬреЗрдЯ рдХреА рддрд░рд╣, рдпреЗ рдЪрд╛рдЗрд▓реНрдб рд╕реНрдЯреЗрдЯреНрд╕ рд╣реИрдВред рд╡реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд░рд╛рдЬреНрдп "рдШрдЯрдХ" рд╣реИрдВ, рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдЗрдХрдЯреНрдард╛ рдФрд░ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╣рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрдирдХреЗ рдЬреАрд╡рдирдХрд╛рд▓ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рд╕реЗ рдмрдВрдзреЗ рд░рд╣реЗрдВ рдЬрд┐рд╕рдореЗрдВ рдЗрд╕реЗ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдмрдЧ рдирд╣реАрдВ рд╣реИред

@esDotDev

рдЖрджрд┐

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

рдЯреЗрдХреНрд╕реНрдЯрдПрдбрд┐рдЯрд┐рдВрдЧрдХрдВрдЯреНрд░реЛрд▓рд░ рдЬреИрд╕реА рд╡рд╕реНрддреБ

рдХреНрдпрд╛ рдЖрдк рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ? рдХреНрдпрд╛ рдЯреЗрдХреНрд╕реНрдЯ рдПрдбрд┐рдЯрд┐рдВрдЧ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдПрдирд┐рдореЗрд╢рди рдХрдВрдЯреНрд░реЛрд▓рд░ рд╕реЗ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╣реИ?


@rrousselGit

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХреЛрдИ рдРрд╕рд╛ рд╕рдорд╛рдзрд╛рди рддреИрдпрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдЬреЛ StreamBuilder рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдХреЗ рдмрд┐рдирд╛, рдХреНрдпрд╛ рдпрд╣ рд╣реЛрдЧрд╛? рдЖрдк рдЦреБрд╢ рд╣реЛрдВрдЧреЗ?

рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣рд╛рдВ

рдпрд╣рд╛рдВ рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИ рдЬреЛ StreamBuilder рдХрд░рддрд╛ рд╣реИ, рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЗрдВрдбреЗрдВрдЯрд┐рдВрдЧ рдХреЗ:

Widget build(context) {
  var result = Text('result:');
  var builder1 = (BuildContext context, AsyncSnapshot<int> snapshot) {
    return Row(children: [result, Text(snapshot.data)]);
  };
  result = StreamBuilder(stream: _stream1, builder: builder1);
  var builder2 = (BuildContext context, AsyncSnapshot<int> snapshot) {
    return Column(children: [result, Text(snapshot.data)]);
  };
  result = StreamBuilder(stream: _stream2, builder: builder2);
}

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдЕрдиреНрдп рдмрд╛рдзрд╛ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддрд╛ рд╣реИ, рдпрджреНрдпрдкрд┐ред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВ рдХреБрдЫ рдРрд╕рд╛ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ рдЬрд┐рд╕рд╕реЗ рд╣рдо рд╕рднреА рд╕рд╣рдордд рд╣реЛ рд╕рдХреЗрдВ, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдкреВрд░рд╛ рд╡рд┐рд╡рд░рдг рд╣реЛред

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

рдХреНрдпрд╛ рдЖрдк рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ? рдХреНрдпрд╛ рдЯреЗрдХреНрд╕реНрдЯ рдПрдбрд┐рдЯрд┐рдВрдЧ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдПрдирд┐рдореЗрд╢рди рдХрдВрдЯреНрд░реЛрд▓рд░ рд╕реЗ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╣реИ?

рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдпрд╣ init/рдирд┐рдкрдЯрд╛рди рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪреАрдЬреЗрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдпрд╣ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЧреБрдгреЛрдВ рд╕реЗ рдмрдВрдзреЗрдЧрд╛, рдФрд░ рдореИрдВ рдЙрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛ рд╕рдорд╛рд╣рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

@esDotDev рддреЛ рдЖрдк рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди

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

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

рдореБрдЭреЗ рд╕рдордЭ рдирд╣реАрдВ рдЖрддрд╛ рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ? ЁЯЩП

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдЕрдиреНрдп рдмрд╛рдзрд╛ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддрд╛ рд╣реИ, рдпрджреНрдпрдкрд┐ред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВ рдХреБрдЫ рдРрд╕рд╛ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ рдЬрд┐рд╕рд╕реЗ рд╣рдо рд╕рднреА рд╕рд╣рдордд рд╣реЛ рд╕рдХреЗрдВ, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдкреВрд░рд╛ рд╡рд┐рд╡рд░рдг рд╣реЛред

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреЛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рд╡рд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ (рдореЗрд░реЗ рд╕рд╛рде рд╕рд╣рди рдХрд░реЗрдВ, рдореИрдВ рдирд╣реАрдВ, рд╕реНрдЯреНрд░реАрдо рдХрд╛ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ):

Widget build(context) {
   var snapshot1 = get AsyncSnapshot<int>(stream1);
   var snapshot2 = get AsyncSnapshot<int>(stream2);
   return Column(children: [Text(snapshot1.data), Text(snapshot2.data)]);
}

рдпрд╣ рд╕рдм рдХреЛрдб рд╣реИред рдФрд░ рдХреБрдЫ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдЯреНрд░реАрдо рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмрдирд╛рдИ рдЧрдИ рд╣реИ, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕реНрдЯреНрд░реАрдо рдХрд╛ рдирд┐рдкрдЯрд╛рд░рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рдо рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдкреИрд░ рдореЗрдВ рдЧреЛрд▓реА рдирд╣реАрдВ рдорд╛рд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреЛрдб рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкрдардиреАрдп рд╣реИред

рдЖрдкрдХреЛ рдПрдирд┐рдореЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдирд┐рдореЗрд╢рдирдмрд┐рд▓реНрдбрд░ рдФрд░ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░реАрдордмрд┐рд▓реНрдбрд░ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред

рдореИрдВ рдЗрд╕реЗ рдПрдХ рдореБрджреНрджреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд░рд┐рд╕реНрдЯреЛрд░реЗрдмрд▓рдЗрдВрдЯ рдмрдирд╛рдо рд░рд┐рд╕реНрдЯреЛрд░реЗрдмрд▓рд╕реНрдЯреНрд░рд┐рдВрдЧ рдмрдирд╛рдо рд░рд┐рд╕реНрдЯреЛрд░реЗрдмрд▓рдбрдмрд▓ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИ

рдФрд░ рдЬреЗрдирд░рд┐рдХ рдЗрд╕реЗ рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

GenericBuilder<Stream<int>>(
  create: (ref) {
    var controller = StreamController<int>();
    ref.onDispose(controller.close);
    return controller.stream;
  }
  builder: (context, Stream<int> stream) {

  }
)

рдЗрд╕реА рддрд░рд╣, рдлрд╝реНрд▓рдЯрд░ рдпрд╛ рдбрд╛рд░реНрдЯ рдореЗрдВ Disposable рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред

@esDotDev

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреЛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рд╡рд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ:

рдпрд╣ рдХреБрдЫ рдмрд╣реБрдд рд╣реА рдЙрдЪрд┐рдд рдмрд╛рдзрд╛рдУрдВ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░реЗрдЧрд╛ рдЬрд┐рдиреНрд╣реЗрдВ рджреВрд╕рд░реЛрдВ рдиреЗ рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдпрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП @Rudiksz), рдЕрд░реНрдерд╛рддреН рдпрд╣ рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИ рдХрд┐ рдирд┐рд░реНрдорд╛рдг рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреЗ рджреМрд░рд╛рди рдХреЛрдИ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХреЛрдб рдХрднреА рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

@rrousselGit

рдореИрдВ рдЗрд╕реЗ рдПрдХ рдореБрджреНрджреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд░рд┐рд╕реНрдЯреЛрд░реЗрдмрд▓рдЗрдВрдЯ рдмрдирд╛рдо рд░рд┐рд╕реНрдЯреЛрд░реЗрдмрд▓рд╕реНрдЯреНрд░рд┐рдВрдЧ рдмрдирд╛рдо рд░рд┐рд╕реНрдЯреЛрд░реЗрдмрд▓рдбрдмрд▓ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИ

рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдирд┐рдореЗрд╢рдирдмрд┐рд▓реНрдбрд░ рдФрд░ рд╕реНрдЯреНрд░реАрдордмрд┐рд▓реНрдбрд░ рд╡рдЧреИрд░рд╣ рд╣реИрдВ, рд╣рд╛рдВред рджреЛрдиреЛрдВ рд╣реА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд╣реИред

рдЬреЗрдиреЗрд░рд┐рдХрдмрд┐рд▓реНрдбрд░

рдпрд╣ рд╡реИрд╕рд╛ рд╣реА рд╣реИ рдЬреИрд╕рд╛ рдореИрдВрдиреЗ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рд╡рд╣рд╛рдВ рдЖрдкрдХреА рдЪрд┐рдВрддрд╛рдУрдВ рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВ рддреЛ рдЖрдк рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рд╣реА рд╡рд░реНрдмреЛрдЬрд╝ рд╣реИред

рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдиреЗ рдХрд╣рд╛ рдерд╛ рдХрд┐ рдЕрдЧрд░ рдХреЛрдИ рдРрд╕рд╛ рд╕рдорд╛рдзрд╛рди рддреИрдпрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдЬреЛ StreamBuilder рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдХреЗ рдмрд┐рдирд╛, рдЖрдк рд╢рд╛рдпрдж рдЦреБрд╢ рд╣реЛрдВрдЧреЗред рдЖрдкрдиреЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рдореЗрд░реЗ рдкреНрд░рдпрд╛рд╕ рдкрд░ рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВ рдХреА рд╣реИ (https://github.com/flutter/flutter/issues/51752#issuecomment-671004483)ред рдХреНрдпрд╛ рдЖрдк рдЙрд╕ рд╕рдорд╛рдзрд╛рди рд╕реЗ рдЦреБрд╢ рд╣реИрдВ?

@esDotDev

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреЛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рд╡рд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ:

рдпрд╣ рдХреБрдЫ рдмрд╣реБрдд рд╣реА рдЙрдЪрд┐рдд рдмрд╛рдзрд╛рдУрдВ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░реЗрдЧрд╛ рдЬрд┐рдиреНрд╣реЗрдВ рджреВрд╕рд░реЛрдВ рдиреЗ рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдпрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП @Rudiksz), рдЕрд░реНрдерд╛рддреН рдпрд╣ рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИ рдХрд┐ рдирд┐рд░реНрдорд╛рдг рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреЗ рджреМрд░рд╛рди рдХреЛрдИ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХреЛрдб рдХрднреА рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХреЛрдб рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рд╣реЛред рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рдпрд╣ рд╣реИ рдХрд┐

  1. рдореБрдЭреЗ рдЕрдкрдиреЗ рдкреЗрдбрд╝ рдХреЛ рдЗрдВрдбреЗрдВрдЯ рдХрд░рдиреЗ, рдпрд╛ рдПрдХ рдЯрди рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рдЗрдиреЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
  2. рдЗрд╕ рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЬреАрд╡рдирдЪрдХреНрд░ рдХреЛрдб рдЗрдирдХреИрдкреНрд╕реБрд▓реЗрдЯреЗрдб рд╣реИред

рдпрд╣ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╣реЛрдЧрд╛:

AsyncSnapshot<int> snapshot1 = createLifecycleState(widget.stream1);
AsyncSnapshot<int> snapshot2 = createLifecycleState(widget.stream2);
AniamtorController animator = createLifecycleState(duration: Duration(seconds: 1), (a)=>a.forward());

Widget build(context) {
   return Opacity(opacity: animator.value, child: Column(children: [Text(snapshot1.data), Text(snapshot2.data)]));
}

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

AsyncSnapshot<int> stream1;
AsyncSnapshot<int> stream2;
<strong i="18">@override</strong> 
void initState(){
    snapshot1 = createLifecycleState(widget.stream1);
    snapshot2 = createLifecycleState(widget.stream2);
   super.initState();
}

Widget build(context) {
   return Column(children: [Text(snapshot1.data), Text(snapshot2.data)]);
}

рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рд╣рдо рд╡рд╛рдЪрд╛рд▓рддрд╛ рдкрд░ рд╡рд╛рдкрд╕ рдХреНрдпреЛрдВ рдЖрддреЗ рд░рд╣рддреЗ рд╣реИрдВред
рдореИрдВрдиреЗ рдХрдИ рдмрд╛рд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд╣рд╛ рдХрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдмрдирд╛рдо рдкрдардиреАрдпрддрд╛ рдмрдирд╛рдо рд▓рдЪреАрд▓рд╛рдкрди рд╣реИред

рдореИрдВрдиреЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧреНрд░рд┐рдб рднреА рдмрдирд╛рдпрд╛ https://github.com/flutter/flutter/issues/51752#issuecomment -671000137 рдФрд░ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓рд╛ https://github.com/flutter/flutter/issues/51752#issuecomment - 671002248


рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдиреЗ рдХрд╣рд╛ рдерд╛ рдХрд┐ рдЕрдЧрд░ рдХреЛрдИ рдРрд╕рд╛ рд╕рдорд╛рдзрд╛рди рддреИрдпрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдЬреЛ StreamBuilder рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдХреЗ рдмрд┐рдирд╛, рдЖрдк рд╢рд╛рдпрдж рдЦреБрд╢ рд╣реЛрдВрдЧреЗред рдЖрдкрдиреЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рдореЗрд░реЗ рдкреНрд░рдпрд╛рд╕ рдкрд░ рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВ рдХреА рд╣реИ (#51752 (рдЯрд┐рдкреНрдкрдгреА))ред рдХреНрдпрд╛ рдЖрдк рдЙрд╕ рд╕рдорд╛рдзрд╛рди рд╕реЗ рдЦреБрд╢ рд╣реИрдВ?

рдпрд╣ рд▓рдЪреАрд▓реЗрдкрди рдХреЗ рдиреНрдпреВрдирддрдо рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╕реНрддрд░ рддрдХ рдкрд╣реБрдБрдЪ рдЬрд╛рддрд╛ рд╣реИред

https://github.com/flutter/flutter/issues/51752#issuecomment -671000137 рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЗрд╕рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ:

  • рдХреНрдпрд╛ рдкрд░рд┐рдгрд╛рдореА рдХреЛрдб рд╡рд╕реНрддреБрдирд┐рд╖реНрда рд░реВрдк рд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ?

    • рдХреНрдпрд╛ рдпрд╣ рдЧрд▓рддрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрддрд╛ рд╣реИ?

      _рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ (рд╣реИрдХрд┐рдВрдЧ рдХреЗ рдмрд┐рдирд╛ рд╕реНрдЯреНрд░реАрдордмрд┐рд▓реНрдбрд░) рдХрдо рддреНрд░реБрдЯрд┐ рдкреНрд░рд╡рдг рд╣реИред рдпрд╣ рд╕рдорд╛рдзрд╛рди рдЧрд▓рддрд┐рдпреЛрдВ рд╕реЗ рдирд╣реАрдВ рдмрдЪрддрд╛, рдпрд╣ рдХреБрдЫ_ . рдмрдирд╛рддрд╛ рд╣реИ

    • рдХреНрдпрд╛ рдпрд╣ рдЕрдзрд┐рдХ рдкрдардиреАрдп рд╣реИ?

      _рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХ рдкрдардиреАрдп рдирд╣реАрдВ рд╣реИ_

    • рдХреНрдпрд╛ рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ?

      _рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ_

  • рдХреЛрдб рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?
    _StreamBuilder рд╡рд┐рдЬреЗрдЯ/рд░рд╛рдЬреНрдп/рдЬреАрд╡рди-рдЪрдХреНрд░ рд╕реЗ рдмрдВрдзрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдкрд╛рд╕_
  • рдЗрд╕ рдПрдкреАрдЖрдИ рд╕реЗ рдХрд┐рддрдиреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?
    _рд╣рдо рдХрд╕реНрдЯрдо рдирд┐рд░реНрдорд╛рддрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рддреЛ рдпрд╣ рдкрд╛рд╕_. рдореИрдВ
  • рдХреНрдпрд╛ рд╣рдо рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд▓рд╛рдн рдЦреЛ рджреЗрддреЗ рд╣реИрдВ?
    _рдирд╣реАрдВ, рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕реБрд╕рдВрдЧрдд рд╣реИ_ред рдореИрдВ
  1. рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЖрдИрдПрдордУ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд▓реЗрдЖрдЙрдЯрдмрд┐рд▓реНрдбрд░ рд╕рдореЗрдд рд╕рднреА рдмрд┐рд▓реНрдбрд░ рд╡рд┐рдЬреЗрдЯреНрд╕ рддрдХ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╣реЛ рд╕рдХрддреА рд╣реИред
  2. рд╕реБрдирдиреЗ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рддрд╛рдХрд┐ рдЖрдк 10x рдирд┐рдпрдВрддреНрд░рдХ рдмрдирд╛ рд╕рдХреЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рд▓реАрдлреНрд╕ рдореЗрдВ рдкрд╛рд╕ рдХрд░ рд╕рдХреЗрдВ, рдпрд╛ рд╕реНрдкрдВрджрди рдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдкреЗрдбрд╝ рдХреЗ рдХрд┐рд╕ рд╣рд┐рд╕реНрд╕реЗ рдиреЗ рдмрд┐рд▓реНрдбрд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдореВрд▓реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред
  3. рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╣реБрдХ рдХрд░рддрд╛ рд╣реИред
  4. рдЗрд╕реЗ рдареАрдХ рд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
  5. рдбрд┐рдмрдЧрд┐рдВрдЧ рд╕рд╣рд╛рдпрдХреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдХрд┐рд╕реА рдРрд╕реЗ рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рдмреНрд░реЗрдХрдкреНрд╡рд╛рдЗрдВрдЯ рдбрд╛рд▓рддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдмрд┐рд▓реНрдб рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдкрд░, рдХреНрдпреЛрдВрдХрд┐ рдмрд┐рд▓реНрдбрд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЯреНрд░рд┐рдЧрд░ рд╣реЛ рдЧрдпрд╛ рдерд╛, рдЖрдИрдбреАрдИ рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рд▓реНрдбрд░ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддрд╛ рдерд╛ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
Widget build(context) {
   // this builder is not highlighted, but you can hover over it to see how often it rebuilds, how heavy were those rebuilds, and when was the last rebuild
   var snapshot1 = keyword StreamBuilder(stream1);
   // this builder will be highlighted because it triggered the rebuild
   var constraints = keyword LayoutBuilder(); 

   // <-- I had a breakpoint here and parent constraint changed, breakpoints got reached.
   return Column(children: [Text(snapshot1.data), Text(snapshot2.data)]);
}

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, @ рд╣рд┐рдХреНрд╕реА

рдпрд╣ рдХреБрдЫ рдмрд╣реБрдд рд╣реА рдЙрдЪрд┐рдд рдмрд╛рдзрд╛рдУрдВ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░реЗрдЧрд╛ рдЬрд┐рдиреНрд╣реЗрдВ рджреВрд╕рд░реЛрдВ рдиреЗ рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдпрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП @Rudiksz), рдЕрд░реНрдерд╛рддреН рдпрд╣ рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИ рдХрд┐ рдирд┐рд░реНрдорд╛рдг рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреЗ рджреМрд░рд╛рди рдХреЛрдИ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХреЛрдб рдХрднреА рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА *рдмрд┐рд▓реНрдбрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдРрд╕рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдбрд┐рдбреЗрдВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ рдПрдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╢реБрдЧрд░ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдмрд╣реБрдд рдХреБрдЫ рдПрд╕рд┐рдВрдХ/рдкреНрд░рддреАрдХреНрд╖рд╛ рдФрд░ рд╡рд╛рдпрджрд╛ рдЬреИрд╕рд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИред

@esDotDev рдЖрдк рдЬреЛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ рд╡рд╣ рдмрд╣реБрдд рдХреБрдЫ рд╡реИрд╕рд╛ рд╣реА рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдерд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ https://github.com/flutter/flutter/issues/51752#issuecomment-664787791 рдпрд╛ https://github.com/flutter/flutter/ рдореБрджреНрджреЗ/51752#рдореБрджреНрджрд╛ рдЯрд┐рдкреНрдкрдгреА-667737471)ред рдХреНрдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рд╣реИ рдЬреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЛ рдкреИрдХреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ? рдпрд╛рдиреА, рдЖрдкрдХреЛ рдЗрд╕ рддрд░рд╣ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓ рдврд╛рдВрдЪреЗ рдореЗрдВ рдХреНрдпрд╛ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА?

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

рдЖрдкрдХреЗ рдЧреНрд░рд┐рдб рдХреЗ рд╕рд╛рде рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ рдЕрдм рддрдХ рдХреЗ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рддрд╛, рддреЛ рдореБрдЭреЗ рдпрд╣ рдорд┐рд▓ рдЬрд╛рддрд╛, рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЬреЛ рдорд┐рд▓реЗрдЧрд╛ рдЙрд╕рд╕реЗ рдмрд╣реБрдд рдЕрд▓рдЧ рд╣реИ:

рд╕реНрдЯреЗрдЯрдлреБрд▓рд╡рд┐рдЬреЗрдЯ

  • рдХреНрдпрд╛ рдкрд░рд┐рдгрд╛рдореА рдХреЛрдб рд╡рд╕реНрддреБрдирд┐рд╖реНрда рд░реВрдк рд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ?

    • рдХреНрдпрд╛ рдпрд╣ рдЧрд▓рддрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрддрд╛ рд╣реИ?

      _рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рдорд╛рди рд╣реИ, рдЬреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рддреНрд░реБрдЯрд┐-рдкреНрд░рд╡рдг рдирд╣реАрдВ рд╣реИред_

    • рдХреНрдпрд╛ рдпрд╣ рдЕрдзрд┐рдХ рдкрдардиреАрдп рд╣реИ?

      _рдпрд╣ рд╡рд╣реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдкрдардиреАрдп рд╣реИ, рдЬреЛ рдпрдереЛрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкрдардиреАрдп рд╣реИред_

    • рдХреНрдпрд╛ рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ?

      _рдпрд╣ рд╡рд╣реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд▓рд┐рдЦрдирд╛ рднреА рдЙрддрдирд╛ рд╣реА рдЖрд╕рд╛рди рд╣реИ, рдЬреЛ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИред_

  • рдХреЛрдб рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?
    _рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрдо рдХреЛрдб рд╣реИред_
  • рдЗрд╕ рдПрдкреАрдЖрдИ рд╕реЗ рдХрд┐рддрдиреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?
    _рдпрд╣ рдЖрдзрд╛рд░ рд░реЗрдЦрд╛ рд╣реИред_
  • рдХреНрдпрд╛ рд╣рдо рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд▓рд╛рдн рдЦреЛ рджреЗрддреЗ рд╣реИрдВ?
    _рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ред_

рд╕рдВрдкрддреНрддрд┐ рдкрд░ рдмрджрд▓рд╛рд╡

  • рдХреНрдпрд╛ рдкрд░рд┐рдгрд╛рдореА рдХреЛрдб рд╡рд╕реНрддреБрдирд┐рд╖реНрда рд░реВрдк рд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ?

    • рдХреНрдпрд╛ рдпрд╣ рдЧрд▓рддрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрддрд╛ рд╣реИ?

      _рдпрд╣ рдХреЛрдб рдХреЛ рдПрдХ рдЕрд▓рдЧ рд╕реНрдерд╛рди рдкрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЧрд▓рддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред_ ЁЯФ╖

    • рдХреНрдпрд╛ рдпрд╣ рдЕрдзрд┐рдХ рдкрдардиреАрдп рд╣реИ?

      _рдпрд╣ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛрдб рдФрд░ рдХреНрд▓реАрдирдЕрдк рдХреЛрдб рдФрд░ рдЕрдиреНрдп рдЬреАрд╡рдирдЪрдХреНрд░ рдХреЛрдб рдХреЛ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рд░рдЦрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХрдо рд╕реНрдкрд╖реНрдЯ рд╣реИред_

    • рдХреНрдпрд╛ рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ?

      _рдпрд╣ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛрдб рдФрд░ рдХреНрд▓реАрдирдЕрдк рдХреЛрдб рдФрд░ рдЕрдиреНрдп рдЬреАрд╡рдирдЪрдХреНрд░ рдХреЛрдб рдХреЛ рдорд┐рд▓рд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд▓рд┐рдЦрдирд╛ рдХрдард┐рди рд╣реИред_

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

рдмрд┐рд▓реНрдбрд░реНрд╕ рдкрд░ рдмрджрд▓рд╛рд╡

  • рдХреНрдпрд╛ рдкрд░рд┐рдгрд╛рдореА рдХреЛрдб рд╡рд╕реНрддреБрдирд┐рд╖реНрда рд░реВрдк рд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ?

    • рдХреНрдпрд╛ рдпрд╣ рдЧрд▓рддрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрддрд╛ рд╣реИ?

      _рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ StatefulWidget рд╕рдорд╛рдзрд╛рди рд╣реИ рд▓реЗрдХрд┐рди рддрдереНрдпрд╛рддреНрдордХ рд╣реИ; рдЧрд▓рддрд┐рдпрд╛рдБ рд╕рдордХрдХреНрд╖ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред_

    • рдХреНрдпрд╛ рдпрд╣ рдЕрдзрд┐рдХ рдкрдардиреАрдп рд╣реИ?

      _рдмрд┐рд▓реНрдб рд╡рд┐рдзрд┐рдпрд╛рдВ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИрдВ, рдмрд╛рдХреА рддрд░реНрдХ рдПрдХ рдЕрд▓рдЧ рд╡рд┐рдЬреЗрдЯ рдкрд░ рдЪрд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд▓рдЧрднрдЧ рдЙрд╕реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред_ ЁЯФ╖

    • рдХреНрдпрд╛ рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ?

      _рдкрд╣рд▓реА рдмрд╛рд░ рд▓рд┐рдЦрдирд╛ рдХрдард┐рди (рдмрд┐рд▓реНрдбрд░ рд╡рд┐рдЬреЗрдЯ рдмрдирд╛рдирд╛), рдЙрд╕рдХреЗ рдмрд╛рдж рдереЛрдбрд╝рд╛ рдЖрд╕рд╛рди, рддреЛ рдЙрд╕реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред_

  • рдХреЛрдб рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?
    _ рдмрд┐рд▓реНрдХреБрд▓ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЬрдЧрд╣реЛрдВ рдкрд░ StatefulWidget рдХреЗ рд░реВрдк рдореЗрдВ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдХреЗ рд░реВрдк рдореЗрдВред_
  • рдЗрд╕ рдПрдкреАрдЖрдИ рд╕реЗ рдХрд┐рддрдиреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?
    _рдпрд╣ StatefulWidget рдХреЗ рд▓рд┐рдП рд╡рд╛рдХреНрдпрд╛рддреНрдордХ рдЪреАрдиреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдзрд┐рдХрддрд░ рдХреЛрдИ рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИред рдХреБрдЫ рдкрд╣рд▓реБрдУрдВ рдореЗрдВ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмреЗрд╣рддрд░ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЙрд╕ рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рд╕рдВрднрд╛рд▓рддреЗ рд╕рдордп рдЪрд▓рд╛рдирд╛ рд╣реЛрддрд╛ рд╣реИред_
  • рдХреНрдпрд╛ рд╣рдо рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд▓рд╛рдн рдЦреЛ рджреЗрддреЗ рд╣реИрдВ?
    _рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ред_

рд╣реБрдХ рдХреА рддрд░рд╣ рд╕рдорд╛рдзрд╛рди

  • рдХреНрдпрд╛ рдкрд░рд┐рдгрд╛рдореА рдХреЛрдб рд╡рд╕реНрддреБрдирд┐рд╖реНрда рд░реВрдк рд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ?

    • рдХреНрдпрд╛ рдпрд╣ рдЧрд▓рддрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрддрд╛ рд╣реИ?

      _рдЦрд░рд╛рдм рдкреИрдЯрд░реНрди рдХреЛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдорд╛рдг рд╡рд┐рдзрд┐ рдореЗрдВ рдирд┐рд░реНрдорд╛рдг), рдЕрдЧрд░ рдЧрд▓рддреА рд╕реЗ рд╕рд╢рд░реНрдд рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдмрдЧ рдХрд╛ рдЬреЛрдЦрд┐рдо рд╣реЛрддрд╛ рд╣реИред_

    • рдХреНрдпрд╛ рдпрд╣ рдЕрдзрд┐рдХ рдкрдардиреАрдп рд╣реИ?

      _рдмрд┐рд▓реНрдб рд╡рд┐рдзрд┐ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдЬреНрдЮрд╛рдд рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИред_

    • рдХреНрдпрд╛ рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ?

      _рдбреЗрд╡рд▓рдкрд░ рдХреЛ рд╣реБрдХ рд▓рд┐рдЦрдирд╛ рд╕реАрдЦрдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдПрдХ рдирдИ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИ, рдЗрддрдирд╛ рдХрдард┐рдиред_ тЭМ

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

рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рд╣рдо рд╡рд╛рдЪрд╛рд▓рддрд╛ рдкрд░ рд╡рд╛рдкрд╕ рдХреНрдпреЛрдВ рдЖрддреЗ рд░рд╣рддреЗ рд╣реИрдВред
рдореИрдВрдиреЗ рдХрдИ рдмрд╛рд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд╣рд╛ рдХрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдмрдирд╛рдо рдкрдардиреАрдпрддрд╛ рдмрдирд╛рдо рд▓рдЪреАрд▓рд╛рдкрди рд╣реИред

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

@szotp

  1. рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЖрдИрдПрдордУ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд▓реЗрдЖрдЙрдЯрдмрд┐рд▓реНрдбрд░ рд╕рдореЗрдд рд╕рднреА рдмрд┐рд▓реНрдбрд░ рд╡рд┐рдЬреЗрдЯреНрд╕ рддрдХ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╣реЛ рд╕рдХрддреА рд╣реИред

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

  1. рд╕реБрдирдиреЗ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рддрд╛рдХрд┐ рдЖрдк 10x рдирд┐рдпрдВрддреНрд░рдХ рдмрдирд╛ рд╕рдХреЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рд▓реАрдлреНрд╕ рдореЗрдВ рдкрд╛рд╕ рдХрд░ рд╕рдХреЗрдВ, рдпрд╛ рд╕реНрдкрдВрджрди рдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдкреЗрдбрд╝ рдХреЗ рдХрд┐рд╕ рд╣рд┐рд╕реНрд╕реЗ рдиреЗ рдмрд┐рд▓реНрдбрд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдореВрд▓реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдореИрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ, рдЖрдк рдЗрд╕реЗ рдЖрдЬ рд╢реНрд░реЛрддрд╛рдУрдВ рдФрд░ рдмрд┐рд▓реНрдбрд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдореИрдВ рдРрдк рдореЗрдВ ValueListenableBuilder рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрджреНрдзреГрдд рдХрд┐рдпрд╛ рдерд╛)ред

рдпрд╣ рдХреБрдЫ рдмрд╣реБрдд рд╣реА рдЙрдЪрд┐рдд рдмрд╛рдзрд╛рдУрдВ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░реЗрдЧрд╛ рдЬрд┐рдиреНрд╣реЗрдВ рджреВрд╕рд░реЛрдВ рдиреЗ рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдпрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП @Rudiksz), рдЕрд░реНрдерд╛рддреН рдпрд╣ рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИ рдХрд┐ рдирд┐рд░реНрдорд╛рдг рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреЗ рджреМрд░рд╛рди рдХреЛрдИ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХреЛрдб рдХрднреА рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА *рдмрд┐рд▓реНрдбрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдРрд╕рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рд╕рд╣реА рд╣реИред рдпрд╣ рдмрд┐рд▓реНрдбрд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рд▓реЛрдЧ initState, didChangeрдирд┐рд░реНрднрд░рддрд╛, didUpdateWidget, рдФрд░ рд▓реЙрдЬрд┐рдХ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдореЗрд╣рдирдд рдХрд░рддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдЬреЛ рдХреБрдЫ рдмрджрд▓рд╛ рд╣реИ рдЙрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рд▓реНрдб рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдиреНрдпреВрдирддрдо рдорд╛рддреНрд░рд╛ рдореЗрдВ рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, ValueListenableBuilder рдХреЗрд╡рд▓ рдкрд╣рд▓реА рдмрд╛рд░ рдмрдирд╛рдП рдЬрд╛рдиреЗ рдкрд░ рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдирд┐рд░реНрдорд╛рддрд╛ рдпрд╛ рддреЛ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдпрд╛ рдмрд┐рд▓реНрдбрд░ рдХреЗ initState рдХреЗ рдмрд┐рдирд╛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╣реБрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

@esDotDev рдЖрдк рдЬреЛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ рд╡рд╣ рдмрд╣реБрдд рдХреБрдЫ рд╡реИрд╕рд╛ рд╣реА рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдерд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП #51752 (рдЯрд┐рдкреНрдкрдгреА) рдпрд╛ #51752 (рдЯрд┐рдкреНрдкрдгреА) рджреЗрдЦреЗрдВ )ред

рдЕрдЧрд░ рдореИрдВ рд╕рд╣реА рд╕рдордЭрддрд╛ рд╣реВрдВ, рддреЛ рд╣рдо UserProperty рдЬреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ UserId, рдпрд╛ AnimationProperty , рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдбрд┐рдбрдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдЪреЗрдВрдЬ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдореЗрдВ рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП init/update/dispose рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ? рддрдм рдпрд╣ рдореБрдЭреЗ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдЖрдо рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдЬрд▓реНрджреА рд╕реЗ рдмрдирд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рдореБрдЭреЗ рдлреЗрдВрдХ рд░рд╣реА рд╣реИ, рд╡рд╣ рд╣реИ рдпрд╣рд╛рдВ рдХрд╛ рднрд╡рд┐рд╖реНрдп рдХрд╛ рдирд┐рд░реНрдорд╛рддрд╛ред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд┐рд░реНрдл рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЪреБрдиреЗ рдЧрдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рдХрд╛рд░рдг рд╣реИ?

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрдпрд╛ рдореИрдВ рдЗрд╕реЗ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВ?

class _ExampleState extends State<Example> with PropertyManager {
  AnimationProperty animProp1;
  AnimationProperty animProp2;

  <strong i="15">@override</strong>
  void initProperties() {
    super.initProperties();
    anim1= register(anim1, AnimationProperty (
      AnimationController(duration: Duration(seconds: 1)),
      initState: (animator) => animator.forward()
      // Not dealing with updates or dispose here, cause AnimationProperty handles it
    ));
   anim2 = register(anim2, AnimationProperty(
       AnimationController(duration: Duration(seconds: 2))..forward(),
   ));
  }

  <strong i="16">@override</strong>
  Widget build(BuildContext context) {
    return Column(children: [
       FadeTransition(opacity: anim1, child: ...),
       FadeTransition(opacity: anim2, child: ...),
   ])
  }
}

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

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

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

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

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

рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рдореБрдЭреЗ рдлреЗрдВрдХ рд░рд╣реА рд╣реИ, рд╡рд╣ рд╣реИ рдпрд╣рд╛рдВ рдХрд╛ рднрд╡рд┐рд╖реНрдп рдХрд╛ рдирд┐рд░реНрдорд╛рддрд╛ред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд┐рд░реНрдл рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЪреБрдиреЗ рдЧрдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рдХрд╛рд░рдг рд╣реИ?

рдореИрдВ @rrousselGit рджреНрд╡рд╛рд░рд╛ рджрд┐рдП рдЧрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рдерд╛ред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рдЪреАрдЬ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрдпрд╛ рдореИрдВ рдЗрд╕реЗ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВ?

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

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

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

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

рдзрдиреНрдпрд╡рд╛рдж @ рд╣рд┐рдХреНрд╕реА рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдХрд╛рдлреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИред

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

рджреЛрдмрд╛рд░рд╛, рдореИрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдХрдЪреНрдЪреЗ рдПрдирд┐рдореЗрдЯрд░ рдХрдВрдЯреНрд░реЛрд▓рд░ рдкрд░ TweenAnimationBuilder рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рдиреЗ рд╕реЗ рдпрд╣ рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рдЕрд▓рдЧ рдХреИрд╕реЗ рд╣реИред рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд░рд╛рдЬреНрдп рдЗрд╕ рдЕрдиреНрдп рд░рд╛рдЬреНрдп рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рд╣рд┐рдд/рдкреНрд░рдмрдВрдзрд┐рдд рд╣реЛ (рдФрд░ рдЖрдорддреМрд░ рдкрд░ рдЖрдк рдпрд╣реА рдЪрд╛рд╣рддреЗ рд╣реИрдВ), рддреЛ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рд░рд▓ рдФрд░ рдЕрдзрд┐рдХ рдордЬрдмреВрдд рдХрд░реЗрдВред

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

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

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

@esDotDev рдПрдирд┐рдореЗрд╢рдирдмрд┐рд▓реНрдбрд░ рдпрд╛ рдЯреНрд╡реАрдирдПрдиреАрдореЗрд╢рдирдмрд┐рд▓реНрдбрд░ рдпрд╛ ValueListenableBuilder рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП IMHO рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ рдЕрдкрдиреЗ рдмрд╛рдХреА рд╣реЛрд╕реНрдЯ рд╡рд┐рдЬреЗрдЯ рдХреЗ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд┐рдирд╛ , рдореВрд▓реНрдп рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдиреЗ рдкрд░ рд╣реА

@rrousselGit

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рд╕реНрдкрдВрджрди рд╣реА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред

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

The main reason IMHO to use an AnimationBuilder or TweenAnimationBuilder or ValueListenableBuilder is that they rebuild only when the value changes, without rebuilding the rest of their host widget. It's a performance thing.

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

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

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

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

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

рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдореБрджрд╛рдп рдХреЛ TweenAnimationBuilder рдФрд░ ValueListenableBuilder рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рдиреЗ рдЬреИрд╕рд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ StatefulWidget рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИред

рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдкреВрдЫ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдкреНрд░рд╛рдердорд┐рдХ рд▓рд╛рднреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдЫреЛрдЯреЗ рдЫреЛрдЯреЗ рдШрдЯрдХреЛрдВ рдХреЛ рдЙрдзрд╛рд░ рджреЗрддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдореВрд▓рднреВрдд рдЯреБрдХрдбрд╝рд╛ рд░рдЦрддреЗ рд╣реИрдВ ...

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

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

"рдЬреЛ рд▓реЛрдЧ рдЗрд╕ рд╢реИрд▓реА рдХреЛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ" рдкрд░ рдПрдХ рдиреЛрдЯред рдпрджрд┐ рдЖрдк 3 рдУрд╡рд░рд░рд╛рдЗрдб рдФрд░ 15-30 рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рд╕рд╣реЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдкрдардиреАрдпрддрд╛ рдХреА рдЬреАрдд рд╣реЛрдЧреАред рдирд┐рд╖реНрдкрдХреНрд╖ рд░реВрдк рд╕реЗ рдЗрдореЛ рдмреЛрд▓ рд░рд╣рд╛ рд╣реВрдБред рдпрд╣ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ 2 рд╕рдВрдкреВрд░реНрдг рд╡рд░реНрдЧреЛрдВ рдХреЛ рднреА рдирд┐рд╖реНрдкрдХреНрд╖ рд░реВрдк рд╕реЗ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ (рдЪреАрдЬреЛрдВ рдХреЛ рдирд┐рдкрдЯрд╛рдирд╛ рднреВрд▓ рдЬрд╛рдирд╛, рдбреАрдкреАрдПрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рднреВрд▓ рдЬрд╛рдирд╛)ред

рднрдпрд╛рдирдХ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕рд╛рд╣рд┐рдд рд╣реВрдВ рдХрд┐ рдпрд╣ рдХрд╣рд╛рдВ рдЬрд╛рддрд╛ рд╣реИ, рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдпрд╣рд╛рдВ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛ :)

рдореБрдЭреЗ рдпрд╣ рдХрд╣рддреЗ рд╣реБрдП рдЦреЗрдж рд╣реИ рдХрд┐ рдпрд╣ рдзрд╛рдЧрд╛ рдореБрдЭреЗ рд╡рд╛рдкрд╕ рд╕реНрдкрдВрджрди рдореЗрдВ рдореЛрд╣рднрдВрдЧ рдХрд░ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдПрдХ рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░рддреЗ рд╕рдордп рдпреЛрдЬрдирд╛ рдереА рдЬрд┐рд╕ рдкрд░ рдореИрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореБрдЭреЗ рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ рднреА рдирд┐рд░рд╛рд╢рд╛ рд╣реЛрддреА рд╣реИ

рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рд╣реИ рдХрд┐ рд╕рднреА рдкреНрд░рдореБрдЦ рдШреЛрд╖рдгрд╛рддреНрдордХ рдврд╛рдВрдЪреЗ (рд░рд┐рдПрдХреНрдЯ, рд╡реАрдпреВ, рд╕реНрд╡рд┐рдлреНрдЯ рдпреВрдЖрдИ, рдЬреЗрдЯрдкреИрдХ рдХрдВрдкреЛрдЬрд╝) рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдпрд╛ рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛ рд╣реИред

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

рд▓рдЧрддрд╛ рд╣реИ (рдХрдо рд╕реЗ рдХрдо рдореЗрд░реЗ рд▓рд┐рдП) рдХрд┐ рдЗрд╕реЗ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рдирд╣реАрдВ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдореБрдЭреЗ рдЦреЗрдж рд╣реИ @ рд╣рд┐рдХреНрд╕реА , рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЗрд╕ рдЕрд░реНрде рдореЗрдВ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рдирд╣реАрдВ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: We understand the problem and want to solve it ред рдЕрдиреНрдп рдШреЛрд╖рдгрд╛рддреНрдордХ рдврд╛рдВрдЪреЗ рдХреА рддрд░рд╣ рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИред
рдПрдХ рдФрд░ рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рддрд░рд╣ рдХреА рдЪреАрдЬреЛрдВ рдкрд░ рдЗрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬреЗрдВ:

рдХреНрдпрд╛ рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ?
рдбреЗрд╡рд▓рдкрд░ рдХреЛ рд╣реБрдХ рд▓рд┐рдЦрдирд╛ рд╕реАрдЦрдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдПрдХ рдирдИ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИ, рдЗрддрдирд╛ рдХрдард┐рди

рдореБрдЭреЗ рджреБрдЦреА рдХрд░рддрд╛ рд╣реИред рдХреНрдпреЛрдВ рдХрднреА рдХреБрдЫ рд╕реБрдзрд╛рд░реЗрдВ рдпрд╛ рдмрджрд▓реЗрдВ? рдЖрдк рд╣рдореЗрд╢рд╛ рд╡рд╣ рддрд░реНрдХ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдЪрд╛рд╣реЗ рдХреБрдЫ рднреА рд╣реЛред рднрд▓реЗ рд╣реА рдПрдХ рдмрд╛рд░ рд╕реАрдЦрдиреЗ рдХреЗ рдмрд╛рдж рдирдП рд╕рдорд╛рдзрд╛рди рдмрд╣реБрдд рдЖрд╕рд╛рди рдФрд░ рд╕реБрдЦрдж рд╣реЛрдВред рдЖрдк рдЙрд╕ рдХрдерди рдХреЗ рд╣реБрдХ рдХреЛ рдХрдИ рдЪреАрдЬреЛрдВ рд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдореЗрд░реА рдорд╛рдБ 30 рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдорд╛рдЗрдХреНрд░реЛрд╡реЗрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрд╕ рддрд░рд╣ рдХреЗ рд╡рд╛рдХреНрдп рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддреА рдереАрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк "рд╣реБрдХ" рдХреЛ рд╡рд╛рдХреНрдп рдореЗрдВ "рд╕реНрдкрдВрджрди" рдпрд╛ "рдбрд╛рд░реНрдЯ" рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рд╡рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдХреНрдпрд╛ рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ?
рдпрд╣ рд╡рд╣реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд▓рд┐рдЦрдирд╛ рднреА рдЙрддрдирд╛ рд╣реА рдЖрд╕рд╛рди рд╣реИ, рдЬреЛ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИ

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ is it easier to write? (рдПрдХ рдмреВрд▓рд┐рдпрди рдЙрддреНрддрд░ рдкреНрд░рд╢реНрди) рдХреЗ рд╕рд╛рде @rrousselGit рдХрд╛ рдХреНрдпрд╛ false / undefined ред

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

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

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

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

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

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

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

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

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

@ рдЗрдореИрдиреБрдПрд▓-рд▓реБрдВрдбрдореИрди

рд▓рдЧрддрд╛ рд╣реИ (рдХрдо рд╕реЗ рдХрдо рдореЗрд░реЗ рд▓рд┐рдП) рдХрд┐ рдЗрд╕реЗ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рдирд╣реАрдВ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдореБрдЭреЗ рдЦреЗрдж рд╣реИ @ рд╣рд┐рдХреНрд╕реА , рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЗрд╕ рдЕрд░реНрде рдореЗрдВ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рдирд╣реАрдВ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: We understand the problem and want to solve it ред рдЕрдиреНрдп рдШреЛрд╖рдгрд╛рддреНрдордХ рдврд╛рдВрдЪреЗ рдХреА рддрд░рд╣ рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИред

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

@szotp

рдлрд┐рд░ рднреА, рдореБрдЭреЗ рдпрд╣ рдЖрднрд╛рд╕ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдлрд╝реНрд▓рдЯрд░ рдЯреАрдо рдореЗрдВ рдХрд┐рд╕реА рдиреЗ рднреА рд╕реНрд╡рд┐рдлреНрдЯрдпреВрдЖрдИ рдкрд░ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдирдЬрд╝рд░ рдирд╣реАрдВ рдбрд╛рд▓реА, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реА рдЪрд┐рдВрддрд╛рдУрдВ рдХреЛ рдЕрдиреНрдпрдерд╛ рд╕рдордЭрдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдврд╛рдВрдЪреЗ рдХреА рдХрдИ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрдЧрд╣ рд╣реИред рдПрдорд╡реАрд╕реА-рд╕реНрдЯрд╛рдЗрд▓, рд░рд┐рдПрдХреНрдЯ-рд╕реНрдЯрд╛рдЗрд▓, рд╕реБрдкрд░ рдЯрд░реНрд╕ рдЬрд╛рджреБрдИ, рдЬрд╛рджреВ-рдореБрдХреНрдд рд▓реЗрдХрд┐рди рд╡рд░реНрдмреЛрдЬрд╝ ... рдлрд╝реНрд▓рдЯрд░ рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдлрд╛рдпрджреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рдкреЛрд░реНрдЯреЗрдмрд┐рд▓рд┐рдЯреА рдкрд╣рд▓реВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдврд╛рдВрдЪреЗ рд╕реЗ рдЕрд▓рдЧ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рд╕рднреА рдЯреВрд▓рд┐рдВрдЧ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдирд╛ рд╕рдВрднрд╡ рд╣реИ - рдХреНрд░реЙрд╕ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рд╕рдкреЛрд░реНрдЯ, рд╣реЙрдЯ рд░реАрд▓реЛрдб, рдЖрджрд┐ - рд▓реЗрдХрд┐рди рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирдпрд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдмрдирд╛рдПрдВред (рдЕрдиреНрдп рд╕реНрдкрдВрджрди рдврд╛рдВрдЪреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП flutter_sprites, рдкрд╣рд▓реЗ рд╕реЗ рд╣реАред) рдЗрд╕реА рддрд░рд╣ рдврд╛рдВрдЪреЗ рдХреЛ рдПрдХ рд╕реНрддрд░рд┐рдд рдлреИрд╢рди рдореЗрдВ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдк рд╣рдорд╛рд░реЗ рд╕рднреА рд░реЗрдВрдбрд░рдСрдмреНрдЬреЗрдХреНрдЯ рддрд░реНрдХ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВ рд▓реЗрдХрд┐рди рд╡рд┐рдЬреЗрдЯ рдкрд░рдд рдХреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд╕рд╛рде, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рд╡рд░реНрдмреЛрд╕рд┐рдЯреА рдХреА рд╡рд░реНрдмреЛрд╕рд┐рдЯреА рд╡рд┐рдЬреЗрдЯ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИрдВ, рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рд╡реИрдХрд▓реНрдкрд┐рдХ рдврд╛рдВрдЪрд╛ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкреИрдХреЗрдЬрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рд╣реИ рддрд╛рдХрд┐ рдХрд┐рд╕реА рднреА рдореМрдЬреВрджрд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЛрдб рдХреЛ рдЦреЛрдП рдмрд┐рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХреЗред

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


рдореИрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рд╕реЗ рдПрдХ рдРрдк рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП @TimWhiting рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдЖрдЧреНрд░рд╣ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХреЛрдб рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдЖрдЬ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ рдЬрдм рдЖрдк рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ (https://github.com/TimWhiting/local_widget_state_approaches)ред рдпрд╣ рд╕реАрдзреЗ рддреМрд░ рдкрд░ рд╣рдореЗрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕реНрддрд╛рд╡ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ рдЬреЛ рдХрд┐ рдпрд╣рд╛рдВ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рд╡рд╛рд▓реЗ _all_ рдХреА рдЬрд░реВрд░рддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ (рдЙрди рд▓реЛрдЧреЛрдВ рд╕рд╣рд┐рдд рдЬреЛ рд╣реБрдХ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЬреЛ рд╣реБрдХ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ)ред

рдпрд╣ рд╕рдордЭрдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрддрдирд╛ рдХрдард┐рди рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ "_a рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЪреАрдиреА рдЬреЛ рдмрд┐рд▓реНрдбрд░реЛрдВ рдХреЛ рд╕рдорддрд▓ рдХрд░рддреА рд╣реИ рдФрд░ рдЗрд╕ рдмрд╛рдд рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ рдХрд┐ рдмрд┐рд▓реНрдбрд░ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред_" рдкреНрд░рдердо рд╢реНрд░реЗрдгреА рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрд╡реЛрдВ рджреНрд╡рд╛рд░рд╛ рд╡рд╛рдВрдЫрд┐рдд рд╣реИред рд╣рдордиреЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЗ рд╕рд╛рде рдореБрджреНрджреЛрдВ рдХреЛ рдмрд╛рд░-рдмрд╛рд░ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд┐рдпрд╛ рд╣реИред

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдмрд┐рд▓реНрдбрд░реНрд╕ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкрдврд╝рдирд╛ рдФрд░ рд▓рд┐рдЦрдирд╛ рдХрдард┐рди рд╣реЛрддрд╛ рд╣реИред "рд╕рдорд╕реНрдпрд╛" рдмрд╕ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдмрд┐рд▓реНрдбрд░ рдЬреИрд╕реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдкрдврд╝рдиреЗ рдореЗрдВ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реЛред

рдХреЛрдИ рднреА рдРрдк рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рджрд┐рдЦрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрджрд┐ рдЖрдк рдореВрд▓ рд░реВрдк рд╕реЗ рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рдирд╣реАрдВ рд╣реИрдВ рдХрд┐ 3 рдиреЗрд╕реНрдЯреЗрдб рдмрд┐рд▓реНрдбрд░реЛрдВ рдХреЛ рдкрдврд╝рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдпрд╛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдмрд┐рд▓реНрдбрд░реНрд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдб-рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреА рдкреВрд░реНрддрд┐ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╕реБрдирдирд╛ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рд╣рдо рдореЗрдВ рд╕реЗ рдмрд╣реБрдд рд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдШреЛрдВрд╕рд▓реЗ рдореЗрдВ рдХрдЯреМрддреА рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкреВрд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдХреЛрдб рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░рдирд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдо 2 рдЧреИрд░-рдЖрджрд░реНрд╢ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдмреАрдЪ рдлрдВрд╕ рдЧрдП рд╣реИрдВред

рдореИрдВрдиреЗ рдЗрд╕ рд╕рдкреНрддрд╛рд╣ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рдордп рдХреЗ рд╕рдЪрдореБрдЪ рдШрдВрдЯреЗ рдмрд┐рддрд╛рдП рд╣реИрдВ, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ Google рдХреЗ рдХрдИ рдШрдВрдЯреЛрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реБрдП, рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реБрдП, рдФрд░ рдЬреЛ рд╣рдо рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЙрд╕реЗ рдареАрдХ рд╕реЗ рдирд┐рдХрд╛рд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдореИрдВ рдЙрд╕рдХреЗ рд▓рд┐рдП рдЖрднрд╛рд░реА рд╣реВрдБ

рдХреГрдкрдпрд╛ рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реИ, рдЗрд╕ рдкрд░ рд╕рдордЭ рдХреА рдХрдореА рдХреЛ рднреНрд░рдорд┐рдд рди рдХрд░реЗрдВ

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

рдореЗрд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдФрд░ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╕реНрддреГрдд рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдШрдВрдЯреЛрдВ рдмрд┐рддрд╛рдП, рд▓реЗрдХрд┐рди рдореЗрд░реА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рдлрд┐рд░ рд╕реЗ рд╡рд╣реА рд╕рд╡рд╛рд▓ рдкреВрдЫрд╛ рдЧрдпрд╛ред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд░реНрддрдорд╛рди рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХреА рдкрдардиреАрдпрддрд╛ рдХреА рдХрдореА рдЪрд░реНрдЪрд╛ рдХреЗ рдХреЗрдВрджреНрд░ рдореЗрдВ рд╣реИред
рдореИрдВрдиреЗ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрдардиреАрдпрддрд╛ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдХрдИ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдП:

рдЗрди рд╡рд┐рд╢реНрд▓реЗрд╖рдгреЛрдВ рдореЗрдВ рдХреА рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдВрдЦреНрдпрд╛ рд╣реИ рдФрд░ рдЕрдиреНрдп рд▓реЛрдЧ рд╕рд╣рдордд рдкреНрд░рддреАрдд рд╣реЛрддреЗ рд╣реИрдВ

рдФрд░ рдлрд┐рд░ рднреА рдЖрдкрдХреЗ рд╣рд╛рд▓ рдХреЗ рдЙрддреНрддрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдХреЛрдИ рдкрдардиреАрдпрддрд╛ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ: https://github.com/flutter/flutter/issues/51752#issuecomment -671009593

рдЖрдкрдиреЗ рдпрд╣ рднреА рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛:

Widget build(context) {
  var result = Text('result:');
  var builder1 = (BuildContext context, AsyncSnapshot<int> snapshot) {
    return Row(children: [result, Text(snapshot.data)]);
  };
  result = StreamBuilder(stream: _stream1, builder: builder1);
  var builder2 = (BuildContext context, AsyncSnapshot<int> snapshot) {
    return Column(children: [result, Text(snapshot.data)]);
  };
  result = StreamBuilder(stream: _stream2, builder: builder2);
}

рдпрд╣ рдЬрд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдпрд╣ рдкрдврд╝рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ

рдЗрди рджреЛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рд╕реЗ рд╣рдо рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐:

  • рд╣рдо рдЕрд╕рд╣рдордд рд╣реИрдВ рдХрд┐ рдПрдХ рдкрдардиреАрдпрддрд╛ рдореБрджреНрджрд╛ рд╣реИ
  • рдпрд╣ рдЕрднреА рднреА рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдкрдардиреАрдпрддрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рджрд╛рдпрд░реЗ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ

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

@ рд╣рд┐рдХреНрд╕реА рдзрдиреНрдпрд╡рд╛рдж, рдпрд╣ рдЖрдкрдХреА рдмрд╛рдд рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдмрд╣реБрдд рдорджрдж рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рд╡реЗ рдХреЛрдб рдЬрд╛рджреВ рдХреЗ рд╕рд╛рде рдУрд╡рд░рдмреЛрд░реНрдб рдЧрдП рд╣реЛрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ рдЙрдиреНрд╣реЗрдВ рд╕рд╣реА рд▓рдЧреАрдВред

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

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

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

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ flutter generate рдЕрдЪреНрдЫреА рджрд┐рд╢рд╛ рдореЗрдВ рдПрдХ рдХрджрдо рдерд╛, рд╢рд░реНрдо рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рдЗрд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдЧрд▓реЗ рд╕реНрдкрдВрджрди рдбреЗрд╡рд▓рдкрд░ рд╕рд░реНрд╡реЗрдХреНрд╖рдг рдореЗрдВ рдкреВрдЫрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рджрд┐рд▓рдЪрд╕реНрдк рд╕рд╡рд╛рд▓ рд╣реЛрдЧрд╛ред

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

рдПрдХ рдмрд╛рд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдиреЗ рдкрд░, рдпрд╣ рдмрд╛рддрдЪреАрдд рдЕрдзрд┐рдХ рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ рдФрд░ рд╕рдореГрджреНрдз рд╣реЛрдЧреА

рдореЗрд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдФрд░ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╕реНрддреГрдд рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдШрдВрдЯреЛрдВ рдмрд┐рддрд╛рдП, рд▓реЗрдХрд┐рди рдореЗрд░реА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рдлрд┐рд░ рд╕реЗ рд╡рд╣реА рд╕рд╡рд╛рд▓ рдкреВрдЫрд╛ рдЧрдпрд╛ред

рдЕрдЧрд░ рдореИрдВ рд╡рд╣реА рд╕рд╡рд╛рд▓ рдкреВрдЫ рд░рд╣рд╛ рд╣реВрдВ рддреЛ рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдЬрд╡рд╛рдм рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖ рд░рд╣реЗ рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдкрдиреА рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдирд╛ (https://github.com/flutter/flutter/issues/51752#issuecomment-670959424):

рдмрд╣рд╕ рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реИ:

Widget build(context) {
  return ValueListenableBuilder<String>(
    valueListenable: someValueListenable,
    builder: (context, value, _) {
      return StreamBuilder<int>(
        stream: someStream,
        builder: (context, value2) {
          return TweenAnimationBuilder<double>(
            tween: Tween(...),
            builder: (context, value3) {
              return Text('$value $value2 $value3');
            },
          );
        },
      );
    },
  );
}

рдпрд╣ рдХреЛрдб рдкрдардиреАрдп рдирд╣реАрдВ рд╣реИред

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

рдпрд╣ рдЕрдкрдардиреАрдп рдХреНрдпреЛрдВ рд╣реИ?

рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЖрдк рдЗрд╕реЗ рдЕрдкрдардиреАрдп рдкрд╛рддреЗ рд╣реИрдВ, рдореИрдВ рдпрд╣ рдХрд╣рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдЧрд▓рдд рд╣реИрдВред рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХреНрдпреЛрдВред

рд╣рдо рдПрдХ рдирдпрд╛ рдХреАрд╡рд░реНрдб рдкреЗрд╢ рдХрд░рдХреЗ рдкрдардиреАрдпрддрд╛ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдЗрд╕рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ:

Widget build(context) {
  final value = keyword ValueListenableBuilder(valueListenable: someValueListenable);
  final value2 = keyword StreamBuilder(stream: someStream);
  final value3 = keyword TweenAnimationBuilder(tween: Tween(...));

  return Text('$value $value2 $value3');
}

рдпрд╣ рдХреЛрдб рдХрд╛рдлреА рдЕрдзрд┐рдХ рдкрдардиреАрдп рд╣реИ, рд╣реБрдХ рд╕реЗ рдЕрд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдФрд░ рдЗрд╕рдХреА рд╕реАрдорд╛рдУрдВ рд╕реЗ рдЧреНрд░рд╕реНрдд рдирд╣реАрдВ рд╣реИред

рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрдо рдХреНрд░рд┐рдпрд╛ рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХрдо рд╕реЗ рдХрдо рдореЗрд░реЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рдкрдардиреАрдп рд╣реИред рдЕрдзрд┐рдХ рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдВ рд╣реИрдВ (рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд┐рдЬреЗрдЯ рдФрд░ рдпрд╣ "рдХреАрд╡рд░реНрдб" рд╕реБрд╡рд┐рдзрд╛ рджреЛрдиреЛрдВ рд╣реИрдВ); рдЕрдзрд┐рдХ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХрд╛ рдЕрд░реНрде рд╣реИ рдЕрдзрд┐рдХ рд╕рдВрдЬреНрдЮрд╛рдирд╛рддреНрдордХ рднрд╛рд░ред (рдпрд╣ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдХрдо рдХреБрд╢рд▓ рднреА рд╣реИ, рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд┐рддрдиреЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВ; рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрджрд┐ рдПрдиреАрдореЗрд╢рди рд╣рдореЗрд╢рд╛ рдореВрд▓реНрдп рд╕реБрдирдиреЗ рдпреЛрдЧреНрдп рдФрд░ рд╕реНрдЯреНрд░реАрдо рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ рдЕрдм рд╣рдо ValueListenableBuilder рдФрд░ StreamBuilder рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рднрд▓реЗ рд╣реА рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ ; рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рд▓реЙрдЬрд┐рдХ рдХреЛ рднреА рдЕрдм рджрд░реНрдЬ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рд╣рд░ рдмрд┐рд▓реНрдб рдХреЛ рдЫреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред)

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

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

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

рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрд╕рд╛рди рдХреЛрдб рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреА рдЗрдЪреНрдЫрд╛ рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЛ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рдкрдардиреАрдпрддрд╛ рдореЗрдВ рддреБрд▓рдирд╛ рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реИ?

Widget build(context) {
  return
    ValueListenableBuilder(valueListenable: someValueListenable, builder: (context, value, _) =>
    StreamBuilder(stream: someStream, builder: (context, value2) =>
    TweenAnimationBuilder(tween: Tween(...), builder: (context, value3) =>
    Text('$value $value2 $value3'),
  )));
}

@szotp рдпрджрд┐ рд╣рдорд╛рд░реЗ рд╡рд░реНрддрдорд╛рди рдХреЛрдбрдЬрди рд╕рдорд╛рдзрд╛рди рдХреЗ рдЖрд╕рдкрд╛рд╕ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдШрд░реНрд╖рдг рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рд╡рд╣рд╛рдВ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдмрдЧ рдлрд╛рдЗрд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдВрдХреЛрдЪ рди рдХрд░реЗрдВред

@jamesblasco рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕рдореЗрдВ рдХреЛрдИ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд▓реЛрдЧ рд╣рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдореЗрд░реЗ рд▓рд┐рдП рдкреНрд░рд╢реНрди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд╣ рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реИ, рддрд╛рдХрд┐ рд╣рдо рд╕рдорд╛рдзрд╛рди рддреИрдпрд╛рд░ рдХрд░ рд╕рдХреЗрдВред

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

рд╣рдореЗрдВ рдкрд╣рд▓реЗ рдЗрд╕ рдмрд╛рдд рдкрд░ рд╕рд╣рдордд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реИред рдпрджрд┐ рд╣рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдо рдЕрдиреНрдп рд╡рд┐рд╖рдпреЛрдВ рдкрд░ рдХреИрд╕реЗ рд╕рд╣рдордд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рд╣рд┐рд╕реНрд╕рд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЖрдк рдХреЛрдб рдХрд░рддреЗ рд╣реИрдВ рд╡рд╣ рдЬреНрдпрд╛рджрд╛рддрд░ рд▓реЛрдЧреЛрдВ рдХреЗ рдХреЛрдб рд╕реЗ рдХрд╛рдлреА рдЕрд▓рдЧ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдкрдВрджрди рдФрд░ рдРрдк рдЙрджрд╛рд╣рд░рдг рдЖрдкрдиреЗ рджреЛрдиреЛрдВ рдХреЛ рджрд┐рдпрд╛:

  • dartfmt рдХрд╛ рдкреНрд░рдпреЛрдЧ рди рдХрд░реЗрдВ
  • рд╣рдореЗрд╢рд╛_рдирд┐рд░реНрджрд┐рд╖реНрдЯ_рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

рдХреЗрд╡рд▓ рдЗрди рджреЛ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд╕рд╛рде, рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реЛрдЧрд╛ рдпрджрд┐ рдпрд╣ рд╕рдореБрджрд╛рдп рдХреЗ 1% рд╕реЗ рдЕрдзрд┐рдХ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред

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

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

рдпрд╣ рдЕрдкрдардиреАрдп рдХреНрдпреЛрдВ рд╣реИ?

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

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

рдХреНрдпрд╛ рд░реИрдЦрд┐рдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдпрд╛ рдиреЗрд╕реНрдЯреЗрдб рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЙрддреНрддрд░ рдЦреЛрдЬрдирд╛ рдЖрд╕рд╛рди рд╣реИ?

рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм:

  • рдЗрд╕ рдирд┐рд░реНрдорд╛рдг рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛ рдЧреИрд░-рдмрд┐рд▓реНрдбрд░ рд╡рд┐рдЬреЗрдЯ рдХреНрдпрд╛ рд╣реИ?
  • рдЪрд░ bar рдХреМрди рдмрдирд╛рддрд╛ рд╣реИ?
  • рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрд┐рддрдиреЗ рдмрд┐рд▓реНрдбрд░ рд╣реИрдВ?

рдмрд┐рд▓реНрдбрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛:

 рд╡рд┐рдЬреЗрдЯ рдирд┐рд░реНрдорд╛рдг (рд╕рдВрджрд░реНрдн) {
 рд╡рд╛рдкрд╕реА ValueListenableBuilder(
 valueListenable: someValueListenable,
 рдирд┐рд░реНрдорд╛рддрд╛: (рд╕рдВрджрд░реНрдн, рдлреВ, _) {
 рд░рд┐рдЯрд░реНрди рд╕реНрдЯреНрд░реАрдордмрд┐рд▓реНрдбрд░(
 рд╕реНрдЯреНрд░реАрдо: рдХреБрдЫ рд╕реНрдЯреНрд░реАрдо,
 рдмрд┐рд▓реНрдбрд░: (рд╕рдВрджрд░реНрдн, рдмрд╛рдЬ) {
 рд╡рд╛рдкрд╕реА рдЯреНрд╡реАрдирдПрдиреАрдореЗрд╢рдирдмрд┐рд▓реНрдбрд░(
 рдмреАрдЪ: рдмреАрдЪ (...),
 рдирд┐рд░реНрдорд╛рддрд╛: (рд╕рдВрджрд░реНрдн, рдмрд╛рд░) {
 рд╡рд╛рдкрд╕реА рдХрдВрдЯреЗрдирд░ ();
 },
 );
 },
 );
 },
 );
 }

рдПрдХ рд░реИрдЦрд┐рдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛:

 рд╡рд┐рдЬреЗрдЯ рдирд┐рд░реНрдорд╛рдг (рд╕рдВрджрд░реНрдн) {
 рдЕрдВрддрд┐рдо рдлреВ = рдХреАрд╡рд░реНрдб ValueListenableBuilder (valueListenable: someValueListenable);
 рдЕрдВрддрд┐рдо рдмрд╛рд░ = рдХреАрд╡рд░реНрдб рд╕реНрдЯреНрд░реАрдордмрд┐рд▓реНрдбрд░ (рд╕реНрдЯреНрд░реАрдо: рдХреБрдЫрд╕реНрдЯреНрд░реАрдо);
 рдЕрдВрддрд┐рдо рдмрд╛рдЬрд╝ = рдХреАрд╡рд░реНрдб рдЯреНрд╡реАрдирдПрдиреАрдореЗрд╢рдирдмрд┐рд▓реНрдбрд░ (рдЯреНрд╡реАрди: рдЯреНрд╡реАрди (...));

рд╡рд╛рдкрд╕реА рдЫрд╡рд┐ (); }


рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореБрдЭреЗ рдЙрддреНрддрд░ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдиреЗрд╕реНрдЯреЗрдб рдХреЛрдб рдХреЛ рджреЗрдЦрдиреЗ рдореЗрдВ рдХрдард┐рдирд╛рдИ рд╣реЛрддреА рд╣реИред
рджреВрд╕рд░реА рдУрд░, рд░реИрдЦрд┐рдХ рдкреЗрдбрд╝ рдХреЗ рд╕рд╛рде рдЙрддреНрддрд░ рдЦреЛрдЬрдирд╛ рддрд╛рддреНрдХрд╛рд▓рд┐рдХ рд╣реИ

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

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

рдЗрд╕ рддрдереНрдп рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рдЙрджрд╛рд╣рд░рдг рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдореБрдЭреЗ рдпрд╣ рд╕рдордЭрд╛рдиреЗ рдореЗрдВ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдпрд╣ рдкрдардиреАрдп рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рдореВрд▓реНрдпрд╡рд╛рди рд╣реЛрдЧрд╛?

``` рдбрд╛рд░реНрдЯ
рд╡рд┐рдЬреЗрдЯ рдирд┐рд░реНрдорд╛рдг (рд╕рдВрджрд░реНрдн) {
рд╡рд╛рдкрд╕реА
ValueListenableBuilder(valueListenable: someValueListenable, рдирд┐рд░реНрдорд╛рддрд╛: (рд╕рдВрджрд░реНрдн, рдорд╛рди, _) =>
рд╕реНрдЯреНрд░реАрдордмрд┐рд▓реНрдбрд░ (рд╕реНрдЯреНрд░реАрдо: рдХреБрдЫрд╕реНрдЯреНрд░реАрдо, рдмрд┐рд▓реНрдбрд░: (рд╕рдВрджрд░реНрдн, рдорд╛рди 2) =>
рдЯреНрд╡реАрдирдПрдиреАрдореЗрд╢рдирдмрд┐рд▓реНрдбрд░ (рдЯреНрд╡реАрди: рдЯреНрд╡реАрди (...), рдмрд┐рд▓реНрдбрд░: (рд╕рдВрджрд░реНрдн, рдорд╛рди 3) =>
рдЯреЗрдХреНрд╕реНрдЯ ('$value $value2 $value3'),
)));
}

рдпрд╣ рдмреЗрд╣рддрд░ рджрд┐рдЦрддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдпрд╣ рдорд╛рдирд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рд▓реЛрдЧ dartfmt . рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ

рдбрд╛рд░реНрдЯрдлрдПрдордЯреА рдХреЗ рд╕рд╛рде, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИ:

Widget build(context) {
  return ValueListenableBuilder(
      valueListenable: someValueListenable,
      builder: (context, value, _) => StreamBuilder(
          stream: someStream,
          builder: (context, value2) => TweenAnimationBuilder(
                tween: Tween(),
                builder: (context, value3) => Text('$value $value2 $value3'),
              )));
}

рдЬреЛ рдореВрд▓ рдХреЛрдб рд╕реЗ рд▓рдЧрднрдЧ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИред

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

рдпрд╣ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рд╣реИред
рддрддреНрд╡ рд╣реЛрдиреЗ рдпрд╛ рди рд╣реЛрдиреЗ рдХрд╛ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рддрддреНрд╡ рд╣реЛрдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рд╣рдо LayoutBuilder рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ GestureDetector рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХреЗрдВред

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

  • useIsHovered - рдПрдХ рдмреВрд▓рд┐рдпрди рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╡рд┐рдЬреЗрдЯ рд╣реЛрд╡рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
  • useSize - (рд╢рд╛рдпрдж рд╕реНрдкрдВрджрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП) рдЬреЛ рд╕рдВрдмрдВрдзрд┐рдд UI рдХрд╛ рдЖрдХрд╛рд░ рджреЗрддрд╛ рд╣реИред

(рдпрд╣ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдХрдо рдХреБрд╢рд▓ рднреА рд╣реИ, рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд┐рддрдиреЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВ; рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрджрд┐ рдПрдиреАрдореЗрд╢рди рд╣рдореЗрд╢рд╛ рдореВрд▓реНрдп рд╕реБрдирдиреЗ рдпреЛрдЧреНрдп рдФрд░ рд╕реНрдЯреНрд░реАрдо рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ рдЕрдм рд╣рдо ValueListenableBuilder рдФрд░ StreamBuilder рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рднрд▓реЗ рд╣реА рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ ; рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рд▓реЙрдЬрд┐рдХ рдХреЛ рднреА рдЕрдм рджрд░реНрдЬ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рд╣рд░ рдмрд┐рд▓реНрдб рдХреЛ рдЫреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред)

рдпрд╣ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╛рдзрд╛рди рдХреИрд╕реЗ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрджрд┐ рд╣рдо рднрд╛рд╖рд╛ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд╣реАрдВ рд╣реЛрдЧреАред

рд╣рдо рдЗрд╕реЗ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:

Widget build(context) {
  final value = keyword ValueListenableBuilder(valueListenable: someValueListenable);
  final value2 = keyword StreamBuilder(stream: someStream);
  final value3 = keyword TweenAnimationBuilder(tween: Tween(...));

  return Text('$value $value2 $value3');
}

рдЗрд╕рдореЗрдВ "рд╕рдВрдХрд▓рд┐рдд" рдХрд░реЗрдВ:

Widget build(context) {
  return ValueListenableBuilder<String>(
    valueListenable: someValueListenable,
    builder: (context, value, _) {
      return StreamBuilder<int>(
        stream: someStream,
        builder: (context, value2) {
          return TweenAnimationBuilder<double>(
            tween: Tween(...),
            builder: (context, value3) {
              return Text('$value $value2 $value3');
            },
          );
        },
      );
    },
  );
}

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

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

рдпрд╣ рдЕрд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рднреА рд╣реБрдХреЛрдВ рдХрд╛ рдкреБрдирд░реНрдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдирд╛ рддреЗрдЬ рд╣реЛред рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╣реБрдХ рдбрд┐рдЬрд╛рдЗрди рдХрд░рддреЗ рд╕рдордп рд╡реЗ рдЬрд┐рд╕ рд░рд┐рдПрдХреНрдЯ рдЯреАрдо рдХреЗ рд╕рд╛рде рдЖрдП рдереЗ, рд╡рд╣ рдпрд╣реА рдирд┐рд╖реНрдХрд░реНрд╖ рдерд╛ред
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдлрд╝реНрд▓рдЯрд░ рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣ рдЕрдкрдардиреАрдп рдХреНрдпреЛрдВ рд╣реИ?

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

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

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

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

рдпрд╛ рдпреЛрдВ рдХрд╣реЗрдВ, рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд▓реЛрдЧ рдкрдардиреАрдпрддрд╛ рдкрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд░рдЦрд░рдЦрд╛рд╡ рдкрд░ рдХрдоред

рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрдо рдкрдардиреАрдп рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдб рдХрд╛ __рдЗрд░рд╛рджрд╛__ рдХрдо рд╕реНрдкрд╖реНрдЯ рд╣реИ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдЪрд┐рдВрддрд╛рдУрдВ рдХреЛ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рдЫрд┐рдкрд╛рдП рдЬрд╛рдиреЗ рд╕реЗ рдЗрд╕реЗ рдмрдирд╛рдП рд░рдЦрдирд╛ рдХрдард┐рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред


final value = keyword ValueListenableBuilder(valueListenable: someValueListenable);

рдореВрд▓реНрдп рднреА рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдПрдХ рд╡рд┐рдЬреЗрдЯ? рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЪрд░? рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ a . рдХреЗ рдЕрдВрджрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
return Text('$value $value2 $value3');

рдореВрд▓ рд░реВрдк рд╕реЗ рдЖрдк рдЬреЛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рд╡рд┐рдЬреЗрдЯ рдмреА рдХреА рдирд┐рд░реНрдорд╛рдг рд╡рд┐рдзрд┐ рдореЗрдВ рдЪрд░ рдП рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдХреЗ, рдЬрдм рднреА рдП рдХрд╛ рдорд╛рди рдмрджрд▓рддрд╛ рд╣реИ рддреЛ рдмреА рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдпрд╣реА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ mobx рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдареАрдХ рд╕рд╣реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЬрд╛рджреВ/рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рдХрд░рддрд╛ рд╣реИред


final value2 = keyword StreamBuilder(stream: someStream);

рдпрд╣ рдХреНрдпрд╛ рд▓реМрдЯрдирд╛ рдЪрд╛рд╣рд┐рдП? рдПрдХ рд╡рд┐рдЬреЗрдЯ? рдПрдХ рдзрд╛рд░рд╛? рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдорд╛рди?

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

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


final value3 = keyword TweenAnimationBuilder(tween: Tween(...));

"рдЯреНрд╡реАрдирдПрдиреАрдореЗрд╢рдирдмрд┐рд▓реНрдбрд░" рдирд╛рдордХ рдПрдХ рд╡рд░реНрдЧ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реМрдЯрд╛ рд░рд╣рд╛ рд╣реИ ?! рдореИрдВ рдкрд╛рд╕ рднреА рдирд╣реАрдВ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдПрдХ рднрдпрд╛рдирдХ рд╡рд┐рдЪрд╛рд░ рдХреНрдпреЛрдВ рд╣реИред

рдЗрдВрдбреЗрдВрдЯ/рдкрдардиреАрдпрддрд╛ рдореЗрдВ рдХреЛрдИ рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИ:

Future<double> future;

AsyncSnapshot<double> value = keyword FutureBuilder<double>(future: future);

рддрдерд╛:

Future<double> future;

double value = await future;

рджреЛрдиреЛрдВ рдПрдХ рд╣реА рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ: рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЛ рд╕реБрдирдирд╛ рдФрд░ рдЙрд╕рдХреЗ рдореВрд▓реНрдп рдХреЛ рдЦреЛрд▓рдирд╛ред

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

рд╡рд╛рджрд╛/рднрд╡рд┐рд╖реНрдп рдХреА рдЬрдВрдЬреАрд░реЛрдВ рдкрд░ рднреА рдпрд╣реА рддрд░реНрдХ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

foo().then(x =>
  bar(x).then(y =>
    baz(y).then(z =>
      qux(z)
    )
  )
)

рдмрдирд╛рдо

let x = await foo();
let y = await bar(x);
let z = await baz(y);
await qux(z);

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

"рдЯреНрд╡реАрдирдПрдиреАрдореЗрд╢рдирдмрд┐рд▓реНрдбрд░" рдирд╛рдордХ рдПрдХ рд╡рд░реНрдЧ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реМрдЯрд╛ рд░рд╣рд╛ рд╣реИ ?! рдореИрдВ рдкрд╛рд╕ рднреА рдирд╣реАрдВ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдПрдХ рднрдпрд╛рдирдХ рд╡рд┐рдЪрд╛рд░ рдХреНрдпреЛрдВ рд╣реИред

рдЖрдк рд╡рд╛рджреЗ/рд╡рд╛рдпрджрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╣реА рддрд░реНрдХ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ await рдЗрд╕ рддрдереНрдп рдХреЛ рдЕрд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╡рд╛рджрд╛ рджреЗрддрд╛ рд╣реИред

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

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

Widget build(context) {
  return ValueListenableBuilder<String>(
    valueListenable: someValueListenable,
    builder: (context, value, _) {
      return StreamBuilder<int>(
        stream: someStream,
        builder: (context, value2) {
          return TweenAnimationBuilder<double>(
            tween: Tween(...),
            builder: (context, value3) {
              return Text('$value $value2 $value3');
            },
          );
        },
      );
    },
  );
}

рдЗрд╕рд╕реЗ рдХрд╛рдлреА рдХрдо рдкрдардиреАрдп рд╣реИ:

Widget build(context) {
  final value = keyword ValueListenableBuilder(valueListenable: someValueListenable);
  final value2 = keyword StreamBuilder(stream: someStream);
  final value3 = keyword TweenAnimationBuilder(tween: Tween(...));

  return Text('$value $value2 $value3');
}

рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реНрд╡рдпрдВ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ @Hixie рдФрд░ @Rudiksz рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рдЖрд╢реНрд╡рд╕реНрдд рдирд╣реАрдВ рд╣реИрдВ (рдпрд╛ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рд╡рд┐рд░реЛрдз рдХрд░ рд░рд╣реЗ рд╣реИрдВ) рдХрд┐ рджреВрд╕рд░рд╛ рдкрд╣рд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдардиреАрдп рд╣реИред

рддреЛ рджреВрд╕рд░рд╛ рдХреЛрдб рдмреНрд▓реЙрдХ рдкрд╣рд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдардиреАрдп рдХреНрдпреЛрдВ рд╣реИ, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░рд╛ рдмреНрд░реЗрдХрдбрд╛рдЙрди (рдЬреЛ рднреА рдЫреЛрдЯреА рд░рд╛рд╢рд┐ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ) рд╣реИ:

1. рдкрд╣рд▓рд╛ рдХреЛрдб рдмреЙрдХ рджреВрд╕рд░реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╛рдлреА рдЕрдзрд┐рдХ рдЗрдВрдбреЗрдВрдЯ рд╣реИ

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


рджреВрд╕рд░реЗ рдХреЛрдб рдмреНрд▓реЙрдХ рдореЗрдВ, рдХреЛрдИ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред

2. рдкрд╣рд▓реЗ рдХреЛрдб рдмреНрд▓реЙрдХ рдХреЛ рдЕрдкрдиреЗ рдЗрд░рд╛рджреЗ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ

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


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

3. рдкрд╣рд▓рд╛ рдХреЛрдб рдмреНрд▓реЙрдХ рдиреЗрд╕реНрдЯрд┐рдВрдЧ рдХреЗ рд╕рдмрд╕реЗ рдЧрд╣рд░реЗ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ build рдкрджреНрдзрддрд┐ рдХреЗ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рднрд╛рдЧ рдХреЛ рдЫреБрдкрд╛рддрд╛ рд╣реИ

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


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

рдиреЗрд╕реНрдЯрд┐рдВрдЧ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, _tree_ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдиреЗрд╕реНрдЯрд┐рдВрдЧ рдФрд░ _sequence_ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдиреЗрд╕реНрдЯрд┐рдВрдЧ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рд╣реИред

рд╕рд╛рдорд╛рдиреНрдп View -> Text рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╢рд┐рдХрд╛рд░ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдФрд░ рдЗрд╕ рддрд░рд╣, рдШреЛрдВрд╕рд▓рд╛ рдмрдирд╛рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реНрдХреНрд░реАрди рдкрд░ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рд╕рдВрдмрдВрдзреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдмрд┐рд▓реНрдбрд░реНрд╕ рдХреЗ рдиреЗрд╕реНрдЯрд┐рдВрдЧ (рд░рд┐рдПрдХреНрдЯ рдореЗрдВ рдЙрд░реНрдл тАЛтАЛ"рд░реЗрдВрдбрд░ рдкреНрд░реЙрдкреНрд╕") рдпрд╛ рд╡рд╛рджреЛрдВ рдХреЗ рдиреЗрд╕реНрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде, рдиреЗрд╕реНрдЯрд┐рдВрдЧ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ / рд╕рдВрд╡рд░реНрджреНрдзрди рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рд╕рдВрдкреНрд░реЗрд╖рд┐рдд рдХрд░рдирд╛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреЗрдбрд╝ рд╕реНрд╡рдпрдВ рдЙрддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрд╡рддрдВрддреНрд░ ABuilder -> BBuilder -> CBuilder рдШреЛрдВрд╕рд▓рд╛ рдмрдирд╛рддреЗ рд╕рдордп, рдЙрдирдХреЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рд░рд┐рд╢реНрддреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрд░реНрде рд╡реНрдпрдХреНрдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

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

рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ async/await рд╕рдореНрдореЛрд╣рдХ рд╣реИред рдпрд╣ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА (рд╡рд╛рджреЛрдВ рдХреЗ рдорд╛рддрд╛-рдкрд┐рддрд╛-рдмрд╛рд▓ рд╕рдВрдмрдВрдз) рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рддрдВрддреНрд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЖрдкрдХреЛ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдЗрд░рд╛рджреЗ (рдПрдХ рдЕрдиреБрдХреНрд░рдо рдХрд╛ рд╡рд░реНрдгрди) рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИред

рдПрдХ рдкреЗрдбрд╝ рдПрдХ рд╕реВрдЪреА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓реА рд╕рдВрд░рдЪрдирд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЬрдм рдкреНрд░рддреНрдпреЗрдХ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдПрдХ рдмрдЪреНрдЪрд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рд░реЛрдЧ-рд╕рдВрдмрдВрдзреА рд╡реГрдХреНрд╖ рдмрди рдЬрд╛рддрд╛ рд╣реИ - рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ, рдПрдХ рд╕реВрдЪреАред Async/Await рдФрд░ Hooks рдкрд╣рдЪрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдХрд┐рд╕реА рдРрд╕реА рдЪреАрдЬрд╝ рдкрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдмрд░реНрдмрд╛рдж рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рджреЗрддреА рд╣реИ, рдФрд░ рдЗрд╕реЗ рд╣рдЯрд╛ рджреЗрдВред

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдерд╛ "рдпрд╣ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ" рдФрд░ рдЕрдм рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЦреБрдж рдХрд╛ рдЦрдВрдбрди рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рджреЛ рдЪреАрдЬреЗрдВ рд╣реИрдВред

рдЕрдкрдиреЗ рдЖрдк рд╕реЗ, рдмрд┐рд▓реНрдбрд░реНрд╕ (рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдкреНрд░реЙрдкреНрд╕ рдкреНрд░рд╕реНрддреБрдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ) рд╕рдорд╛рдзрд╛рди (AFAIK) "рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рддрд░реНрдХ" рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдЙрдирдореЗрдВ рд╕реЗ рдмрд╣реБрдд рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╡реЗ рдмрд╣реБрдд рдПрд░реНрдЧреЛрдиреЛрдорд┐рдХ рдирд╣реАрдВ рд╣реИрдВред рдЖрдк рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рд╣реА рдШрдЯрдХ рдореЗрдВ рдЙрдирдореЗрдВ рд╕реЗ 4 рдпрд╛ 5 рд╕реЗ рдЕрдзрд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рд╕реЗ рд╣рддреЛрддреНрд╕рд╛рд╣рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдЕрдЧрд▓рд╛ рд╕реНрддрд░ рдПрдХ рдкрдардиреАрдпрддрд╛ рд╣рд┐рдЯ рд╣реИред

рддреЛ рдЬреЛ рд╣рд┐рд╕реНрд╕рд╛ рдореБрдЭреЗ рдЕрдирд╕реБрд▓рдЭрд╛ рд▓рдЧрддрд╛ рд╣реИ, рд╡рд╣ рдиреЗрд╕реНрдЯрд┐рдВрдЧ рдХреА рдкрд╛рдардХ рд▓рд╛рдЧрдд рдХреЛ рдХрдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдФрд░ рд╡рд╣ рддрд░реНрдХ рдареАрдХ рд╡реИрд╕рд╛ рд╣реА рддрд░реНрдХ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ async / await ред

рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдкрдврд╝рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ:

  • рд╡реНрд╣рд╛рдЗрдЯрд╕реНрдкреЗрд╕ рдХрд╛ рдЕрддреНрдпрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реНрдХреЗрд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдореЙрдирд┐рдЯрд░ рдкрд░ рдХреЗрд╡рд▓ рдЗрддрдиреА рд╣реА рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВ, рдФрд░ рдЬрдмрд░рди рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрдардиреАрдпрддрд╛ рдХрдо рд╣реЛ рдЬрд╛рддреА рд╣реИ рдФрд░ рд╕рдХрд╛рд░рд╛рддреНрдордХ рднрд╛рд░ рдмрдврд╝ рдЬрд╛рддрд╛ рд╣реИред рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 60 рд▓рд╛рдЗрди рд╡рд┐рдЬреЗрдЯ рдкреЗрдбрд╝ рд╣реИ, рдФрд░ рдЖрдкрдиреЗ рдмрд┐рд▓реНрдбрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдореБрдЭ рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд 15 рдХреЛ рдордЬрдмреВрд░ рдХрд┐рдпрд╛, рдЖрджрд░реНрд╢ рдирд╣реАрдВред
  • рдпрд╣ Hz рд╕реНрдкреЗрд╕ рдХреЛ рдмрд░реНрдмрд╛рдж рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рдЕрддрд┐рд░рд┐рдХреНрдд рд░реИрдкрд┐рдВрдЧ рддрдХ рд╕реАрдорд┐рдд рдХрд░ рджреЗрддреЗ рд╣реИрдВ, рдЬреЛ рд▓рд╛рдЗрди рд╕реНрдкреЗрд╕ рдХреЛ рдФрд░ рдмрд░реНрдмрд╛рдж рдХрд░ рджреЗрддрд╛ рд╣реИред
  • рдпрд╣ рд▓реАрдл рдиреЛрдб, рдЙрд░реНрдл тАЛтАЛтАЛтАЛрд╕рд╛рдордЧреНрд░реА, рдмрд╛рдИрдВ рдУрд░ рд╕реЗ рдЖрдЧреЗ рдФрд░ рдЙрд╕ рдкреЗрдбрд╝ рдореЗрдВ рдзрдХреЗрд▓рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдПрдХ рдирдЬрд╝рд░ рд╕реЗ рджреЗрдЦрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ
  • рдПрдХ рдирдЬрд╝рд░ рдореЗрдВ 'рдкреНрд░рдореБрдЦ рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ' рдпрд╛ 'рдЧреИрд░ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ' рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдирд╛ рдХрд╛рдлреА рдХрдард┐рди рд╣реИред рдореЗрд░реЗ рддрд░реНрдХ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдореБрдЭреЗ "рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рд╛рдорд╛рди рдвреВрдВрдврдирд╛" рд╣реИред

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

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

рдЕрдм рдЗрд╕рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ, рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ рдореВрд▓ рд░реВрдк рд╕реЗ рдмреЗрдорд╛рдиреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реА рдЖрдВрдЦреЛрдВ рдХреЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдХрд╣реАрдВ рдирд╣реАрдВ рд╣реИ:
image

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

рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕рдВрджрд░реНрдн рдХреЗ рд╕рдорддреБрд▓реНрдп рдЗрдирд╣реЗрд░рд┐рдЯрд┐рдбрд╡рд┐рдЬреЗрдЯреНрд╕/рдкреНрд░рджрд╛рддрд╛ рд╣реИ

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

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

рд╢рд╛рдпрдж рдпрд╣реА рдПрдХ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЪрд░реНрдЪрд╛ рдХрдард┐рди рдХреНрдпреЛрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдХрдо рдмрд╛рд░ рдмрд┐рд▓реНрдбрд░реНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рд▓реЗрдХрд┐рди рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдПрдХ рд╣реБрдХ рдЬреИрд╕рд╛ рд╕рдорд╛рдзрд╛рди рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рджреЛрдиреЛрдВ https://github.com/flutter/flutter/issues/30062 рд╣рд▓ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ
рдФрд░ https://github.com/flutter/flutter/issues/12992

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

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

рдЗрд╕реЗ рджреЗрдЦрдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдХреЛ рдиреЗрддреНрд░рд╣реАрди рд░реВрдк рд╕реЗ рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рддрдирд╛ рдХреЛрдб рдЪрд╛рд╣рд┐рдПред рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ "рдЧреНрд░рдВрдЯ рд╡рд░реНрдХ" рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдореИрдВ рдкреЗрдбрд╝ рд╕реЗ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ, рдЙрд╕реЗ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдХреЛ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:
image

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

рдореЗрд░реА рдЖрдВрдЦ рдХреЛ рдПрдХ рднреВрдЦреЗ рд╕реАрдкреАрдпреВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЛрдЪреЗрдВ, рдЬреЛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЕрдиреБрдХреВрд▓рд┐рдд рд╣реИ? :)

рд╕рд╛рдорд╛рдиреНрдп View -> Text рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╢рд┐рдХрд╛рд░ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдФрд░ рдЗрд╕ рддрд░рд╣, рдШреЛрдВрд╕рд▓рд╛ рдмрдирд╛рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реНрдХреНрд░реАрди рдкрд░ _рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рд░рд┐рд╢реНрддреЗ_ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред рд╕рдВрджрд░реНрдн рдЬреИрд╕реА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд▓рд┐рдП (рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕реНрдкрдВрджрди рдХреЗ рдкрд╛рд╕ рд╣реИ), рдпрд╣ рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рджрд╛рдпрд░реЗ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред рддреЛ рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╢рд┐рдХрд╛рд░ рдХрд╛ рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрд░реНрде рдЕрд░реНрде рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреА рдЕрд╡рд╣реЗрд▓рдирд╛ рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдЖрдк рдХреЗрд╡рд▓ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдФрд░ рдмрдЪреНрдЪреЗ рдХреЗ рд╕реНрдерд╛рдиреЛрдВ рдХреА рдЕрджрд▓рд╛-рдмрджрд▓реА рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рд╕рдорд╛рди рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

рдпрд╣рд╛рдБ рджреЛ рдореБрджреНрджреЗ рдореБрдЭ рдкрд░ рдХреВрдж рд░рд╣реЗ рд╣реИрдВред

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

  2. рдмрд┐рд▓реНрдб рд╕рд┐рдВрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдРрдк рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдк рдЬрд┐рди рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЛрдВ рд╕реЗ рдирд┐рдкрдЯрддреЗ рд╣реИрдВ, рд╡реЗ async рд╣реИрдВред рдмреЗрд╢рдХ рд╣рдо рдмрд┐рд▓реНрдб рдПрд╕рд┐рдВрдХреНрд╕ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗред рд╣рдордиреЗ рд╕реНрдЯреНрд░реАрдо/рдПрдиреАрдореЗрд╢рди/рдлреНрдпреВрдЪрд░рдмрд┐рд▓реНрдбрд░ рдЬреИрд╕реА рдЗрди рдЙрдкрдпреБрдХреНрддрддрд╛рдУрдВ рдХреЛ рдмрдирд╛рдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдбреЗрд╡рд▓рдкрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд▓рд┐рдП рд╡реЗ рд╣рдореЗрд╢рд╛ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╢рд╛рдпрдж рдмрддрд╛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рд╣рдо рдврд╛рдВрдЪреЗ рдореЗрдВ рд╕реНрдЯреНрд░реАрдо рдпрд╛ рдлреНрдпреВрдЪрд░рдмрд┐рд▓реНрдбрд░ рдХрд╛ рдЬреНрдпрд╛рджрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

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

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

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

@dnfield рдЕрдЧрд░ build рдХреЛ рд╣рд░ рдмрд╛рд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ рд╢рд╛рдпрдж рд╣рдо рд╣реБрдХ рдХреЛ build рд╡рд┐рдзрд┐ рдореЗрдВ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдмрд┐рд▓реНрдб рд╣рдореЗрд╢рд╛ рд╕рд┐рдВрдХ рд╣реЛ, рдпрд╛рдиреА рдЙрдиреНрд╣реЗрдВ рдЙрд╕ рд╡рд░реНрдЧ рдХреЗ рдЕрдВрджрд░ рд░рдЦреЗрдВ рдЬрд╣рд╛рдВ initState рдФрд░ dispose рд╣реИрдВред рдХреНрдпрд╛ рд╣реБрдХ рд▓рд┐рдЦрдиреЗ рд╡рд╛рд▓реЛрдВ рд╕реЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ?

рдЖрдк рд╡рд╛рджреЗ/рд╡рд╛рдпрджрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╣реА рддрд░реНрдХ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ await рдЗрд╕ рддрдереНрдп рдХреЛ рдЕрд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╡рд╛рджрд╛ рджреЗрддрд╛ рд╣реИред

рдирд╣реАрдВ рддреБрдо рдирд╣реАрдВред рдкреНрд░рддреАрдХреНрд╖рд╛ рд╡рд╕реНрддреБрддрдГ рдПрдХ рд╣реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд▓рд┐рдП рд╡рд╛рдХреНрдпрд╛рддреНрдордХ рдЪреАрдиреА рд╣реИред рдЬрд┐рд╕ рдореМрд╕рдо рдореЗрдВ рдЖрдк рд╡рд░реНрдмреЛрдЬрд╝ рдлреНрдпреВрдЪрд░реНрд╕, рдпрд╛ рдбрд┐рдХреНрд▓реЗрд░реЗрдЯрд┐рд╡ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдХреЛрдб рдХрд╛ __intent__ рд╕рдорд╛рди рд╣реЛрддрд╛ рд╣реИред

рдпрд╣рд╛рдВ рдорд╛рдВрдЧреЗрдВ рд╣реИрдВ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЬреЛ рдПрдХ рд╣реА рдЫрддрд░реА рдХреЗ рдиреАрдЪреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪрд┐рдВрддрд╛рдУрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдПрдХ рд╣реА рдХреАрд╡рд░реНрдб рдХреЗ рдкреАрдЫреЗ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╡реНрдпрд╡рд╣рд╛рд░реЛрдВ рдХреЛ рдЫреБрдкрд╛рддрд╛ рд╣реИ рдФрд░ рджрд╛рд╡рд╛ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рддрд░рд╣ рдпрд╣ рд╕рдВрдЬреНрдЮрд╛рдирд╛рддреНрдордХ рднрд╛рд░ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред

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

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

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

@Rudiksz рдлрд┐рд░ рд╕реЗ, рдХреЛрдИ рднреА рдЖрдкрдХреЛ рд╣реБрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рд╡рд░реНрддрдорд╛рди рд╢реИрд▓реА рдЕрднреА рднреА рд░рд╣реЗрдЧреАред рдЗрд╕ рдЬреНрдЮрд╛рди рдХреЗ рд╕рд╛рдордиреЗ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рддрд░реНрдХ рд╣реИ?

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

@Rudiksz рдлрд┐рд░ рд╕реЗ, рдХреЛрдИ рднреА рдЖрдкрдХреЛ рд╣реБрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рд╡рд░реНрддрдорд╛рди рд╢реИрд▓реА рдЕрднреА рднреА рд░рд╣реЗрдЧреАред рдЗрд╕ рдЬреНрдЮрд╛рди рдХреЗ рд╕рд╛рдордиреЗ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рддрд░реНрдХ рд╣реИ?

рдУрд╣ рдкреНрд░рд┐рдп, рдпрд╣реА рддрд░реНрдХ рдЙрди рд▓реЛрдЧреЛрдВ рдкрд░ рднреА рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдврд╛рдВрдЪреЗ рдХреЗ рд╕рд╛рде рдореБрджреНрджреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░рддреЗ рд╣реИрдВред рдХреЛрдИ рднреА рдЙрдиреНрд╣реЗрдВ рд╣реБрдХ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред

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

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

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрднреНрдпрд╛рд╕ рдХрд╣рд╛рдВ рд╕реЗ рдЖ рд░рд╣реЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдб рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрдврд╝рдиреЗ рдпреЛрдЧреНрдп рд░рдЦрдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИ, рдФрд░ рдпрд╣ рдХрд┐ рдЕрддреНрдпрдзрд┐рдХ рдиреЗрд╕реНрдЯрд┐рдВрдЧ рдПрдХ рд╡рд┐рд░реЛрдзреА рдкреИрдЯрд░реНрди рд╣реИред рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рди рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдУрдВ рдХрд╛ рдЬрд┐рдХреНрд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

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

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

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

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдХреЛрдИ рдпрд╣ рддрд░реНрдХ рджреЗ рд░рд╣рд╛ рд╣реИ рдХрд┐ рд╕реНрдкрдВрджрди рдХреЛ рд░рд┐рдПрдХреНрдЯ рдХреА рддрд░рд╣ рд╕рдм рдХреБрдЫ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

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

рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдлрд╝реНрд▓рдЯрд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рдорд╛рди рд╣реИред

@Rudiksz Flutter рдХрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ API рд░рд┐рдПрдХреНрдЯ рдХреЗ рд╡рд░реНрдЧ рдЖрдзрд╛рд░рд┐рдд рдореЙрдбрд▓ рдХреЗ рд╕рдорд╛рди рд╣реИ, рднрд▓реЗ рд╣реА рдЖрдВрддрд░рд┐рдХ API рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреНрдпрд╛ рд╡реЗ рднрд┐рдиреНрди рд╣реИрдВ, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдВрддрд░рд┐рдХ API рдореЗрдВ рдЕрдзрд┐рдХ рдирд╣реАрдВ рдЪрд▓рддрд╛)ред рдореИрдВ рдЖрдкрдХреЛ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реБрдХ рдХреЗ рд╕рд╛рде рд░рд┐рдПрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреИрд╕рд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдерд╛ рдХрд┐ рд▓рдЧрднрдЧ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрди рд▓реЛрдЧреЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд░рд╛рдп рдХрд╛ рдПрдХ рджреНрд╡рдВрджреНрд╡ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЕрдиреНрдп рдврд╛рдВрдЪреЗ рдореЗрдВ рд╣реБрдХ рдЬреИрд╕реА рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред

рдЙрдирдХреА рд╕рдорд╛рдирддрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдЗрд╕рдореЗрдВ рдХреЛрдИ рдЖрд╢реНрдЪрд░реНрдп рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд╕рдорд╛рдзрд╛рди рд╕рдорд╛рди рджрд┐рдЦрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИред

рдХреГрдкрдпрд╛, рд╣рдорд╛рд░реА рдкреВрд░реА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдХрд┐ рдЖрдкрд╕ рдореЗрдВ рд▓рдбрд╝рд╛рдИ рди рдХрд░реЗрдВред

рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд▓рдбрд╝рд╛рдИ рд╣рдореЗрдВ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рдПрдЧреА рдФрд░ рдПрдХ рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬрдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣реА рд╣реИред

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

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

рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рд▓рд╛рд▓рд╛рдпрд┐рдд рдирд╣реАрдВ, рдореИрдВрдиреЗ рдХрднреА рд░рд┐рдПрдХреНрдЯ рдореЗрдВ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдореБрдЭреЗ рдлрд╝реНрд▓рдЯрд░ рдкрд╕рдВрдж рд╣реИред рдореИрдВ рдпрд╣рд╛рдВ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВред

@Rudiksz рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЬрдм рддрдХ рд╣рдо рдЗрд╕реЗ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдирд╣реАрдВ рдбрд╛рд▓рддреЗ рддрдм рддрдХ рдпрд╣ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рдирдХрд╛рд░реА рд╣реИред рдЕрднреА рдлреИрд╕рд▓рд╛ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред

@Hixie рдпрд╣ рдПрдХ рдпрд╛рддреНрд░рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдкрдВрджрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ HookWidget рдФрд░ StatefulWidget рджреЛрдиреЛрдВ рдХреЗ рд╕рд╛рде рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЬреЗрдЯ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

__рд╣реБрдХ рд╡рд┐рдЬреЗрдЯ__

String useUserNickname(Id userid) {
  final name = useState("");
  useEffect(async () {
    name.value = "Loading...";
    name.value = await fetchNicknames()[userId;
  }, [userId]);
  return name.value;
}

class UserNickname extends HookWidget {

  final userId;

  Widget build(BuildContext context) {
    final nickname = useUserNickname(userId);
    return Text(nickname);
  }
}

__рд╕реНрдЯреЗрдЯрдлреБрд▓ рд╡рд┐рдЬреЗрдЯ__

class UserNickname extends Widget {
  final userId;
  // ... createState() ...
}

class UserNicknameState extends State {

  String nickname= "";

   initState() {
     super.initState();
     fetchAndUpdate();
   }

   fetchAndUpdate() async {
      setState(() { this.nickname = "Loading..." });
      final result = await fetchNicknames()[widget.userId];
      setState(() { this.nickname = result });
    }


 void didUpdateWidget(oldWidget) { 
     if (oldWidget.userId != widget.userId) {
        fetchAndUpdate();
     }
   }

  Widget build(BuildContext context) {
    return Text(this.nickname);
  }
}

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

  • fetchNicknames() рддрд░реНрдХ рдХреЛ рдкреИрд░реЗрдВрдЯ рд╡рд┐рдЬреЗрдЯ рдкрд░ рдХреЙрд▓ рдХрд░реЗрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рд╕рд╣реЗрдЬреЗрдВред
  • рдХреИрд╢ рдореИрдиреЗрдЬрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред

рдкрд╣рд▓рд╛ рд╕рдорд╛рдзрд╛рди рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИ рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ 2 рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВред
1 - рдпрд╣ UserNickname рдмреЗрдХрд╛рд░ рдХрд░ рджреЗрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдм рдХреЗрд╡рд▓ рдПрдХ рдЯреЗрдХреНрд╕реНрдЯ рд╡рд┐рдЬреЗрдЯ рд╣реИ рдФрд░ рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдХрд╣реАрдВ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рд╡рд╣реА рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдЖрдкрдиреЗ рдкреИрд░реЗрдВрдЯ рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рдХрд┐рдпрд╛ рдерд╛ (рдЬрд┐рд╕рдореЗрдВ ListView ) . рдЙрдкрдирд╛рдо рджрд┐рдЦрд╛рдиреЗ рдХрд╛ рддрд░реНрдХ UserNickname рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЗрд╕реЗ рдЕрд▓рдЧ рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
2 - рд╣рдо рдХрдИ рдЕрдиреНрдп рдЙрдк рдкреЗрдбрд╝реЛрдВ рдореЗрдВ fetchNicknames() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╕рднреА рдРрдк рдХреЗ рд▓рд┐рдП рдХреИрд╢ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ рди рдХреЗрд╡рд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ред

рддреЛ рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рд╣рдо рдХреИрд╢ рдореИрдиреЗрдЬрд░ рдЪреБрдирддреЗ рд╣реИрдВ рдФрд░ CacheManager рдХреНрд▓рд╛рд╕ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ InheritedWidgets рдпрд╛ Provider ред

рдХреИрд╢рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж:

__рд╣реБрдХ рд╡рд┐рдЬреЗрдЯ__

String useUserNickname(Id userid) {
  final context = useContext();
  final cache = Provider.of<CacheManager>(context);
  final name = useState("");
  useEffect(async () {
    name.value = "Loading...";
    var cachedValue = cache.get("nicknames");
    if (cachedValue == null || cachedValue[widget.userId] == null) {
        final result = await fetchNicknames();
        cache.set("nicknames", result );
        cachedValue = result ;
    }
    final result = cachedValue[widget.userId];
    name.value = result ;
  }, [userId]);
  return name.value;
}

class UserNickname extends HookWidget {

  final userId;

  Widget build(BuildContext context) {
    final nickname = useUserNickname(userId);
    return Text(nickname);
  }
}

__рд╕реНрдЯреЗрдЯрдлреБрд▓ рд╡рд┐рдЬреЗрдЯ__

class UserNickname extends Widget {
  final userId;
  // ... createState() ...
}

class UserNicknameState extends State {

  String nickname= "";
  CacheManager cache;

   initState() {
     super.initState();
     fetchAndUpdate();
     this.cache = Provider.of<CacheManager>(context);
   }

   fetchAndUpdate() async {
      setState(() { this.nickname = "Loading..." });
      var cachedValue = this.cache.get("nicknames");
      if (cachedValue == null || cachedValue[widget.userId] == null) {
        final result = await fetchNicknames();
        this.cache.set("nicknames", result );
        cachedValue = result ;
      }
      final result = cachedValue [widget.userId];
      setState(() { this.nickname = result });
    }


 void didUpdateWidget(oldWidget) { 
     if (oldWidget.userId != widget.userId) {
        fetchAndUpdate();
     }
   }

  Widget build(BuildContext context) {
    return Text(this.nickname);
  }
}

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

__рд╣реБрдХ рд╡рд┐рдЬреЗрдЯ__

String useUserNickname(Id userid) {
  final context = useContext();
  final cache = Provider.of<CacheManager>(context);
  final notifications = Provider.of<ServiceNotifications>(context);
  final name = useState("");

  fetchData() async {
    name.value = "Loading...";
    var cachedValue = cache.get("nicknames");
    if (cachedValue == null || cachedValue[widget.userId] == null) {
        final result = await fetchNicknames();
        cache.set("nicknames", result );
        cachedValue = result ;
    }
    final result = cachedValue[widget.userId];
    name.value = result ;
   }

  useEffect(() {
     final sub = notifications.on("nicknameChanges", fetchData);
     return () => sub.unsubscribe();
   }, [])

  useEffect(fetchData, [userId]);
  return name.value;
}

class UserNickname extends HookWidget {

  final userId;

  Widget build(BuildContext context) {
    final nickname = useUserNickname(userId);
    return Text(nickname);
  }
}

__рд╕реНрдЯреЗрдЯрдлреБрд▓ рд╡рд┐рдЬреЗрдЯ__

class UserNickname extends Widget {
  final userId;
  // ... createState() ...
}

class UserNicknameState extends State {

  String nickname= "";
  CacheManager cache;
  ServerNotification notifications;
  CancelableOperation sub;

   initState() {
     super.initState();
     fetchAndUpdate();
     this.cache = Provider.of<CacheManager>(context);
     this.notifications = Provider.of<ServerNotification>(context);
     this.sub = notifications.on("nicknameChanges", fetchAndUpdate);
   }

   dispose() {
      super.dispose();
      this.sub.unsubscribe();
   }

   fetchAndUpdate() async {
      setState(() { this.nickname = "Loading..." });
      var cachedValue = this.cache.get("nicknames");
      if (cachedValue == null || cachedValue[widget.userId] == null) {
        final result = await fetchNicknames();
        this.cache.set("nicknames", result );
        cachedValue = result ;
      }
      final result = cachedValue [widget.userId];
      setState(() { this.nickname = result });
    }


 void didUpdateWidget(oldWidget) { 
     if (oldWidget.userId != widget.userId) {
        fetchAndUpdate();
     }
   }

  Widget build(BuildContext context) {
    return Text(this.nickname);
  }
}

рдЕрдм рддрдХ рджреЛрдиреЛрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реНрд╡реАрдХрд╛рд░реНрдп рдФрд░ рдЕрдЪреНрдЫреЗ рд╣реИрдВред рд╕реНрдЯреЗрдЯрдлреБрд▓ рдореЗрдВ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдЖрдИрдПрдордУ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рд╕рдорд╕реНрдпрд╛ рддрдм рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ рдЬрдм рд╣рдореЗрдВ UserInfo рдЬреИрд╕реЗ рд╡рд┐рдЬреЗрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдирд╛рдо рдФрд░ рдЕрд╡рддрд╛рд░ рджреЛрдиреЛрдВ рд╣реЛред рд╣рдо рднреА UserNickname рд╡рд┐рдЬреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ "рд╡реЗрд▓рдХрдо [рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо]" рдЬреИрд╕реЗ рд╡рд╛рдХреНрдп рдореЗрдВ рджрд┐рдЦрд╛рдирд╛ рд╣реЛрдЧрд╛ред

__рд╣реБрдХ рд╡рд┐рдЬреЗрдЯ__

useFetchUserNickname(userId) // old code
useUserAvatar(userId) // implementation like `useFetchUserNickname`

class UserNickname extends HookWidget {
  final userId;

  Widget build(BuildContext context) {
    final nickname = useUserNickname(userId);
    final avatar = useUserAvatar(userId);
    return Row(
      children: [Image.network(avatar), Text(nickname)],
    );
  }
}

рд▓реЗрдХрд┐рди __stateful рд╡рд┐рдЬреЗрдЯ__ рдХреЗ рд▓рд┐рдП рд╣рдо рдХреЗрд╡рд▓ рдЙрд╕ рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдЬреЛ рд╣рдордиреЗ рд▓рд┐рдЦрд╛ рдерд╛ред рд╣рдореЗрдВ рддрд░реНрдХ рдХреЛ рдПрдХ рд╡рд░реНрдЧ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рдЬреИрд╕реЗ Property рдЬреЛ рдЖрдкрдиреЗ рд╕реБрдЭрд╛рдпрд╛ рдерд╛) рдФрд░ рдлрд┐рд░ рднреА рд╣рдореЗрдВ рдирдП рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд╕рдВрдкрддреНрддрд┐ рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рд╡рд┐рдЬреЗрдЯ рдЧреЛрдВрдж рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

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

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

рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ @gaearon рдЗрд╕реЗ рдореБрдЭрд╕реЗ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ

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

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

1 - рдмрд╕ рдПрдХ рдирдпрд╛ рд╡рд┐рдЬреЗрдЯ рдмрдирд╛рдирд╛ рдЬреЛ HookWidget рдФрд░ StatefulWidget/StatelessWidget рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд╡рд┐рдХрд▓реНрдк рд╣реИ
2 - HookWidgetBuilder рдореЗрдВ flutter_hooks рдкреИрдХреЗрдЬ рдХреЗ рд╕рдорд╛рди рдХреБрдЫ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХреНрдпреЛрдВрдХрд┐ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдФрд░ рдмрдЪреНрдЪреЗ рдХреЗ рд╡рд┐рдЬреЗрдЯ рдбреЗрдЯрд╛ рдмрд╣реБрдд рдХрд╕рдХрд░ рдпреБрдЧреНрдорд┐рдд рд╣реЛрддреЗ рд╣реИрдВред

рд╕рд╛рдЗрдб рдиреЛрдЯ: рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдФрд░ рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рдЗрддрдиреА рдКрд░реНрдЬрд╛ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП @Hixie рдФрд░ @rrousselGit рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ ред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрди рд╡рд╛рд░реНрддрд╛рдУрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

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

рддреЛ, рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд╕рд╛рде рдПрдХ StatefulWidget рд╣реИ:

class ExampleSimple extends StatefulWidget {
  final Duration duration1;
  final Duration duration2;
  final Duration duration3;

  const ExampleSimple({Key key, this.duration1, this.duration2, this.duration3}) : super(key: key);

  <strong i="9">@override</strong>
  _ExampleSimpleState createState() => _ExampleSimpleState();
}

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

class _ExampleSimpleVanillaState extends State<ExampleSimpleVanilla> with SingleTickerProviderStateMixin {
  AnimationController _anim1;
  AnimationController _anim2;
  AnimationController _anim3;

  <strong i="13">@override</strong>
  void initState() {
    _anim1 = AnimationController(duration: widget.duration1, vsync: this);
    _anim1.forward();
    _anim2 = AnimationController(duration: widget.duration2, vsync: this);
    _anim2.forward();
    _anim3 = AnimationController(duration: widget.duration3, vsync: this);
    _anim3.forward();
    super.initState();
  }

  <strong i="14">@override</strong>
  Widget build(BuildContext context) {
    return Container(
      margin: EdgeInsets.symmetric(vertical: _anim2.value * 20, horizontal: _anim3.value * 30,),
      color: Colors.red.withOpacity(_anim1.value),
    );
  }

  <strong i="15">@override</strong>
  void didUpdateWidget(ExampleSimpleVanilla oldWidget) {
    if (oldWidget.duration1 != widget.duration1) {
      _anim1.duration = widget.duration1;
    }
    if (oldWidget.duration2 != widget.duration2) {
      _anim1.duration = widget.duration1;
    }
    if (oldWidget.duration3 != widget.duration3) {
      _anim1.duration = widget.duration1;
    }
    super.didUpdateWidget(oldWidget);
  }

  <strong i="16">@override</strong>
  void dispose() {
    _anim1.dispose();
    _anim2.dispose();
    _anim3.dispose();
    super.dispose();
  }
}

рдпрджрд┐ рд╣рдо рдЗрд╕реЗ StatefulProperty рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:

class _ExampleSimpleState extends State<ExampleSimple> with StatefulPropertyManager {
  StatefulAnimationProperty _anim1;
  StatefulAnimationProperty _anim2;
  StatefulAnimationProperty _anim3;

  <strong i="6">@override</strong>
  void initStatefulProperties({bool firstRun = false}) {
    _anim1 = initProperty(_anim1, StatefulAnimationProperty(duration: widget.duration1, playOnInit: true));
    _anim2 = initProperty(_anim2, StatefulAnimationProperty(duration: widget.duration2, playOnInit: true));
    _anim3 = initProperty(_anim3, StatefulAnimationProperty(duration: widget.duration3, playOnInit: true));
    super.initStatefulProperties(firstRun: firstRun);
  }

  <strong i="7">@override</strong>
  Widget build(BuildContext context) {
    return Container(
      margin: EdgeInsets.symmetric(vertical: _anim2.controller.value * 20, horizontal: _anim3.controller.value * 30,),
      color: Colors.red.withOpacity(_anim1.controller.value),
    );
  }
}

рдпрд╣рд╛рдБ рдорддрднреЗрджреЛрдВ рдкрд░ рдХреБрдЫ рдиреЛрдЯреНрд╕:

  1. рдКрдкрд░ рд╕реЗ, рдПрдХ 20 рд▓рд╛рдЗрдиреЗрдВ рд╣реИ, рджреВрд╕рд░реА 45 рд╣реИред рдПрдХ 1315 рд╡рд░реНрдг рд╣реИ рдФрд░ рджреВрд╕рд░рд╛ 825 рд╣реИред рдЗрд╕ рд╡рд░реНрдЧ рдореЗрдВ рдХреЗрд╡рд▓ 3 рд▓рд╛рдЗрдиреЗрдВ рдФрд░ 200 рд╡рд░реНрдг рдорд╛рдпрдиреЗ рд░рдЦрддреЗ рд╣реИрдВ (рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ), рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рд┐рдЧреНрдирд▓ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдмрдбрд╝рд╛ рд╕реБрдзрд╛рд░ рд╣реИ
  2. рд╡реЗрдирд┐рд▓рд╛ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рдХрдИ рдмрд┐рдВрджреБ рд╣реЛрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдмрдЧ рдмрдирд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдбрд┐рд╕реНрдкреЛрдЬ рдХрд░рдирд╛ рднреВрд▓ рдЬрд╛рдЗрдП, рдпрд╛ didChange рдХреЛ рд╣реИрдВрдбрд▓ рдХрд░рдирд╛ рднреВрд▓ рдЬрд╛рдЗрдП, рдпрд╛ didChange рдореЗрдВ рдЧрд▓рддреА рдХрд░ рджреАрдЬрд┐рдП, рдФрд░ рдЖрдкрдХреЗ рдХреЛрдб рдмреЗрд╕ рдореЗрдВ рдПрдХ рдмрдЧ рд╣реИред рдпрд╣ рддрдм рдФрд░ рдЦрд░рд╛рдм рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд┐рд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рднреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдлрд╛рдбрд╝рдиреЗ рд╡рд╛рд▓реЗ рдПрдХрд▓ рдХрд╛рд░реНрдп рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдЗрд╕ рддрд░рд╣ рдЕрдЪреНрдЫрд╛ рдФрд░ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдирд╛рдо рдирд╣реАрдВ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдЧрдбрд╝рдмрдбрд╝ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЧрд▓рддрд┐рдпрд╛рдБ рдпрд╛ рдорд┐рд╕ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ рдХрд░рдирд╛ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИред
  3. рд╡реЗрдирд┐рд▓рд╛ рд╡рд┐рдХрд▓реНрдк рд╕рд╛рдорд╛рдиреНрдп рдкреИрдЯрд░реНрди рдпрд╛ рддрд░реНрдХ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рдзрд┐ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ playOnInit, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЗрд╕ рддрд░реНрдХ рдХреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдпрд╛ рдмрд╣реБрдд рд╣реА рдПрдХрд▓ рд╡рд░реНрдЧ рдореЗрдВ рдХреБрдЫ рдХрд╕реНрдЯрдо рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдПрдирд┐рдореЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред
  4. рдпрд╣рд╛рдВ рд╕рд┐рдВрдЧрд▓рдЯрд┐рдХрд░рдкреНрд░реЛрд╡рд╛рдЗрдбрд░рдорд┐рдХреНрд╕рд┐рди рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдХрд┐ 'рдЬрд╛рджреВ' рд╣реИ рдФрд░ рдпрд╣ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдорд╣реАрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯрд┐рдХрд░ рдореЗрд░реЗ рд▓рд┐рдП рдХреНрдпрд╛ рд╣реИ (рдЖрдЦрд┐рд░рдХрд╛рд░, рдореБрдЭреЗ рд╕рд┐рд░реНрдл рдХрдХреНрд╖рд╛ рдкрдврд╝рдиреА рдЪрд╛рд╣рд┐рдП рдереА, рд▓реЗрдХрд┐рди рд╣рд░ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдмрд╕ рдХрд╣рддрд╛ рд╣реИ: рдЗрд╕ рдЬрд╛рджреВ рдорд┐рд╢реНрд░рдг рдХреЛ рдЬреЛрдбрд╝реЗрдВ)ред рдпрд╣рд╛рдВ рдЖрдк рд╕реАрдзреЗ StatefulAnimationProperty рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдПрдиреАрдореЗрд╢рди рдирд┐рдпрдВрддреНрд░рдХ рд╕реАрдзреЗ рдФрд░ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЯрд┐рдХрд░ рдкреНрд░рджрд╛рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВред

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ StatefulPropertyManager рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдпрд╣ рдПрдХ рдмрд╛рд░ рд╕реАрдЦрд╛ рдФрд░ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБрдУрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, SingleTickerProviderMixin рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдПрдирд┐рдореЗрдЯрд░ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рдкрд╛рд╕ рдЙрдкрдпреЛрдЧ рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЕрдкрдирд╛ рдорд┐рд╢реНрд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЧрдиреНрджрд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдмрд╕ рдЕрд╕рддрдд "рд╕реНрдЯреЗрдЯрдлреБрд▓рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕" рдЬреЛ рдпрд╣ рд╕рдм рд╕рд╛рдорд╛рди рдЬрд╛рдирддрд╛ рд╣реИ (рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдЬреИрд╕реЗ рдПрдХ рдмрд┐рд▓реНрдбрд░ рдХрд░рддрд╛ рд╣реИ!), рдмрд╣реБрдд рд╕рд╛рдл рд╣реИ рдФрд░ рдмреЗрд╣рддрд░ рд╣реИред

StatefulAnimationProperty рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

class StatefulAnimationProperty extends BaseStatefulProperty<StatefulAnimationProperty> implements TickerProvider {
  final Duration duration;
  final TickerProvider vsync;
  final bool playOnInit;

  StatefulAnimationProperty({<strong i="7">@required</strong> this.duration, <strong i="8">@required</strong> this.vsync, this.playOnInit = false});

  AnimationController get controller => _controller;
  AnimationController _controller;

  Ticker _ticker;

  <strong i="9">@override</strong>
  Ticker createTicker(onTick) {
    _ticker ??= Ticker((elapsed)=>handleTick(elapsed, onTick));
    return _ticker;
  }

  handleTick(Duration elapsed, TickerCallback onTick) {
    managerWidget.buildWidget(); //TODO: This just calls setState() on the host widget. Is there some better way to do this?
    onTick(elapsed);
  }

  <strong i="10">@override</strong>
  void init(StatefulAnimationProperty old) {
    _controller = old?.controller ??
        AnimationController(
          duration: duration ?? Duration(seconds: 1),
          vsync: vsync ?? this,
        );
    if (playOnInit && old?.controller == null) {
      _controller.forward();
    }
    super.init(old);
  }

  <strong i="11">@override</strong>
  void update(StatefulAnimationProperty old) {
    if (duration != old.duration) {
      _controller.duration = duration;
    }
    if (vsync != old.vsync) {
      _controller.resync(vsync);
    }
    super.update(old);
  }

  <strong i="12">@override</strong>
  void dispose() {
    _controller?.dispose();
    _ticker?.dispose();
    super.dispose();
  }
}

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

  void initStatefulProperties({bool firstRun = false}) {
    _anim1.init(duration: widget.duration1, playOnInit: true);
    _anim2.init(duration: widget.duration2, playOnInit: true);
    _anim3.init(duration: widget.duration3, playOnInit: true);
    super.initStatefulProperties(firstRun: firstRun);
  }

[рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ] рдЬреИрд╕реЗ рдХрд┐ рдЕрдкрдиреА рдмрд╛рдд рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рд╡реИрдирд┐рд▓рд╛ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдПрдХ рдмрдЧ рд╣реИред рдореИрдВ didUpdateWidget рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдПрдирд┐рдореЗрдЯрд░ рдХреЛ рд╕рд╣реА рдЕрд╡рдзрд┐ рджреЗрдирд╛ рднреВрд▓ рдЧрдпрд╛ред рдЕрдЧрд░ рдХреЛрдб рд╕рдореАрдХреНрд╖рд╛ рдореЗрдВ рдХрд┐рд╕реА рдиреЗ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ рддреЛ рд╣рдореЗрдВ рдЬрдВрдЧрд▓реА рдореЗрдВ рдЙрд╕ рдмрдЧ рдХреЛ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдХрд┐рддрдирд╛ рд╕рдордп рд▓рдЧреЗрдЧрд╛ ?? рдкрдврд╝рддреЗ рд╕рдордп рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рдЗрд╕реЗ рдирд╣реАрдВ рджреЗрдЦрд╛? рдЗрд╕реЗ рдХрд╛рд░рдг рдореЗрдВ рдЫреЛрдбрд╝рдирд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЗрд╕рдХрд╛ рдПрдХ рдЖрджрд░реНрд╢ рдЙрджрд╛рд╣рд░рдг рд╣реИред

рд▓рд╛рд▓ рд░рдВрдЧ рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЗ рд╕рд╛рде, рдпрд╣рд╛рдВ рдПрдХ рд╡рд┐рд╣рдВрдЧрдо рджреГрд╢реНрдп рд╣реИ:
image

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

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

рд╕рд╛рде рд╣реА рдЕрдкрдиреА рдЦреБрдж рдХреА рдХрд╕реНрдЯрдо рд╕реНрдЯреЗрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛ _extremely_ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдкрд╣рд▓реЗ рд╕реВрдЪреАрдмрджреНрдз FetchUser рдЙрджрд╛рд╣рд░рдг, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ рдмрд┐рд▓реНрдбрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдЧрд▓реЗ рд╕реНрдкрдВрджрди рдбреЗрд╡рд▓рдкрд░ рд╕рд░реНрд╡реЗрдХреНрд╖рдг рдореЗрдВ рдкреВрдЫрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рджрд┐рд▓рдЪрд╕реНрдк рд╕рд╡рд╛рд▓ рд╣реЛрдЧрд╛ред

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

рдПрдХ рдмрд╛рд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдиреЗ рдкрд░, рдпрд╣ рдмрд╛рддрдЪреАрдд рдЕрдзрд┐рдХ рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ рдФрд░ рд╕рдореГрджреНрдз рд╣реЛрдЧреА

рдкреНрд░рддреНрдпреЗрдХ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рддрд╣рдд рдЗрдореЛрдЬреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╡рд┐рдЪрд╛рд░ рджреЗрддреА рд╣реИ рдХрд┐ рд╕рдореБрджрд╛рдп рдЗрд╕реЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП 250+ рд▓рдВрдмреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рд░рд╛рдп рдХрд╛ рдмрд╣реБрдд рдорддрд▓рдм рд╣реИред

@esDotDev рдпрд╣ рдЙрди рдХреБрдЫ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рд╕рдорд╛рди рд╣реИ рдЬрд┐рдирдХреЗ рд╕рд╛рде рдореИрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдЯрд┐рдХрд░ рдкреНрд░рджрд╛рддрд╛ рд╣реЛрдиреЗ рдХрд╛ рдЖрдкрдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИ, рдореИрдВрдиреЗ рдЙрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ред рдПрдХ рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдХрдореА рд╣реИ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА TickerMode (рдЬреЛ рдХрд┐ TickerProviderStateMixin рдХрд╛ рдмрд┐рдВрджреБ рд╣реИ) рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реИред

рдореИрдВ рдЬрд┐рд╕ рдореБрдЦреНрдп рдЪреАрдЬ рд╕реЗ рдЬреВрдЭ рд░рд╣рд╛ рд╣реВрдВ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреБрд╢рд▓ рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, ValueListenableBuilder рдПрдХ рдмрд╛рд▓ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдорд╛рдкрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рд╕рдВрдкрддреНрддрд┐ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИред

@ рд╣рд┐рдХреНрд╕реА
рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рджрдХреНрд╖рддрд╛ рд╣рд╛рдирд┐ рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЖрдкрдХреЗ рдХреЛрдб рдХреЛ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреА рдлрд╝реНрд▓рдЯрд░ рдорд╛рдирд╕рд┐рдХрддрд╛ рдкрд╕рдВрдж рд╣реИред рдРрд╕реЗ рдмрд╣реБрдд рд╕реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИрдВ рдЬреЛ рд╕рдВрдкрддреНрддрд┐ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рд╕реНрдкрд╖реНрдЯрддрд╛ рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рд╕реЗ рд▓рд╛рднрд╛рдиреНрд╡рд┐рдд рд╣реЛрдВрдЧреЗред рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк, рдФрд░ рдмрд┐рд▓реНрдбрд░реЛрдВ рдореЗрдВ рд░рд┐рдлреИрдХреНрдЯрд░ рдпрд╛ рд╡рд┐рдЬреЗрдЯ рдХреЗ рдПрдХ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдЕрдкрдиреЗ рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣рдореЗрд╢рд╛ рд╣реЛрддрд╛ рд╣реИред

рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЛ рдХреЗрд╡рд▓ рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдУрдВ рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЯреНрд░реЗрдбрдСрдлрд╝ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдореИрдВ рдЬрд┐рд╕ рдореБрдЦреНрдп рдЪреАрдЬ рд╕реЗ рдЬреВрдЭ рд░рд╣рд╛ рд╣реВрдВ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреБрд╢рд▓ рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, ValueListenableBuilder рдПрдХ рдмрд╛рд▓ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдорд╛рдкрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рд╕рдВрдкрддреНрддрд┐ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИред

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

рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ StatefulValueListenableProperty рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдХрд╛ рд╣рдо рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рдордп рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рд╣рдо рдкреВрд░реЗ рджреГрд╢реНрдп рдХреЛ рдмрд╛рдВрдзрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрд╛рдж рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ ValueListenableBuilder рднреА рд╣реИ, рдЗрд╕ рдЕрд╡рд╕рд░ рдкрд░ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рдкреЗрдбрд╝ рдХреЗ рдХреБрдЫ рдЙрдк-рдЦрдВрдб рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

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

@TimWhiting рдлрд╝реНрд▓рдЯрд░ рдХреЗ рдбрд┐рдЬрд╝рд╛рдЗрди рджрд░реНрд╢рди рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рд╣рд┐рд╕реНрд╕рд╛ рд▓реЛрдЧреЛрдВ рдХреЛ рд╕рд╣реА рд╡рд┐рдХрд▓реНрдк рдХреА рдУрд░ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдХрд░рдирд╛ рд╣реИред рдореИрдВ рд▓реЛрдЧреЛрдВ рдХреЛ рдЙрд╕ рд╢реИрд▓реА рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬрд┐рд╕реЗ рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рджреВрд░ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛ред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рдЬрд░реВрд░рддреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдкреВрд░рд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рди рд╣реЛ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЗрд╕реЗ рдЬрд░реВрд░ рдЖрдЬрдорд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

@ рд╣рд┐рдХреНрд╕реА
рдмрд┐рд▓реНрдбрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдХреБрдЫ рдХреНрдпрд╛ рд╣реИ?

class _ExampleSimpleState extends State<ExampleSimple> with StatefulPropertyManager {
  StatefulAnimationProperty _anim1;
  StatefulAnimationBuilderProperty _anim2;

  <strong i="7">@override</strong>
  void initStatefulProperties({bool firstRun = false}) {
    _anim1 = initProperty(_anim1, StatefulAnimationProperty(duration: widget.duration1, playOnInit: true));
    _anim2 = initProperty(_anim3, StatefulAnimationBuilderProperty(duration: widget.duration3, playOnInit: true));
    super.initStatefulProperties(firstRun: firstRun);
  }

  <strong i="8">@override</strong>
  Widget build(BuildContext context) {
    return Container(
      color: Colors.red.withOpacity(_anim1.controller.value),
      child: _anim2(child: SomeChildWidget()),
    );
  }
}

рдХреНрдпрд╛ рдЖрдк рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд╣ рдХрд╣ рд░рд╣рд╛ рд╣реИ рдХрд┐ рд╕реНрдЯреЗрдЯрдлреБрд▓рдкреНрд░реЙрдкрд░реНрдЯреА рдЙрди рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╡реИрдХрд▓реНрдкрд┐рдХ рдирд┐рд░реНрдорд╛рдг рд╡рд┐рдзрд┐ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреА рд╣реИ рдЬрд┐рдирдореЗрдВ рдХреБрдЫ рджреГрд╢реНрдп рдШрдЯрдХ рд╣реИрдВ:

return Column(
   children: [
      TopContent(),
      _valueProperty.build(SomeChildWidget()),
   ]
)

рдЬреЛ рдХрд╛рдлреА рдЗрдореЛ рд╣реИ,

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

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

рдорд╛рди рд▓реАрдЬрд┐рдП рдЖрдкрдХреЗ рдкрд╛рд╕ рдпрд╣ рдХреЛрдб рдерд╛:

Widget build(BuildContext context) {
  return ExpensiveParent(
    child: ValueListenableBuilder(
      valueListenable: foo,
      child: ExpensiveChild(),
      builder: (BuildContext context, value, Widget child) {
        return SomethingInTheMiddle(
          value: value,
          child: child,
        );
      }
    ),
  );
}

... рдЖрдк рдЗрд╕реЗ рдХреИрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВрдЧреЗ?

@esDotDev рдореБрдЭреЗ рдЖрдкрдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИ рдХрд┐ рд╕рдВрдкрддреНрддрд┐ рд╣реА рдЯрд┐рдХрд░ рдкреНрд░рджрд╛рддрд╛ рд╣реИ, рдореИрдВрдиреЗ рдЙрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ред

рд╣рд╛рдВ рдЗрд╕ рд╣реБрдХ-рд╢реИрд▓реА рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рдмрд╕реЗ рдордЬрдмреВрдд рдкрд╣рд▓реБрдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рд╕реНрдЯреЗрдЯрдлреБрд▓ рд▓реЙрдЬрд┐рдХ рдХреЛ _ful_ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рднреА рд╣реЛред рддреЛ рдЗрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдПрд╕реА рдХреЗ рд▓рд┐рдП рдкреВрд░реА рд╕реВрдЪреА рд╣реИ:

  1. рдПрд╕реА рдмрдирд╛рдПрдВ
  2. рдЗрд╕реЗ рдПрдХ рдЯрд┐рдХрд░ рджреЗрдВ
  3. рд╡рд┐рдЬреЗрдЯ рдкрд░рд┐рд╡рд░реНрддрди рд╕рдВрднрд╛рд▓реЗрдВ
  4. рдПрд╕реА рдФрд░ рдЯрд┐рдХрд░ рдХреА рд╕рдлрд╛рдИ рд╕рдВрднрд╛рд▓реЗрдВ
  5. рдЯрд┐рдХ рдкрд░ рджреГрд╢реНрдп рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВ

рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЪреАрдЬреЗрдВ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд╕рд╛рде рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИрдВ (рдпрд╛ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдирд╣реАрдВ) 1,3,4 рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдФрд░ рджреЛрд╣рд░рд╛рд╡ рд╕реЗ, рдФрд░ рдЕрд░реНрдз-рдЬрд╛рджреБрдИ рд╕рд┐рдВрдЧрд▓рдЯрд┐рдХрд░рдкреНрд░реЛрд╡рд╛рдЗрдбрд░рдорд┐рдХреНрд╕рд┐рди 2 рдФрд░ 5 рдХреА рджреЗрдЦрднрд╛рд▓ рдХрд░ рд░рд╣рд╛ рд╣реИ (рд╣рдорд╛рд░реЗ рд╕рд╛рде 'рдЗрд╕' рдХреЛ рдмрдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рдорд╣реАрдиреЛрдВ рддрдХ рднреНрд░рдорд┐рдд рдХрд┐рдпрд╛! ) рдФрд░ рд╕рд┐рдВрдЧрд▓рдЯрд┐рдХрд░рдкреНрд░реЛрд╡рд╛рдЗрдбрд░рдорд┐рдХреНрд╕рд┐рди рд╕реНрд╡рдпрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдпрд╛рд╕ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдХреНрдпреЛрдВ рди рдХреЗрд╡рд▓ рд╕рднреА рддрд░рд╣ рд╕реЗ рдЬрд╛рдПрдВ рдФрд░ рд╣рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдЯрд┐рдХрд░рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рд▓рд╛рдЧреВ рдХрд░реЗрдВ, рдпрд╣ рдФрд░ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдЧрд╛ред

рдорд╛рди рд▓реАрдЬрд┐рдП рдЖрдкрдХреЗ рдкрд╛рд╕ рдпрд╣ рдХреЛрдб рдерд╛:

Widget build(BuildContext context) {
  return ExpensiveParent(
    child: ValueListenableBuilder(
      valueListenable: foo,
      child: ExpensiveChild(),
      builder: (BuildContext context, value, Widget child) {
        return SomethingInTheMiddle(
          value: value,
          child: child,
        );
      }
    ),
  );
}

... рдЖрдк рдЗрд╕реЗ рдХреИрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВрдЧреЗ?

class _ExampleSimpleState extends State<ExampleSimple> with StatefulPropertyManager {
  StatefulValueListenableBuilder _fooBuilder;

  <strong i="10">@override</strong>
  void initStatefulProperties({bool firstRun = false}) {
    _fooBuilder = initProperty(StatefulValueListenableProperty(valueListenable: widget.foo)); 
    super.initStatefulProperties(firstRun: firstRun);
  }

  <strong i="11">@override</strong>
  Widget build(BuildContext context) {
    return ExpensiveParent(
      child: SomethingInTheMiddle(
        _fooBuilder.value,
        _fooBuilder.builder(childBuilder: () => ExpensiveChild()),
      ),
    );
  }
}

@ рд╣рд┐рдХреНрд╕реА
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдкрдирд╛ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рд╢реЙрдЯ рджрд┐рдпрд╛ред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдореБрдЭреЗ рдХреБрдЫ рдпрд╛рдж рдЖ рдЧрдпрд╛ рд╣реЛред

рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛрдЧрд╛ рдХрд┐ рдмрд┐рд▓реНрдбрд░ рдмрдЪреНрдЪреЗ рдХреЛ рдХреИрд╢ рдХрд░рддрд╛ рд╣реИред рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрдЪреНрдЪреЗ рдХреЗ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрдм рд╣реЛрдЧреА? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣реА рд╡рд╣ рд╕рд╡рд╛рд▓ рдерд╛ рдЬрд┐рд╕реЗ рдЖрдк рдЙрдард╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рдереЗ..

@Hixie рдХреНрдпрд╛ рдЖрдкрдиреЗ https://github.com/flutter/flutter/issues/51752#issuecomment -671104377 рджреЗрдЦрд╛ рд╣реИ
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рдЕрдЪреНрдЫреЗ рдмрд┐рдВрджреБ рд╣реИрдВред
рдореИрдВ рдЖрдЬ рдмрд╣реБрдд рд╕рд╛рд░реЗ ValueListenableBuilder рдХреЗ рд╕рд╛рде рдХреБрдЫ рдмрдирд╛рддрд╛ рд╣реВрдВ рдФрд░ рдореИрдВ рдХреЗрд╡рд▓ рдЗрддрдирд╛ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕реЗ рдкрдврд╝рдирд╛ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред

@ рд╣рд┐рдХреНрд╕реА
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдкрдирд╛ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рд╢реЙрдЯ рджрд┐рдпрд╛ред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдореБрдЭреЗ рдХреБрдЫ рдпрд╛рдж рдЖ рдЧрдпрд╛ рд╣реЛред

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

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

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

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

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

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

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

рд╣реБрдХ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╣реЙрдЯ-рд░реАрд▓реЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
рдЧреИрд░-рдорд┐рд▓рд╛рди рд░рдирдЯрд╛рдЗрдо рд╡рд╛рд▓рд╛ рдкрд╣рд▓рд╛ рд╣реБрдХ рдмрд╛рдж рдХреЗ рд╕рднреА рд╣реБрдХ рдХреЛ рдирд╖реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред

рдпрд╣ рдЬреЛрдбрд╝рдиреЗ, рд╣рдЯрд╛рдиреЗ рдФрд░ рдкреБрди: рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рддрд░реНрдХ рд╣реИ рдХрд┐ рдкреВрд░реНрдг рдЕрдореВрд░реНрддрддрд╛ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореМрдЬреВрдж рд╣реИред

рдЕрдЧрд░ рдореИрдВ рдпрд╣ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдПрдирд┐рдореЗрдЯрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдпрд╛ рддреЛ рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджреЗрддрд╛ рд╣реВрдВ, рдпрд╛ рдЗрд╕рдореЗрдВ рдХреВрдж рдЬрд╛рддрд╛ рд╣реВрдВ, рдФрд░ рдпрд╣ рдареАрдХ рд╣реИ, рдЖрддреНрдо рдирд┐рд╣рд┐рдд рдФрд░ рд╕реБрд╕рдВрдЧрдд рд╣реИред

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

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

рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдКрдкрд░ @esDotDev рдФрд░ @TimWhiting рд╢реЛ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдФрд░ рдЗрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╣реБрдХ рдЬрд┐рддрдирд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдзрд┐рдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реИ

рдпрд╣ рдХреИрд╕реЗ рдЕрдзрд┐рдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реИ?

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

рд▓реЗрдХрд┐рди рдпрд╣ рдХрдИ рдореБрджреНрджреЛрдВ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ NNBD рдХреЗ рдмрд╛рдж рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╣рд░ рдЬрдЧрд╣ ! рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдирд╛ рдпрд╛ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдХрд┐рд╕реА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ didUpdateWidget рдЕрдВрджрд░ рдХрд┐рд╕реА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ?

  • рдХреНрдпрд╛ initProperties рдЬреАрд╡рди-рдЪрдХреНрд░ рд╕реЗ рдкрд╣рд▓реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛? рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдкреНрд░рддрд┐ рдмрд┐рд▓реНрдб рдХрдИ рдмрд╛рд░ рдЧреБрдгреЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИред
  • рдХреНрдпрд╛ initProperties didUpdateWidget рдХреЗ рдмрд╛рдж рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛? рдлрд┐рд░ didUpdateWidget рдХреЗ рдЕрдВрджрд░ рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкреБрд░рд╛рдиреА рд╕реНрдерд┐рддрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ

рддреЛ рдЕрдВрдд рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реБрдХ рдХреЗ рд╕рднреА рдореБрджреНрджреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди:

  • рд╣рдо 'рд╕реНрдЯреЗрдЯрд▓реЗрд╕рд╡рд┐рдЬреЗрдЯ' рдХреЗ рдЕрдВрджрд░ рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рддреЛ StreamBuilder/ValueListenableBuilder/... рдХреА рдкрдардиреАрдпрддрд╛ рдЕрднреА рднреА рдПрдХ рдореБрджреНрджрд╛ рд╣реИ - рдЬреЛ рдореБрдЦреНрдп рдЪрд┐рдВрддрд╛ рдереАред
  • рдХрдИ рдХрд┐рдирд╛рд░реЗ-рдорд╛рдорд▓реЗ рд╣реИрдВ
  • рдХрд╕реНрдЯрдо рдЧреБрдг рдмрдирд╛рдирд╛ рдХрдард┐рди рд╣реИ (рд╣рдо рдХреЗрд╡рд▓ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЧреБрдгреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рдирд╣реАрдВ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ)
  • рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛ рдХрдард┐рди рд╣реИ

рдЕрдВрдд рдореЗрдВ, рджрд┐рдпрд╛ рдЧрдпрд╛ рдЙрджрд╛рд╣рд░рдг рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИ:

class Example extends StatelessWidget {
  <strong i="29">@override</strong>
  Widget build(context) {
    final value1 = keyword TweenAnimationBuilder(tween: Tween(begin: 0, end: 1));
    final value2 = keyword TweenAnimationBuilder(tween: Tween(begin: 0, end: 1));
    final value3 = keyword TweenAnimationBuilder(tween: Tween(begin: 0, end: 1));

    return Container(
     margin: EdgeInsets.symmetric(vertical: value2 * 20, horizontal: value3 * 30),
     color: Colors.red.withOpacity(value1),
      child: _anim2(child: SomeChildWidget()),
    );
  }
}

рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╛рдХреНрдп-рд╡рд┐рдиреНрдпрд╛рд╕ рдФрд░ рднреА рдмрд╣реБрдд рдХреБрдЫ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ:

рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд░рд┐рдЯрд░реНрди:

class Example extends StatelessWidget {
  <strong i="34">@override</strong>
  Widget build(context) {
    final value1 = keyword TweenAnimationBuilder(tween: Tween(begin: 0, end: 1));

    if (condition) {
      return Container();
    }

    final value2 = keyword TweenAnimationBuilder(tween: Tween(begin: 0, end: 1));

    ...
  }
}

рдЬреЛ value2 рдХрд╛ рдирд┐рдкрдЯрд╛рди рдХрд░реЗрдЧрд╛ рдЬрдм condition рдЭреВрдареЗ рдкрд░ рд╕реНрд╡рд┐рдЪ рд╣реЛ рдЬрд╛рдПрдЧрд╛

рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдореЗрдВ рдмрд┐рд▓реНрдбрд░реЛрдВ рдХреЗ рдмрдВрдбрд▓ рдирд┐рдХрд╛рд▓рдирд╛:

Widget build(context) {
  final foo = keyword FooBuilder();
  final bar = keyword BarBuilder();

  return Text('$foo $bar');
}

рдореЗрдВ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

Builder<String> LabelBuilder() builder* {
  final foo = keyword FooBuilder();
  final bar = keyword BarBuilder();

  return '$foo $bar';
}

Widget build(context) {
  final label = keyword LabelBuilder();

  return Text(label);
}

рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░реЗрдВ

child рдкреИрд░рд╛рдореАрдЯрд░ рдЕрднреА рднреА рд╕рдВрднрд╡ рд╣реИ:

Widget build(context) {
  final value = keyword StreamBuilder();

  return Builder(
    builder: (context, child) {
      final value2 = keyword TweenAnimationBuilder();
      final value = keyword ValueListenableBuilder();

      return Whatever(child: child);
    },
    child: ExpensiveChild()
  );
}

рднрд╛рд╖рд╛ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╢реБрдЧрд░ рднреА рд╣реЛ рд╕рдХрддреА рд╣реИ:

Widget build(context) {
  return Scaffold(
    body: {
      final value = keyword TweenAnimationBuilder();
      final value2 = keyword ValueListenableBuilder();

      return Text();
    },
  );
}

рдмреЛрдирд╕: рднрд╛рд╖рд╛ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рд╕рд╢рд░реНрдд рдХреЙрд▓ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ

рднрд╛рд╖рд╛ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдРрд╕реЗ рдкрд░рд┐рджреГрд╢реНрдп рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

Widget build(context) {
  String label;

  if (condition) {
    label = keyword LabelBuilder();
  } else {
    label = keyword AnotherBuilder();
  }

  final value2 = keyword WhateverBuilder();

  return ...
}

рдпрд╣ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдорд░реНрдерд┐рдд рд╣реИ - рдЪреВрдВрдХрд┐ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдХреЗ keyword рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ рдЬреЛ рдЕрдиреНрдпрдерд╛ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред

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

class _ExampleSimpleBuilderState extends State<ExampleSimpleBuilder> {
  <strong i="6">@override</strong>
  Widget build(BuildContext context) {
    return TweenAnimationBuilder<double>(
        tween: Tween(begin: 0, end: 1),
        duration: widget.duration1,
        builder: (_, value1, __) {
          return TweenAnimationBuilder<double>(
              tween: Tween(begin: 0, end: 1),
              duration: widget.duration2,
              builder: (_, value2, __) {
                return TweenAnimationBuilder<double>(
                    tween: Tween(begin: 0, end: 1),
                    duration: widget.duration3,
                    builder: (_, value3, __) {
                      return Container(
                        margin: EdgeInsets.symmetric(vertical: value2 * 20, horizontal: value3 * 30),
                        color: Colors.red.withOpacity(value1),
                      );
                    });
              });
        });
  }
}

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

рдпрд╣ рдХреИрд╕реЗ рдЕрдзрд┐рдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реИ?

рдпрд╣ рдПрдХ рдЖрджрд░реНрд╢ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдХрд┐ рдпрд╣ _ should_ рдПрдХ рдХреЛрд░ рдкреНрд▓рдЧрдЗрди imo рдХреНрдпреЛрдВ рд╣реИред рдпрд╣рд╛рдВ рдЖрд╡рд╢реНрдпрдХ рдбреЛрдореЗрди рдЬреНрдЮрд╛рди _deep_ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХреИрд╢рд┐рдВрдЧ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рдЬреНрдЮрд╛рди рд╣реИ, рдореЗрд░реЗ рдкрд╛рд╕ рд╣рд░ рдХрд┐рдирд╛рд░реЗ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдбреЛрдореЗрди рдЬреНрдЮрд╛рди рдХреЗ рдХрд░реАрдм рднреА рдирд╣реАрдВ рд╣реИ, рдпрд╛ рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣рдо рдкреНрд░рд╡реЗрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд░реЗрдореА рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдлрд╝реНрд▓рдЯрд░ рдЯреАрдо рдХреЗ рдмрд╛рд╣рд░ рджреБрдирд┐рдпрд╛ рдореЗрдВ 4 рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╣реИрдВ рдЬреЛ рдЗрд╕ рд╕рд╛рдорд╛рди рдХреЛ рдЬрд╛рдирддреЗ рд╣реИрдВ! (рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрддрд┐рд╢рдпреЛрдХреНрддрд┐)ред

рд╕реНрдЯреЗрдЯрд▓реЗрд╕ рд╡рд┐рдЬреЗрдЯреНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХрд╛ рдореБрджреНрджрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╣реИред рдПрдХ рддрд░рдл рдореИрдВ рд╕рдордЭ рдЧрдпрд╛, StatefulWidgets рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╣реИрдВред рджреВрд╕рд░реА рдУрд░, рдпрд╣рд╛рдБ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╢реБрджреНрдз рд╡рд╛рдЪрд╛рд▓рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдРрд╕реА рдХреЛрдИ рдмрдЧ рдирд╣реАрдВ рд╣реИ рдЬреЛ 2 рд╡рд░реНрдЧреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рд╕реЗ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдЧрдбрд╝рдмрдбрд╝ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рдВрдХрд▓рдХ рдЖрдкрдХреЛ рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рд╕реНрдЯреЗрдЯрд▓реЗрд╕рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рдХреБрдЫ рднреА рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИ рдЬреЛ рдореИрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рддреЛ рдореИрдВ рдЗрд╕реЗ рдПрдХ рдкреНрд░рдореБрдЦ рдореБрджреНрджрд╛ рд╣реЛрдиреЗ рдкрд░ рдмреЗрдЪрд╛ рдирд╣реАрдВ рдЧрдпрд╛ рд╣реВрдВ ... рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдЦрд┐рд░реА 5% рдЖрдИрдПрдордУ рд╣реИ, рдХреБрдЫ рдЕрдЯрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред

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

рд╕реНрдЯреЗрдЯрд▓реЗрд╕рд╡рд┐рдЬреЗрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЖрдИрдПрдордУ рдПрдХ рдмрдбрд╝реА рдмрд╛рдд рд╣реИред рд╡реИрдХрд▓реНрдкрд┐рдХ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ред

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

рдЗрддрдирд╛ рд╣реА рдирд╣реАрдВ, рдРрд╕реА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдЬрд╣рд╛рдВ рд╣рдо рдбрд╛рд░реНрдЯ (https://github.com/dart-lang/language/issues/418) рдореЗрдВ рдЙрдЪреНрдЪ-рдХреНрд░рдо рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдо рдХрдХреНрд╖рд╛рдУрдВ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ:

<strong i="9">@StatelessWidget</strong>
Widget Example(BuildContext context, {Key key, String param}) {
  final value = keyword StreamBuilder();

  return Text('$value');
}

рдлрд┐рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

Widget build(context) {
  // BuildContext and Key are automatically injected
  return Example(param: 'hello');
}

рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ function_widget рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИ - рдЬреЛ рдПрдХ рдХреЛрдб-рдЬрдирд░реЗрдЯрд░ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрдЧ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ - рдЬреЛ HookWidget рдХрд╛ рднреА рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

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

рдореИрдВ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ @ рд╣рд┐рдХреНрд╕реА рдХрд╛ рдорддрд▓рдм рдЕрдзрд┐рдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реИ, рдХреНрдпрд╛ рдпрд╣ рд╕рдВрдЪрд╛рд▓рди/рд╕рд╢рд░реНрдд рд╕рдорд╕реНрдпрд╛ рдХреЗ рдХреНрд░рдо рд╕реЗ рдЧреНрд░рд╕реНрдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддреБрд╢рд┐рд▓реНрдк рдкреАрдУрд╡реА рд╕реЗ рдмрд╣реБрдд 'рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп' рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЖрд╕рд╛рди рдирд┐рдпрдо рд╣реИ рд╕реАрдЦреЗрдВ рдФрд░ рдПрдХ рдмрд╛рд░ рд╕реАрдЦреЗ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдЙрд▓реНрд▓рдВрдШрди рди рдХрд░реЗрдВ)ред

рд▓реЗрдХрд┐рди рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдЖрдкрдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рднреА рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирдП рдХреАрд╡рд░реНрдб рдХрд╛ рдорд╛рдорд▓рд╛ рдХрд╛рдлреА рдордЬрдмреВрдд рд╣реИ:

  • рд░рд╛рдЬреНрдп рдкрд░ рдЧреНрд░рд╛рдлреНрдЯрд┐рдВрдЧ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рдФрд░ рд░рдЪрдирд╛ рдпреЛрдЧреНрдп
  • рдФрд░ рднреА рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд╛рдХреНрдп рд░рдЪрдирд╛
  • рд╕реНрдЯреЗрдЯрд▓реЗрд╕ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ

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

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

рдореИрдВ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ @ рд╣рд┐рдХреНрд╕реА рдХрд╛ рдорддрд▓рдм рдЕрдзрд┐рдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реИ, рдХреНрдпрд╛ рдпрд╣ рд╕рдВрдЪрд╛рд▓рди/рд╕рд╢рд░реНрдд рд╕рдорд╕реНрдпрд╛ рдХреЗ рдХреНрд░рдо рд╕реЗ рдЧреНрд░рд╕реНрдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддреБрд╢рд┐рд▓реНрдк рдкреАрдУрд╡реА рд╕реЗ рдмрд╣реБрдд 'рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп' рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЖрд╕рд╛рди рдирд┐рдпрдо рд╣реИ рд╕реАрдЦреЗрдВ рдФрд░ рдПрдХ рдмрд╛рд░ рд╕реАрдЦреЗ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдЙрд▓реНрд▓рдВрдШрди рди рдХрд░реЗрдВ)ред

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

рдпрд╣ рдПрдХ рдЧреИрд░-рд╕рдорд╕реНрдпрд╛ рд╣реИ

рдЗрд╕реА рддрд░рд╣ рдпрджрд┐ рдХрд╕реНрдЯрдо рддреНрд░реБрдЯрд┐рдпрд╛рдБ рдиреЛ-рдЧреЛ рд╣реИрдВ, рддреЛ рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рд╕рдВрдкрддреНрддрд┐ рдареАрдХ рдЙрд╕реА рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдЧреНрд░рд╕реНрдд рд╣реИред
рд╣рдо рдпрдереЛрдЪрд┐рдд рд░реВрдк рд╕реЗ рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:

Property property;

<strong i="12">@override</strong>
void initProperties() {
  if (condition) {
    property = init(property, MyProperty());
  }
}

condition рдХреЛ рд╕рддреНрдп рд╕реЗ рдЕрд╕рддреНрдп рдореЗрдВ рдмрджрд▓рдиреЗ рд╕реЗ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдирд┐рдкрдЯрд╛рди рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рд▓реВрдк рдореЗрдВ рднреА рдирд╣реАрдВ рдХрд╣ рд╕рдХрддреЗред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдмрд╛рд░ рдХрд╛ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рд╣реИред рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд▓реВрдк рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓рд╛ рдХреНрдпрд╛ рд╣реИ?

рдФрд░ рдпрд╣ рддрдереНрдп рдХрд┐ рд╣рдо рдЧреБрдгреЛрдВ рдХреЛ рдХрд┐рд╕реА рднреА рдХреНрд░рдо рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЦрддрд░рдирд╛рдХ рд▓рдЧрддрд╛ рд╣реИ
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╣рдо рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:

Property first;
Property second;

<strong i="20">@override</strong>
void initProperties() {
  // The state of first depends on second, but second is updated after first
  // So we could end up in a bad state, similar to how the build method of a Widget should depend
  // on the context.size
  first = init(property, MyProperty(second?.value));

  second = init(property, Whatever());
}
> class _ExampleSimpleBuilderState extends State<ExampleSimpleBuilder> {
>   <strong i="5">@override</strong>
>   Widget build(BuildContext context) {
>     return TweenAnimationBuilder<double>(
>         tween: Tween(begin: 0, end: 1),
>         duration: widget.duration1,
>         builder: (_, value1, __) {
>           return TweenAnimationBuilder<double>(
>               tween: Tween(begin: 0, end: 1),
>               duration: widget.duration2,
>               builder: (_, value2, __) {
>                 return TweenAnimationBuilder<double>(
>                     tween: Tween(begin: 0, end: 1),
>                     duration: widget.duration3,
>                     builder: (_, value3, __) {
>                       return Container(
>                         margin: EdgeInsets.symmetric(vertical: value2 * 20, horizontal: value3 * 30),
>                         color: Colors.red.withOpacity(value1),
>                       );
>                     });
>               });
>         });
>   }
> }

рдпрд╣ рдРрд╕рд╛ рдЕрдЬреАрдм рдЙрджрд╛рд╣рд░рдг рд╣реИред рдХреНрдпрд╛ рдЖрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реИрдВ рдХрд┐ AnimatedContainer рдкрд╣рд▓реЗ рд╕реЗ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

рдмреЗрд╢рдХред рдпрд╣рд╛рдВ рдЙрджрд╛рд╣рд░рдг "X" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╡рд┐рдЬреЗрдЯ рдореЗрдВ 3 рдПрдирд┐рдореЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕ рдХреЛ рдЬрд╛рдирдмреВрдЭрдХрд░ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

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

рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреБрдЫ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп, рдмрд┐рд▓реНрдбрд░реНрд╕ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЖрдкрдХреЛ рдкрдардиреАрдпрддрд╛ (рдФрд░ рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдпрддрд╛) рдЫреЗрдж рдореЗрдВ рдЪрд┐рдкрдХрд╛рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рд╡реЗ рд╕рд░рд▓ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИрдВ, рд╡реЗ "рд░рдЪрдирд╛" рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдХреБрдВрдЖред 2 рдпрд╛ рдЕрдзрд┐рдХ рдЪреАрдЬреЛрдВ рдХрд╛ рд╕рдВрдШрдЯрди рд╣реЛрдирд╛ред

рдореИрдВ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рди рдХрд░реЗрдВред рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ,...

... рдФрд░ рд╡рд╛рдкрд╕ рдПрдХ рд╡рд░реНрдЧ рдореЗрдВред рдЖрдк рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрджрд╛рд╣рд░рдг рдХреНрдпреЛрдВ рдирд╣реАрдВ рд▓рд╛рддреЗ?

рдЖрдкрдХреЛ рдЬрдЯрд┐рд▓ рдПрдирд┐рдореЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрджрд╛рд╣рд░рдг рдЪрд╛рд╣рд┐рдП?
https://github.com/gskinnerTeam/flutter_vignettes

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

рдмреЗрд╢рдХред рдпрд╣рд╛рдВ рдЙрджрд╛рд╣рд░рдг "X" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╡рд┐рдЬреЗрдЯ рдореЗрдВ 3 рдПрдирд┐рдореЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕ рдХреЛ рдЬрд╛рдирдмреВрдЭрдХрд░ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд╡рд┐рдЬреЗрдЯ "рдХреЛрд░" рд╕реМ рд▓рд╛рдЗрдиреЗрдВ рдпрд╛ рдХреБрдЫ рдФрд░ рд╣реЛрдЧрд╛

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

рдореИрдВ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рди рдХрд░реЗрдВред рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ,...

... рдФрд░ рд╡рд╛рдкрд╕ рдПрдХ рд╡рд░реНрдЧ рдореЗрдВред рдЖрдк рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрджрд╛рд╣рд░рдг рдХреНрдпреЛрдВ рдирд╣реАрдВ рд▓рд╛рддреЗ?

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

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

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

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

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

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

рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рддрд░реНрдХ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдерд╛, рддреЛ рдореИрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рдРрд╕реЗ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛ рдХреНрдпреЛрдВ рдмрд░реНрджрд╛рд╢реНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдЬрдмрдХрд┐ рдПрдХ рд╣реА рдмрд╛рдд рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХрд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╕рдордХрдХреНрд╖ рддрд░реАрдХрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ? рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЕрдореВрд░реНрдд рдмрдирд╛рдиреЗ рдФрд░ рд╢реНрд░рдо рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╡рд░реНрдЧреЛрдВ рдФрд░ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдХреЛ рдмрд╛рд░-рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рдХрд░рдиреЗ рдХреА рдмрд╛рдд рдирд╣реАрдВ рджреЗрдЦрддрд╛ред

рдЖрдкрдХреЛ рдЬрдЯрд┐рд▓ рдПрдирд┐рдореЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрджрд╛рд╣рд░рдг рдЪрд╛рд╣рд┐рдП?
https://github.com/gskinnerTeam/flutter_vignettes

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЖрдк рдореБрдЭрд╕реЗ рдЖрдкрдХреА рдкреВрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреМрди рд╕реА рдлрд╛рдЗрд▓ рджреЗрдЦрдиреА рдЪрд╛рд╣рд┐рдП?

рдХреБрдЫ рдордирдорд╛рдирд╛ рдЬрдЯрд┐рд▓ рдПрдиреАрдореЗрд╢рди рджрд┐рдЦрд╛рдиреЗ рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

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

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

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ, рдЬрдм рдЖрдк рдПрдХ рдПрдирд┐рдореЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдРрд╕реА 6 рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рд╣рд░ рд╕рдордп рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдЬреАрд╡рдирдЪрдХреНрд░ рдХреЗ рд╣реБрдХ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ ?? рдареАрдХ рд╣реИ, рддреЛ рдЕрдм рдЗрд╕реЗ рдРрд╕реА рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рддрдХ рдмрдврд╝рд╛рдПрдБ рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреЛ рд╣рд░ рдмрд╛рд░ 6 рдЪрд░рдг рдХрд░рдиреЗ рд╣реЛрдВ... рдФрд░ рдЖрдкрдХреЛ рдЗрд╕реЗ 2 рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╛ рдЖрдкрдХреЛ рдЙрдирдореЗрдВ рд╕реЗ 3 рдХрд╛ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕рдХреЗ рдЪреЗрд╣рд░реЗ рдкрд░ рдПрдХ рдореБрджреНрджрд╛ рд╣реИ, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╕рдордЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдХреНрдпрд╛ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реВрдВред

рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЕрдореВрд░реНрдд рдмрдирд╛рдиреЗ рдФрд░ рд╢реНрд░рдо рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╡рд░реНрдЧреЛрдВ рдФрд░ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдХреЛ рдмрд╛рд░-рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рдХрд░рдиреЗ рдХреА рдмрд╛рдд рдирд╣реАрдВ рджреЗрдЦрддрд╛ред

__рд╕рднреА__? рддреЛ рдкреНрд░рджрд░реНрд╢рди, рд░рдЦрд░рдЦрд╛рд╡ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдирд╣реАрдВ рд╣реИ?

рдПрдХ рдмрд┐рдВрджреБ рдЖрддрд╛ рд╣реИ рдЬрдм рдПрдХ рд╢реНрд░рдо рдХреЛ "рд╕реНрд╡рдЪрд╛рд▓рд┐рдд" рдХрд░рдирд╛ рдФрд░ рд╢реНрд░рдо рдХреЛ "рдХрд░рдирд╛" рд╕рдорд╛рди рд╣реЛрддрд╛ рд╣реИред

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

@TimWhiting рдХреНрдпрд╛ рдЖрдк рдЕрдкрдиреЗ https://github.com/TimWhiting/local_widget_state_approaches рд░реЗрдкреЛ рдореЗрдВ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдлрд╝рд╛рдЗрд▓ рдбрд╛рд▓рдиреЗ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВрдЧреЗ? рдХреБрдЫ рд▓реЛрдЧ рд▓рд╛рдЧреВ рд▓рд╛рдЗрд╕реЗрдВрд╕ (рдмреАрдПрд╕рдбреА, рдПрдордЖрдИрдЯреА, рдпрд╛ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдЖрджрд░реНрд╢) рдХреЗ рдмрд┐рдирд╛ рдпреЛрдЧрджрд╛рди рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реИрдВред

рдореИрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рдРрд╕реЗ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛ рдХреНрдпреЛрдВ рдмрд░реНрджрд╛рд╢реНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдЬрдм рдПрдХ рд╣реА рдмрд╛рдд рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХрд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╕рдордХрдХреНрд╖ рддрд░реАрдХрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ?

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

рдмрд╕ gifs рдХреЛ рд╕реНрдХреИрди рдХрд░реЗрдВ рдФрд░ рдХрд▓реНрдкрдирд╛ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреИрд╕реЗ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред

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

рд╡реИрд╕реЗ рднреА рдпрд╣ рдЪрд░реНрдЪрд╛ рдЕрдзрд┐рдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЕрд╕рд╣рдорддрд┐ рдХреЗ рд╕рд╛рде рд╣рд╛рде рд╕реЗ рдирд┐рдХрд▓ рд░рд╣реА рд╣реИред рд╣рдореЗрдВ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрджрд┐ рд╡рд┐рд░реЛрдзреА, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдерд╛, рд╣реБрдХ рд╕рдорд░реНрдердХ рдЫреЛрдЯреЗ рдЙрджрд╛рд╣рд░рдг рдХреИрд╕реЗ рджрд┐рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдРрд╕реЗ рд╕реБрдзрд╛рд░ рдЦреЛрдЬреЗрдВ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЕрднреА рдХреЗ рд▓рд┐рдП @TimWhiting рдХреЗ рднрдВрдбрд╛рд░ рдореЗрдВ рдпреЛрдЧрджрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред

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

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

рдХреБрдЫ рдРрд╕рд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдЕрдиреБрд░реЛрдз рдЬреЛ рдЖрдЬ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рд╡рд┐рд╖рдп рд╕реЗ рдкрд░реЗ рд╣реИред

@TimWhiting рдХреНрдпрд╛ рдЖрдк рдЕрдкрдиреЗ https://github.com/TimWhiting/local_widget_state_approaches рд░реЗрдкреЛ рдореЗрдВ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдлрд╝рд╛рдЗрд▓ рдбрд╛рд▓рдиреЗ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВрдЧреЗ? рдХреБрдЫ рд▓реЛрдЧ рд▓рд╛рдЧреВ рд▓рд╛рдЗрд╕реЗрдВрд╕ (рдмреАрдПрд╕рдбреА, рдПрдордЖрдИрдЯреА, рдпрд╛ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдЖрджрд░реНрд╢) рдХреЗ рдмрд┐рдирд╛ рдпреЛрдЧрджрд╛рди рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реИрдВред

рдХрд┐рдпрд╛ рд╣реБрдЖред рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕рдордп рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдореИрдВ рдЗрд╕ рд╕рдкреНрддрд╛рд╣ рдХрд┐рд╕реА рд╕рдордп рдЙрд╕ рдкрд░ рдкрд╣реБрдВрдЪ рдЬрд╛рдКрдВрдЧрд╛ред

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

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

рдХреБрдЫ рдРрд╕рд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдЕрдиреБрд░реЛрдз рдЬреЛ рдЖрдЬ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рд╡рд┐рд╖рдп рд╕реЗ рдкрд░реЗ рд╣реИред

рдореИрдВрдиреЗ рдЬреЛ рдХрд╣рд╛ рд╣реИ рдЙрд╕реЗ рджреЛрдмрд╛рд░рд╛ рджреЛрд╣рд░рд╛рдПрдВред

рдПрдирд┐рдореЗрд╢рди, рд╕реНрдЯреЗрдЯреНрд╕ рдЖрджрд┐ рд╕реЗ рдЬреБрдбрд╝реЗ рдХреБрдЫ рдордирдорд╛рдиреЗ рдЬрдЯрд┐рд▓ , рдЬрд┐рдиреНрд╣реЗрдВ рд▓рд┐рдЦрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдФрд░ рдЬрд┐рдиреНрд╣реЗрдВ рдкреНрд░рджрд░реНрд╢рди рдХреЛ

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

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

@TimWhiting рдХреНрдпрд╛ рдЖрдк рдЕрдкрдиреЗ https://github.com/TimWhiting/local_widget_state_approaches рд░реЗрдкреЛ рдореЗрдВ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдлрд╝рд╛рдЗрд▓ рдбрд╛рд▓рдиреЗ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВрдЧреЗ? рдХреБрдЫ рд▓реЛрдЧ рд▓рд╛рдЧреВ рд▓рд╛рдЗрд╕реЗрдВрд╕ (рдмреАрдПрд╕рдбреА, рдПрдордЖрдИрдЯреА, рдпрд╛ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдЖрджрд░реНрд╢) рдХреЗ рдмрд┐рдирд╛ рдпреЛрдЧрджрд╛рди рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реИрдВред

рдореИрдВрдиреЗ рдЗрди рд╡рд┐рднрд┐рдиреНрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдФрд░ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯреНрд╕ рдХреЛ рдмрдирд╛рдиреЗ рдореЗрдВ рд▓рдЧрднрдЧ 6 рдШрдВрдЯреЗ рдмрд┐рддрд╛рдПред рд▓реЗрдХрд┐рди рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╕рд╛рдмрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдЯрд┐рд▓ рдПрдирд┐рдореЗрд╢рди рдХреЗ рдареЛрд╕ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рд╡реЗ рдореМрдЬреВрдж рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдиреБрд░реЛрдз рдореВрд▓ рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдХрд┐рд╕реА рдРрд╕реА рдЪреАрдЬрд╝ рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реИ рдЬрд┐рд╕реЗ AnimatedContainer рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

Container(margin: EdgeInsets.symmetric(vertical: value2 * 20, horizontal: value3 * 30), color: Colors.red.withOpacity(value1));

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рджреЛрдиреЛрдВ рдмрд┐рд▓реНрдбрд░реЛрдВ, рдФрд░ рд╡реЗрдирд┐рд▓рд╛ рд░рд╛рдЬреНрдп-рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЙрддреНрдХреГрд╖реНрдЯ рд╡рд┐рд╣рд┐рдд рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд┐рдП рд╣реИрдВ:
https://github.com/flutter/flutter/issues/51752#issuecomment -671566814
https://github.com/flutter/flutter/issues/51752#issuecomment -671489384

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

рдХреНрдпрд╛ рдЙрджрд╛рд╣рд░рдг рдЫрд╡рд┐рдпрд╛рдВ рдЬреЛ @esDotDev рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИрдВ, рдпрд╣ рджрд░реНрд╢рд╛рддреА рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ рдиреЗрд╕реНрдЯрд┐рдВрдЧ рдХреЛрдб рдХреЛ рдкрдврд╝рдиреЗ рдореЗрдВ рдХрдард┐рди рдмрдирд╛рддрд╛ рд╣реИ, рдЖрдкрдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдЧрд╛, @Rudiksz ? рдЙрдирдореЗрдВ рдХреНрдпрд╛ рдХрдореА рд╣реИ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд╣рд╛рдВ рдХреЛрдИ рдкреНрд░рджрд░реНрд╢рди рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдирд╣реАрдВ рд╣реИрдВ рд▓реЗрдХрд┐рди @rrousselGit рдпрдХреАрди рд╣реИ рдХрд┐ рд╡реЗ рдмрд┐рд▓реНрдбрд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рдкреНрд░рджрд░реНрд╢рди рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

@esDotDev рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд┐рдВрджреБ рдПрдХ рд╡рд┐рд▓рдХреНрд╖рдг рд╡рд┐рд╣рд┐рдд рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬрд┐рд╕рд╕реЗ рд╕рднреА рдЬреАрд╡рди рдЪрдХреНрд░ рдкреНрд░рдмрдВрдзрди рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ (рди рдХреЗрд╡рд▓ рд╣реБрдХ рдмрд▓реНрдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЕрдиреНрдп рднреА)ред рдпрд╣ TodoMVC рдХреЗ рд╕рдорд╛рди рд╕рд┐рджреНрдзрд╛рдВрдд рд╣реИ, рдЖрдк рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ React, Vue, Svelte, рдЖрджрд┐ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдЕрдиреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЙрдирдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ, рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рд╕рднреА рдПрдХ рд╣реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ, _then_ рдЖрдк рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рдЗрд╕реЗ рдПрдХ рдкреГрд╖реНрда рд╕реЗ рдмрдбрд╝рд╛ рдХреНрдпреЛрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

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

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, @TimWhiting рдХреЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдПрдХ рдкреВрд░реНрдг рд╡рд┐рдХрд╕рд┐рдд рдРрдк рдирд╣реАрдВ рд╣реИ, рдЗрд╕рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХрд╡рдЪрди рдкреГрд╖реНрда рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ, рдпрджрд┐ рдЖрдк рдЙрд╕ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд▓рд┐рдП рдПрдиреАрдореЗрд╢рди рдХрд╛ рдПрдХ рд╡рд┐рд╣рд┐рдд рдЙрджрд╛рд╣рд░рдг рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рд╕реЗ рдЕрдиреНрдп рд▓реЛрдЧ рдЕрдкрдирд╛ рд╕рдорд╛рдзрд╛рди рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

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

@ рд╣рд┐рдХреНрд╕реА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдРрдкреНрд╕ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрд░реЛрдз рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рд╣реИред

рджреЛ рджреЛрд╖ рд╣реИрдВ:

  • рд╣рдо рдЕрднреА рддрдХ рд╕рдорд╕реНрдпрд╛ рдкрд░ рд╕рд╣рдордд рдирд╣реАрдВ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХрд╣рд╛ рдерд╛ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдирд╣реАрдВ рд╕рдордЭрддреЗ рд╣реИрдВ
  • рд╣рдо рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрддреНрдкрд╛рджрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд▓рд╛рдкрддрд╛ рдЯреБрдХрдбрд╝реЗ рд╣реЛрдВрдЧреЗред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:

final snapshot = keyword StreamBuilder();

рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдкрд░ рдЕрдорд▓ рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИред

рд╣рдо рдкреНрд░рджрд░реНрд╢рди рдХреЛ рднреА рдирд╣реАрдВ рдЖрдВрдХ рд╕рдХрддреЗ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ POC рдмрдирд╛рдо рдкреНрд░реЛрдбрдХреНрд╢рди рдХреЛрдб рдХреА рддреБрд▓рдирд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред

рд╣рдо рдореВрд▓реНрдпрд╛рдВрдХрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ "рд╣реБрдХ рдХреЛ рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ" рддреНрд░реБрдЯрд┐-рдкреНрд░рд╡рдг рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рджреБрд░реБрдкрдпреЛрдЧ рд╣реЛрдиреЗ рдкрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдХрдВрдкрд╛рдЗрд▓рд░ рдПрдХреАрдХрд░рдг рдирд╣реАрдВ рд╣реИред

рдбрд┐рдЬрд╛рдЗрдиреЛрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдПрдкреАрдЖрдИ рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди, рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдкрд╣рд▓реЗ рдЪреАрдЬреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ ... рдпреЗ рд╕рднреА рдПрдкреАрдЖрдИ рдбрд┐рдЬрд╛рдЗрди рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВред рдореЗрд░реА рдиреМрдХрд░реА рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред :-) (рд╕реНрдкрдВрджрди рд╕рд╛рдорд╛рдиреНрдп рдЬреНрдЮрд╛рди: рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдбрд╛рд░реНрдЯ: ui рдмрдирд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ RenderObject рдФрд░ RenderBox et al рдХреА рдкрд╣рд▓реА рдХреБрдЫ рд╣рдЬрд╝рд╛рд░ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛?)

рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЛ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЕрд╕рдВрднрд╡ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдпрд╣рд╛рдВ рдХрд┐рдП рдЧрдП рдХреБрдЫ рдкреНрд░рд╕реНрддрд╛рд╡ рднрд╛рд╖рд╛ рдпрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВред рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕рдорд╛рдЬ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред

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

рдореИрдВрдиреЗ рдПрдХ 'рдЬрдЯрд┐рд▓' рдПрдиреАрдореЗрд╢рди рдкрд░рд┐рджреГрд╢реНрдп рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд░рдЦрд╛ рд╣реИ рдЬреЛ 3 рдПрдирд┐рдореЗрд╢рди рдХрд╛ рдЕрдЪреНрдЫрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдФрд░ рдХреНрд░реЙрдлреНрдЯ рд╕реЗ рдХрд╛рдлреА рднрд░рд╛ рд╣реБрдЖ рд╣реИред

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

рддреЛ рдпрд╣рд╛рдБ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдордЪрд╛рди рд╣реИ, рдЗрд╕рдореЗрдВ 3 рдкреИрдирд▓ рд╣реИрдВ рдЬреЛ рдЦреБрд▓реЗ рдФрд░ рдмрдВрдж рд╕реНрд▓рд╛рдЗрдб рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЕрд╕рддрдд рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рд╕рд╛рде 3 рдПрдирд┐рдореЗрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ AnimatorController рдХреЗ рдкреВрд░реНрдг рдирд┐рдпрдВрддреНрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, TweenAnimationBuilder рдареАрдХ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкреЗрдбрд╝ рдореЗрдВ рдкрд░рд┐рдгрд╛рдореА рдШреЛрдВрд╕рд▓рд╛ рдмрд╣реБрдд рдЕрд╡рд╛рдВрдЫрд┐рдд рд╣реЛрдЧрд╛ред рдореИрдВ рдкреЗрдбрд╝ рдХреЗ рдиреАрдЪреЗ рдЯреИрдм рдХреЛ рдШреЛрдВрд╕рд▓рд╛ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддрд╛, рдХреНрдпреЛрдВрдХрд┐ рдкреИрдирд▓реЛрдВ рдореЗрдВ рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рд╣реЛрддреА рд╣реИред рдПрдирд┐рдореЗрдЯреЗрдбрдХрдВрдЯреЗрдирд░ рдпрд╣рд╛рдВ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкреИрдирд▓ рдХреЛ рд╕реНрдХреНрд░реАрди рд╕реЗ рд╕реНрд▓рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд╡реЗ "рд╕реНрдХреНрд╡рд┐рд╢" рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
https://i.imgur.com/BW6M3uM.gif
image

class _SlidingPanelViewState extends State<SlidingPanelView> with TickerProviderStateMixin {
  AnimationController leftMenuAnim;
  AnimationController btmMenuAnim;
  AnimationController rightMenuAnim;

  <strong i="12">@override</strong>
  void initState() {
    // Here I have to pass vsync to AnimationController, so I have to include a SingleTickerProviderMixin and somewhat magically pass 'this' as vsync.
    leftMenuAnim = AnimationController(duration: widget.slideDuration, vsync: this);
    btmMenuAnim = AnimationController(duration: widget.slideDuration, vsync: this);
    rightMenuAnim = AnimationController(duration: widget.slideDuration, vsync: this);
    // Here I have to call forward 3 times, cause there's no way to automate this common setup behavior
    leftMenuAnim.forward();
    btmMenuAnim.forward();
    rightMenuAnim.forward();
    // Here I have to manually bind to build, cause there is encapsulate this common setup behavior
    leftMenuAnim.addListener(() => setState(() {}));
    btmMenuAnim.addListener(() => setState(() {}));
    rightMenuAnim.addListener(() => setState(() {}));
    super.initState();
  }

  // Following 2 fxn are a blind spot as far as compiler is concerned.
  // Things may, or may not be implemented correctly, no warnings, no errors.
  <strong i="13">@override</strong>
  void dispose() {
    btmMenuAnim.dispose();
    leftMenuAnim.dispose();
    rightMenuAnim.dispose();
    super.dispose();
  }

  <strong i="14">@override</strong>
  void didUpdateWidget(SlidingPanelView oldWidget) {
    if (leftMenuAnim.duration != widget.slideDuration) {
      leftMenuAnim.duration = widget.slideDuration;
      btmMenuAnim.duration = widget.slideDuration;
      rightMenuAnim.duration = widget.slideDuration;
    }
    super.didUpdateWidget(oldWidget);
  }

  // End error-prone blind spot without a single line of unique code
  // ~50 lines in we can start to see some unique code

  void _toggleMenu(AnimationController anim) {
    bool isOpen = anim.status == AnimationStatus.forward || anim.value == 1;
    isOpen ? anim.reverse() : anim.forward();
  }

  <strong i="15">@override</strong>
  Widget build(BuildContext context) {
    double leftPanelSize = 320;
    double leftPanelPos = -leftPanelSize * (1 - leftMenuAnim.value);
    double rightPanelSize = 230;
    double rightPanelPos = -rightPanelSize * (1 - rightMenuAnim.value);
    double bottomPanelSize = 80;
    double bottomPanelPos = -bottomPanelSize * (1 - btmMenuAnim.value);
    return Stack(
      children: [
        //Bg
        Container(color: Colors.white),
        //Content Panel
        Positioned(
          top: 0,
          left: leftPanelPos + leftPanelSize,
          bottom: bottomPanelPos + bottomPanelSize,
          right: rightPanelPos + rightPanelSize,
          child: ChannelInfoView(),
        ),
        //Left Panel
        Positioned(
          top: 0,
          left: leftPanelPos,
          bottom: bottomPanelPos + bottomPanelSize,
          width: leftPanelSize,
          child: ChannelMenu(),
        ),
        //Bottom Panel
        Positioned(
          left: 0,
          right: 0,
          bottom: bottomPanelPos,
          height: bottomPanelSize,
          child: NotificationsBar(),
        ),
        //Right Panel
        Positioned(
          top: 0,
          right: rightPanelPos,
          bottom: bottomPanelPos + bottomPanelSize,
          width: rightPanelSize,
          child: SettingsMenu(),
        ),
        // Buttons
        Row(
          children: [
            Button("left", ()=>_toggleMenu(leftMenuAnim)),
            Button("btm", ()=>_toggleMenu(btmMenuAnim)),
            Button("right", ()=>_toggleMenu(rightMenuAnim)),
          ],
        )
      ],
    );
  }
}

//Demo helpers
Widget Button(String lbl, VoidCallback action) => FlatButton(child: Text(lbl), onPressed: action, color: Colors.grey);
Widget ChannelInfoView() => _buildPanel(Colors.red);
Widget ChannelMenu() => _buildPanel(Colors.pink);
Widget SettingsMenu() => _buildPanel(Colors.blue);
Widget NotificationsBar() => _buildPanel(Colors.grey);
Widget _buildPanel(Color c) => Container(color: c, child: Container(color: Colors.white.withOpacity(.5)), padding: EdgeInsets.all(10));

рддреЛ, рдЙрд╕ рд╢рд░реАрд░ рдореЗрдВ резрежреж рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ, рд▓рдЧрднрдЧ рекреж% рдпрд╛ рддреЛ рд╢реБрджреНрдз рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ 15 рд▓рд╛рдЗрдиреЗрдВ, рдЬрд╣рд╛рдВ рдХреБрдЫ рднреА рдЧреБрдо рдпрд╛ рдЧрд▓рдд рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЧрдпрд╛, рд╣рд╛рд░реНрдб-рдЯреВ-рд╕реНрдкреЙрдЯ рдмрдЧ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИред

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

рдпрджрд┐ рд╣рдо 'рдХреАрд╡рд░реНрдб' рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╣рдо рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ 0% рддрдХ рдХрдо рдХрд░ рджреЗрддреЗ рд╣реИрдВред рдХрдХреНрд╖рд╛ рдХрд╛ рдкреВрд░рд╛ рдзреНрдпрд╛рди (рдЕрджреНрд╡рд┐рддреАрдп) рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдФрд░ рджреГрд╢реНрдп рд╡реГрдХреНрд╖ рддрддреНрд╡реЛрдВ рдкрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ StatefulWIdgets рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╣реБрдд рдЕрдзрд┐рдХ рджреБрд░реНрд▓рдн рдмрдирд╛рддреЗ рд╣реИрдВ, рдЕрдзрд┐рдХрд╛рдВрд╢ рджреГрд╢реНрдп 10 рдпрд╛ 20% рдХрдо рд╡рд░реНрдмреЛрдЬрд╝ рдФрд░ рдЕрдзрд┐рдХ рдХреЗрдВрджреНрд░рд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред

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

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

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

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

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

``` рдбрд╛рд░реНрдЯ
рд╡рд░реНрдЧ _SlidingPanelViewState рд░рд╛рдЬреНрдп рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ{
рдмреВрд▓ isLeftMenuOpen = true;
рдмреВрд▓ isRightMenuOpen = true;
рдмреВрд▓ isBtmMenuOpen = true;

@ рдУрд╡рд░рд░рд╛рдЗрдб
рд╡рд┐рдЬреЗрдЯ рдирд┐рд░реНрдорд╛рдг (рдмрд┐рд▓реНрдб рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ рд╕рдВрджрд░реНрдн) {
рд╡рд╛рдкрд╕реА рдЯреНрд╡реАрдирдПрдиреАрдореЗрд╢рдирдмрд┐рд▓реНрдбрд░(
рдмреАрдЪ: рдмреАрдЪ (рд╢реБрд░реВ: 0, рдЕрдВрдд: isLeftMenuOpen? 1: 0),
рдЕрд╡рдзрд┐: рд╡рд┐рдЬреЗрдЯ.рд╕реНрд▓рд╛рдЗрдбрдЕрд╡рдзрд┐,
рдмрд┐рд▓реНрдбрд░: (_, рд▓реЗрдлреНрдЯрдПрдиреАрдорд╡реИрд▓реНрдпреВ, __) {
рд╡рд╛рдкрд╕реА рдЯреНрд╡реАрдирдПрдиреАрдореЗрд╢рдирдмрд┐рд▓реНрдбрд░(
рдмреАрдЪ: рдмреАрдЪ (рд╢реБрд░реВ: 0, рдЕрдВрдд: isRightMenuOpen? 1: 0),
рдЕрд╡рдзрд┐: рд╡рд┐рдЬреЗрдЯ.рд╕реНрд▓рд╛рдЗрдбрдЕрд╡рдзрд┐,
рдмрд┐рд▓реНрдбрд░: (_, рд░рд╛рдЗрдЯрдПрдиреАрдорд╡реИрд▓реНрдпреВ, __) {
рд╡рд╛рдкрд╕реА рдЯреНрд╡реАрдирдПрдиреАрдореЗрд╢рдирдмрд┐рд▓реНрдбрд░(
рдмреАрдЪ: рдмреАрдЪ (рд╢реБрд░реВ: 0, рдЕрдВрдд: isBtmMenuOpen? 1: 0),
рдЕрд╡рдзрд┐: рд╡рд┐рдЬреЗрдЯ.рд╕реНрд▓рд╛рдЗрдбрдЕрд╡рдзрд┐,
рдирд┐рд░реНрдорд╛рддрд╛: (_, btmAnimValue, __) {
рдбрдмрд▓ рд▓реЗрдлреНрдЯрдкреИрдирд▓рд╕рд╛рдЗрдЬ = 320;
рдбрдмрд▓ рд▓реЗрдлреНрдЯрдкреИрдиреЗрд▓рдкреЛрд╕ = -рд▓реЗрдлреНрдЯрдкреИрдиреЗрд▓рд╕рд╛рдЗрдЬ * (1 - рд▓реЗрдлреНрдЯрдПрдирд┐рдорд╡реИрд▓реНрдпреВ);
рдбрдмрд▓ рд░рд╛рдЗрдЯрдкреИрдирд▓рд╕рд╛рдЗрдЬ = реирейреж;
рдбрдмрд▓ рд░рд╛рдЗрдЯрдкреИрдиреЗрд▓рдкреЛрд╕ = -рд░рд╛рдЗрдЯрдкреИрдиреЗрд▓рд╕рд╛рдЗрдЬ * (1 - рд░рд╛рдЗрдЯрдПрдиреАрдорд╡реИрд▓реНрдпреВ);
рдбрдмрд▓ рдмреЙрдЯрдордкреИрдиреЗрд▓рд╕рд╛рдЗрдЬ = реореж;
рдбрдмрд▓ рдмреЙрдЯрдордкреИрдиреЗрд▓рдкреЛрд╕ = -рдмреЙрдЯрдордкреИрдиреЗрд▓рд╕рд╛рдЗрдЬ * (1 - btmAnimValue);
рд╡рд╛рдкрд╕реА рдвреЗрд░ (
рдмрдЪреНрдЪреЗ: [
// рдмреАрдЬреА
рдХрдВрдЯреЗрдирд░ (рд░рдВрдЧ: рд░рдВрдЧред рд╕рдлреЗрдж),
// рдореБрдЦреНрдп рд╕рд╛рдордЧреНрд░реА рдХреНрд╖реЗрддреНрд░
рд╕реНрдерд┐рдд(
рд╢реАрд░реНрд╖: 0,
рд▓реЗрдлреНрдЯ: рд▓реЗрдлреНрдЯрдкреИрдирд▓рдкреЙрд╕ + рд▓реЗрдлреНрдЯрдкреИрдирд▓ рд╕рд╛рдЗрдЬ,
рдиреАрдЪреЗ: рдмреЙрдЯрдордкреИрдиреЗрд▓рдкреЙрд╕ + рдмреЙрдЯрдордкреИрдиреЗрд▓рд╕рд╛рдЗрдЬ,
рджрд╛рдПрдВ: рджрд╛рдПрдВрдкреИрдирд▓рдкреЛрд╕ + рджрд╛рдПрдВрдкреИрдиреЗрд▓рд╕рд╛рдЗрдЬ,
рдмрдЪреНрдЪрд╛: ChannelInfoView (),
),
// рд▓реЗрдлреНрдЯ рдкреИрдирд▓
рд╕реНрдерд┐рдд(
рд╢реАрд░реНрд╖: 0,
рд▓реЗрдлреНрдЯ: рд▓реЗрдлреНрдЯрдкреИрдирд▓рдкреЛрд╕,
рдмреЙрдЯрдо: рдмреЙрдЯрдордкреИрдирд▓рдкреЙрд╕ + рдмреЙрдЯрдордкреИрдиреЗрд▓рд╕рд╛рдЗрдЬ,
рдЪреМрдбрд╝рд╛рдИ: рдмрд╛рдПрдВ рдкреИрдирд▓ рдЖрдХрд╛рд░,
рдмрдЪреНрдЪрд╛: рдЪреИрдирд▓рдореЗрдиреВ (),
),
//рдиреАрдЪреЗ рдХрд╛ рдкреИрдирд▓
рд╕реНрдерд┐рдд(
рдмрд╛рдПрдВ: 0,
рджрд╛рдПрдВ: 0,
рдиреАрдЪреЗ: рдмреЙрдЯрдордкреИрдирд▓рдкреЛрд╕,
рдКрдВрдЪрд╛рдИ: рдирд┐рдЪрд▓рд╛ рдкреИрдирд▓ рдЖрдХрд╛рд░,
рдмрдЪреНрдЪрд╛: рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рдирдмрд╛рд░ (),
),
// рджрд╛рдпрд╛рдВ рдкреИрдирд▓
рд╕реНрдерд┐рдд(
рд╢реАрд░реНрд╖: 0,
рджрд╛рдПрдВ: рджрд╛рдПрдВрдкреИрдирд▓рдкреЙрд╕,
рдмреЙрдЯрдо: рдмреЙрдЯрдордкреИрдирд▓рдкреЙрд╕ + рдмреЙрдЯрдордкреИрдиреЗрд▓рд╕рд╛рдЗрдЬ,
рдЪреМрдбрд╝рд╛рдИ: рджрд╛рдпрд╛рдВ рдкреИрдирд▓ рдЖрдХрд╛рд░,
рдмрдЪреНрдЪрд╛: рд╕реЗрдЯрд┐рдВрдЧреНрд╕рдореЗрдиреВ (),
),
// рдмрдЯрди
рдкрдВрдХреНрддрд┐(
рдмрдЪреНрдЪреЗ: [
рдмрдЯрди ("рдмрд╛рдПрдВ", () => рд╕реЗрдЯрд╕реНрдЯреЗрдЯ (() => isLeftMenuOpen =! isLeftMenuOpen)),
рдмрдЯрди ("рдмреАрдЯреАрдПрдо", () => рд╕реЗрдЯрд╕реНрдЯреЗрдЯ (() => isBtmMenuOpen =! isBtmMenuOpen)),
рдмрдЯрди ("рджрд╛рдПрдВ", () => рд╕реЗрдЯрд╕реНрдЯреЗрдЯ (() => isRightMenuOpen =! isRightMenuOpen)),
],
)
],
);
},
);
},
);
},
);
}
}

рд╡рд╣ рдЖрдЦрд┐рд░реА рд╡рд╛рд▓рд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ ... рдореИрдВ рдореВрд▓ рд░реВрдк рд╕реЗ рд╕реБрдЭрд╛рд╡ рджреЗрдиреЗ рдЬрд╛ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдмрд┐рд▓реНрдбрд░реЛрдВ рдХреЛ рд╕реНрдЯреИрдХ рдХреЗ рдмрдЬрд╛рдп рд╕реНрдерд┐рддрд┐ рд╡рд╛рд▓реЗ рд╡рд┐рдЬреЗрдЯ рдХреЗ рдЖрд╕рдкрд╛рд╕ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдФрд░ рдореИрдВ рдЕрднреА рднреА рдмрд╛рдПрдВ рдФрд░ рджрд╛рдПрдВ рдкреИрдирд▓ рдХреЗ рд▓рд┐рдП рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛) рд▓реЗрдХрд┐рди рддрдм рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдиреАрдЪреЗ рд╡рд╛рд▓рд╛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ рддреАрдиреЛрдВ, рдФрд░ рдореИрдВрдиреЗ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рдмрд┐рд▓реНрдбрд░ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдПрдХ child рддрд░реНрдХ рджреЗ рд░рд╣рд╛ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ Container рдФрд░ Row рд╕реНрдерд┐рд░ рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдмрдирд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдкрд╣рд▓реЗ рдмрд┐рд▓реНрдбрд░ рдХреЗ рдКрдкрд░ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред

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

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

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

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

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

рд╕рдорд░реНрдкрд┐рдд RenderObject рдХреЗ рд▓рд┐рдП рд╢рд╛рдпрдж рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╕ред

рдпрд╛ 3 рдЖрд╕рд╛рдиреА рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд AnimatorObjects рдЬреЛ рд╕реНрд╡рдпрдВ рдХреЛ рд╡рд┐рдЬреЗрдЯ рдЬреАрд╡рдирдЪрдХреНрд░ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:D

рдЗрди рд╡рд┐рдЬреЗрдЯ рдХреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╡рд┐рдЬреЗрдЯ рд╣реЛрдиреЗ рд╕реЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реЛрддрд╛ рд╣реИред

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

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдо рд╕реНрд╡-рдирд┐рд╣рд┐рдд рд╡рд┐рдЧреЗрдЯреНрд╕ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд▓рдкреЗрдЯ рд░рд╣реЗ рд╣реИрдВ, рд╕реНрд╡-рдирд┐рд╣рд┐рдд рд╡рд┐рдЧреЗрдЯреНрд╕ рдХреА рдПрдХ рдФрд░ рдкрд░рдд рдХреЗ рд╕рд╛рде, рдмрд╕ рдЙрдиреНрд╣реЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдкреНрд░рджрд░реНрд╢рди рдЬреАрдд рд╣реИ? рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдореЗрдВ рдЙрд╕ рдврд╛рдВрдЪреЗ рдореЗрдВ рдзрдХреЗрд▓рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЬреЛ рд╣рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рди рдХрд┐ рд╡рд╣ рдЬреЛ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдФрд░ рд╕реБрд╕рдВрдЧрдд рддрд░реАрдХреЗ рд╕реЗ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рджреГрд╢реНрдп рдХреЛ рд▓рд┐рдЦрдирд╛ рд╣реИред

[рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ] рдореИрдВ рдЗрд╕ рд╕рдВрджрд░реНрдн рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реВрдВрдЧрд╛

рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдПрдХ рд╕рдорд░реНрдкрд┐рдд RenderObject рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрдиреЗ рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд▓реЗрдЖрдЙрдЯ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдПрдЧрд╛ред рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдПрдиреАрдореЗрд╢рди рдкрд╣рд▓реВ рдПрдХ рд╕реНрдЯреЗрдЯрдлреБрд▓ рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рд╣реЛрдЧрд╛, рдпрд╣ рдХреЗрд╡рд▓ рддреАрди 0..1 рдбрдмрд▓реНрд╕ (рд╡реИрд▓реНрдпреВ 1, рд╡реИрд▓реНрдпреВ 2, рд╡реИрд▓реНрдпреВ 3) рдХреЛ рд╕реНрдЯреИрдХ рдЧрдгрд┐рдд рдХреЗ рдмрдЬрд╛рдп рд░реЗрдВрдбрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдкрд╛рд╕ рдХрд░ рджреЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рдЬреНрдпрд╛рджрд╛рддрд░ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрдХреНрд╖ рд╣реИ; рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░ рдЬрд╣рд╛рдВ рдЖрдк рдпрд╣ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЖрдк рдЕрднреА рднреА рд╣реБрдХ рдпрд╛ рдЙрд╕ рд╕реНрдЯреЗрдЯрдлреБрд▓ рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ рдХрд╛ рд╕рд░рд▓реАрдХрд░рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдЕрдзрд┐рдХ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдиреЛрдЯ рдкрд░, рдореБрдЭреЗ @TimWhiting рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдбреЗрдореЛ рдмрдирд╛рдиреЗ рдореЗрдВ рдПрдХ рджрд░рд╛рд░ рдереА: https://github.com/TimWhiting/local_widget_state_approaches/pull/1
рдореИрдВ рдЙрддреНрд╕реБрдХ рд╣реВрдВ рдХрд┐ рдПрдХ рд╣реБрдХ рд╕рдВрд╕реНрдХрд░рдг рдХреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛ред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреНрд░рджрд░реНрд╢рди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ (рдпрд╛ рдЙрдиреНрд╣реЗрдВ рд╕реБрдзрд╛рд░рдирд╛; рд╡рд╣рд╛рдВ рдПрдХ рдРрд╕реА рдЬрдЧрд╣ рджрд┐рдЦрд╛ рд░рд╣рд╛ рд╣реИ рдЬрд╣рд╛рдВ рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЙрдк-рд░реВрдкреА рд╣реИ)ред

(рдореИрдВ рднреА рдмрд╣реБрдд рдЙрддреНрд╕реБрдХ рд╣реВрдВ рдЕрдЧрд░ рдпрд╣ рдРрд╕реА рдЪреАрдЬ рд╣реИ рдЬрд╣рд╛рдВ рд╣рдореЗрдВ рдЗрд╕реЗ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдорд┐рд▓ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдпрд╣рд╛рдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдпрд╛ рдпрджрд┐ рдЗрд╕рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪреАрдЬреЗрдВ рдЧреБрдо рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдореЗрдВ рдкреВрд░рд╛ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред)

рдХреНрдпрд╛ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкреБрдирд░реНрд╕реНрдерд╛рдкрдирд╛ рд╕рд╛рдордЧреНрд░реА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ? рдореБрдЭреЗ рдЗрд╕рдХреЗ рдХрд╛рд░рдг рдХрдард┐рди рд╕рдордп рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ RestorationMixin рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣реИ... рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕рдордЭрдиреЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рдордп рд▓рдЧреЗрдЧрд╛ред рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рд░реЗрдореА 4 рд╕реЗрдХрдВрдб рдХреЗ рдлреНрд▓реИрдЯ рдореЗрдВ рд╣реБрдХ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдХреНрд░реИрдВрдХ рдХрд░ рджреЗрдЧрд╛ :)

рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдмрд╣рд╛рд▓реА рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ HookWidget рдмрдЬрд╛рдп StatefulHookWidget рдЗрд╕ рд╕рдордп рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИред

рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рд╣рдореЗрдВ рдмрджрд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП

final value = useState(42);

рдореЗрдВ:

final value = useRestorableInt(42);

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

рдПрдХ рд╕рд╛рдЗрдб рдиреЛрдЯ рдХреЗ рд░реВрдк рдореЗрдВ, рд░рд┐рдПрдХреНрдЯ рд╣реБрдХ рдПрдХ "рдХреБрдВрдЬреА" рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ, рдЖрдорддреМрд░ рдкрд░ рдЗрд╕ рддрд░рд╣ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

int userId;

Future<User> user = useMemo(() => fetchUser(id), [id]);

рдЬрд╣рд╛рдВ рдЗрд╕ рдХреЛрдб рдХрд╛ рдЕрд░реНрде рд╣реИ "рдХреЙрд▓рдмреИрдХ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдХреИрд╢ рдХрд░реЗрдВ, рдФрд░ рдЬрдм рднреА рд╕рд░рдгреА рдХреЗ рдЕрдВрджрд░ рдХреБрдЫ рднреА рдмрджрд▓рддрд╛ рд╣реИ рддреЛ рдХреЙрд▓рдмреИрдХ рдХрд╛ рдкреБрдирд░реНрдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░реЗрдВ"

Flutter_hooks рдиреЗ рдЗрд╕рдХрд╛ 1to1 рдкреБрди: рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд┐рдпрд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдмрдВрджрд░рдЧрд╛рд╣ рд╣реИ), рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдо рдлрд╝реНрд▓рдЯрд░ рдЕрдиреБрдХреВрд▓рд┐рдд рдХреЛрдб рдХреЗ рд▓рд┐рдП рдпрд╣реА рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рд╣рдо рд╢рд╛рдпрдж рдЪрд╛рд╣реЗрдВрдЧреЗ:

int userId;

Future<User> user = useMemo1(id, (id) => fetchUser(id));

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

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

@ рд╣рд┐рдХреНрд╕реА рдореИрдВрдиреЗ рдЖрдкрдХреЗ рдПрдиреАрдореЗрд╢рди рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╣реБрдХ рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рд╣реИ

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

рдЬрдмрдХрд┐ рд╣реБрдХ рдХреЗ рд╕рд╛рде, рд╕рднреА рддрд░реНрдХреЛрдВ рдХреЛ рдШреЛрд╖рдгрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХреЛрдИ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

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

рд╣рдореЗрдВ рдПрдХ рдмреЗрд╣рддрд░ рд╣реЙрдЯ-рд░реАрд▓реЛрдб рднреА рдорд┐рд▓рддрд╛ рд╣реИред рд╣рдо рдкреГрд╖реНрдарднреВрдорд┐ рд░рдВрдЧ рдХреЗ рд▓рд┐рдП Timer.Periodic рдЕрд╡рдзрд┐ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рддреБрд░рдВрдд рдкреНрд░рднрд╛рд╡ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

@rrousselGit рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд▓рд┐рдВрдХ рд╣реИ? рдореИрдВрдиреЗ @TimWhiting рдХреЗ рднрдВрдбрд╛рд░ рдореЗрдВ рдХреБрдЫ рднреА рдирдпрд╛ рдирд╣реАрдВ рджреЗрдЦрд╛ред

рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдмрд╣рд╛рд▓реА рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ HookWidget рдмрдЬрд╛рдп StatefulHookWidget рдЗрд╕ рд╕рдордп рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИред

рд╣рдо рдЬреЛ рднреА рд╕рдорд╛рдзрд╛рди рд▓реЗрдХрд░ рдЖрддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЙрд╕реЗ рд╣рд░ рдЕрдВрддрд┐рдо рдорд┐рд╢реНрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЕрдЧрд░ рдХреЛрдИ рд╣рдорд╛рд░реЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рдЬреЛ TickerProviderStateMixin рдпрд╛ RestorationMixin рдХреА рддрд░рд╣ рдПрдХ рдорд┐рд╢реНрд░рдг рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

https://github.com/TimWhiting/local_widget_state_approaches/pull/3

рд╕рд╣рдордд рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд┐рдд рдирд╣реАрдВ рд╣реВрдВред useAnimationController рдХреЛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ SingleTickerProvider рдХреА рдкрд░рд╡рд╛рд╣ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

AutomaritKeepAlive рдЙрд╕реА рдЙрдкрдЪрд╛рд░ рд╕реЗ рд▓рд╛рднрд╛рдиреНрд╡рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдПрдХ рдЪреАрдЬ рдЬреЛ рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛, рд╡рд╣ рд╣реИ "useKeepAlive (рдмреВрд▓)" рд╣реБрдХ

рдпрд╣ рдорд┐рдХреНрд╕рд┐рди рдФрд░ "рд╕реБрдкрд░.рдмрд┐рд▓реНрдб (рд╕рдВрджрд░реНрдн)" рджреЛрдиреЛрдВ рд╕реЗ рдмрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдмрд╛рдж рд╡рд╛рд▓рд╛ рдХрд╛рдлреА рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛)

рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдмрд┐рдВрджреБ рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдЖрд╡рд╢реНрдпрдХ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИрдВред

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

рдХреБрдЫ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреЛ рдЕрдВрддрд░ рдореЗрдВ рдорд┐рд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐:

  • рддрд░реНрдХ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдЬреАрд╡рди-рдЪрдХреНрд░ рдореЗрдВ рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП StatefulWidget рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
  • рд╣реБрдХ рдкрд░рд┐рд╡рд░реНрддрди рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рдпреЛрдЧрд╛рддреНрдордХ рд╣реИрдВред рдореМрдЬреВрджрд╛ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд/рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

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

рдорд╛рдирд╛!
рдпрд╣ рдХреЛрдб-рд╕рдореАрдХреНрд╖рд╛рдУрдВ рдХреЛ рдкрдврд╝рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ:

final value = useSomething();
+ final value2 = useSomethingElse();

return Container(
  color: value.color,
-  child: Text('${value.name}'),
+  child: Text('${value.name} $value2'),
);

рдмрдирд╛рдо:

return SomethingBuilder(
  builder: (context, value) {
-    return Container(
-      color: value.color,
-      child: Text('$value'),
+    return SomethingElseBuilder(
+      builder: (context, value2) {
+        return Container(
+          color: value.color,
+          child: Text('${value.name} $value2'),
+        );
+      }
    );
  },
);

рджреВрд╕рд░реЗ рдЕрдВрддрд░ рдореЗрдВ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ Container рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реИ рдФрд░ рдХреЗрд╡рд▓ Text рдмрджрд▓ рдЧрдпрд╛ рд╣реИ

@rrousselGit рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреАрд╡рд░реНрдб рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЖрдЬрдорд╛рдиреЗ рдФрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рдХрд╛рдлреА рд╣рдж рддрдХ рдХреЗрд╡рд▓ рдПрдХ рд╕рдорд░реНрдкрд┐рдд 'рдЙрдкрдпреЛрдЧ' рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рд╣реБрдХ рдХреЗ рд╕рдорд╛рди рд╣реИ, рдпрд╛ рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдФрд░ рднреА рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ? рд╣реБрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рддреБрд▓рдирд╛ рдПрдХ рд╕рдорд╛рди рд╕реНрддрд░ рдкрд░ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдХрдИ рд╡рд┐рджреЗрд╢реА рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдВ рд╣реИрдВ рдЬреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдкреНрд░рднрд╛рд╡, рдЙрдкрдпреЛрдЧ рдореЗрдореЛ рдЗрддреНрдпрд╛рджрд┐ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдЕрдзрд┐рдХ рдЬрд╛рджреБрдИ рджрд┐рдЦрддрд╛ рд╣реИ?

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

рд╕реНрдЯреЗрдЯрдлреБрд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ, рд╣рдореЗрдВ рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

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

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

рдореИрдВ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдПрдХ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдбреЗрд╡рд▓рдкрд░ рдирд╣реАрдВ рд╣реВрдВред рд▓реЗрдХрд┐рди рддрд░реНрдХ рдХрд╛

рдореИрдВрдиреЗ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ Vue.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рдкрд╛рд╕ рдЕрдкрдиреЗ рдЕрдЧрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдПрдкреАрдЖрдИ (рд╣реБрдХ рд╕реЗ рдкреНрд░реЗрд░рд┐рдд) рднреА рд╣реИ, рдпрд╣ рджреЗрдЦрдиреЗ рд▓рд╛рдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

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

рдлрд┐рд░ рд╕реЗ рдкреНрд░реЗрд░рдгрд╛ рдЦрдВрдб рдУрдкреА рдХреЛ рдпрд╣рд╛рдБ рджреГрдврд╝рддрд╛ рд╕реЗ рдкреБрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ:

рдкреНрд░реЗрд░рдгрд╛
рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рд╕рдордп рдХреЗ рд╕рд╛рде рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдмрдврд╝рддреА рд╣реИрдВ, рдЬрдЯрд┐рд▓ рдШрдЯрдХреЛрдВ рдХрд╛ рдХреЛрдб рддрд░реНрдХ рдХрд░рдирд╛ рдХрдард┐рди рд╣реЛрддрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛрдб рдкрдврд╝ рд░рд╣реЗ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдЙрдиреНрд╣реЛрдВрдиреЗ рд╕реНрд╡рдпрдВ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдерд╛ред
[рд╡рд╣рд╛рдВ рдПрдХ] рдХрдИ рдШрдЯрдХреЛрдВ рдХреЗ рдмреАрдЪ рддрд░реНрдХ рдирд┐рдХрд╛рд▓рдиреЗ рдФрд░ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрд╡рдЪреНрдЫ рдФрд░ рд▓рд╛рдЧрдд рдореБрдХреНрдд рддрдВрддреНрд░ рдХрд╛ рдЕрднрд╛рд╡ рдерд╛ред

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

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

рдХреБрдЫ рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЦрдВрдбред

рдХреЗрд╡рд▓ рдШрдЯрдХреЛрдВ рдХрд╛ рд╣реЛрдирд╛ рд╣реА рдкрд░реНрдпрд╛рдкреНрдд рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ:

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

рддрд╛рд░реНрдХрд┐рдХ рд╡рд┐рдЦрдВрдбрди рдХреЛ рдХрдо рдХрд░рдиреЗ рдФрд░ рдЪреАрдЬреЛрдВ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдордЬрдмреВрддреА рд╕реЗ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрдЯ рдХрд░рдиреЗ рдкрд░ рдПрдХ рдЬреАрдд рдХреНрдпреЛрдВ рд╣реИ:

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

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

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

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

рддреЛ рдореЗрд░реЗ рд▓рд┐рдП, рдЬрд╛рдиреЗ рдХрд╛ рд░рд╛рд╕реНрддрд╛ рдХреЛрдб рдкреАрдврд╝реА рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИ - рдореИрдВрдиреЗ рдХреБрдЫ рдмрджрд▓рд╛рд╡реЛрдВ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджрд┐рдпрд╛ рд╣реИ: https://github.com/flutter/flutter/issues/63323

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

рдЗрд╕ рд╕реНрддрд░ рдкрд░ рд╣реБрдХ рдХреА рд╡реИрдзрддрд╛ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдирд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд┐рд╖рдп рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЕрднреА рднреА рд╕рдорд╕реНрдпрд╛ рдкрд░ рд╕рд╣рдордд рдирд╣реАрдВ рд╣реИрдВ рдЬрд╣рд╛рдБ рддрдХ рдореБрдЭреЗ рдкрддрд╛ рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рдХрдИ рдмрд╛рд░ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ, рдХрдИ рдЕрдиреНрдп рд╕рдорд╛рдзрд╛рди рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдХрдИ рднрд╛рд╖рд╛ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВред
рд╣реБрдХ рдХрд┐рд╕реА рдЕрдиреНрдп рддрдХрдиреАрдХ рд╕реЗ рдореМрдЬреВрджрд╛ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдПрдХ рдмрдВрджрд░рдЧрд╛рд╣ рд╣реИ рдЬреЛ рдЕрдкрдиреЗ рд╕рдмрд╕реЗ рдмреБрдирд┐рдпрд╛рджреА рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд╕реНрддрд╛ рд╣реИред

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

рдореИрдВ рдЗрд╕ рддрдереНрдп рдкрд░ рдЬреЛрд░ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рдЗрд╕рдХреЗ рдореВрд▓ рдореЗрдВ StreamBuilder рдЬреИрд╕реЗ рдкреИрдЯрд░реНрди рдХреЗ рд╕рд░рд▓реАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХрд╣ рд░рд╣рд╛ рд╣реИ:

  • StreamBuilder рдХреА рдиреЗрд╕реНрдЯрд┐рдВрдЧ рдХреЗ рдХрд╛рд░рдг рдЦрд░рд╛рдм рдкрдардиреАрдпрддрд╛/рд▓реЗрдЦрди рдХреНрд╖рдорддрд╛ рд╣реИ
  • StreamBuilder рдХреЗ рд▓рд┐рдП рдорд┐рдХреНрд╕рд┐рди рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИрдВ
  • рд╕рднреА StatefulWidgets рдореЗрдВ StreamBuilder рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ

рдЕрдм рддрдХ рдХреА рд╕рднреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ StreamBuilder рдХреЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рджреЛрдиреЛрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП (рдПрдХ рдбрд┐рд╕реНрдкреЛрдЬреЗрдмрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛, HTTP рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛, ...) рдпрд╛ рд╡рд┐рднрд┐рдиреНрди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджреЗрдирд╛ред

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдФрд░ рдХреНрдпрд╛ рдХрд╣рдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдо рдЖрдЧреЗ рдХреИрд╕реЗ рдкреНрд░рдЧрддрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣ рдХреНрдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдЗрд╕ рдХрдерди @Hixie рдореЗрдВ рдирд╣реАрдВ рд╕рдордЭрддреЗ/рдЕрд╕рд╣рдордд рдирд╣реАрдВ рд╣реИрдВ?

@rrousselGit рдХреНрдпрд╛ рдЖрдк рдПрдХ рдбреЗрдореЛ рдРрдк рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕реЗ рджрд┐рдЦрд╛рддрд╛ рд╣реИ? рдореИрдВрдиреЗ рдПрдХ рдбреЗрдореЛ рдРрдк рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрд╛рд╣рд┐рд░ рддреМрд░ рдкрд░ рдореБрдЭреЗ рд╡рд╣ рдЕрдзрд┐рдХрд╛рд░ рдирд╣реАрдВ рдорд┐рд▓рд╛ред (рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ "рд╕реНрдЯреНрд░реАрдордмрд┐рд▓реНрдбрд░ рдЬреИрд╕реЗ рдкреИрдЯрд░реНрди" рдФрд░ рдореИрдВрдиреЗ рдбреЗрдореЛ рдРрдк рдореЗрдВ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рд╣реИ, рдХреЗ рдмреАрдЪ рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИред)

  • StreamBuilder рдХреА рдиреЗрд╕реНрдЯрд┐рдВрдЧ рдХреЗ рдХрд╛рд░рдг рдЦрд░рд╛рдм рдкрдардиреАрдпрддрд╛/рд▓реЗрдЦрди рдХреНрд╖рдорддрд╛ рд╣реИ

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

рд╕рднреА StatefulWidgets рдореЗрдВ StreamBuilder рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ

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

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

рдирд┐рд╖реНрдкрдХреНрд╖ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕реЛрдЪрдирд╛ рдареАрдХ рд╣реИ рдХрд┐ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдкреИрдЯрд░реНрди рдЙрдирдХреЗ рдРрдк рдореЗрдВ рдЙрдЪрд┐рдд рдирд╣реАрдВ рд╣реИред (рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдврд╛рдВрдЪреЗ рдХреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдкреИрдХреЗрдЬ рдХреЛ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред) рдЕрдЧрд░ рдХреЛрдИ stream.listen рдпрд╛ StreamBuilder(stream) рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред

рдирд┐рд╖реНрдкрдХреНрд╖ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕реЛрдЪрдирд╛ рдареАрдХ рд╣реИ рдХрд┐ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдкреИрдЯрд░реНрди рдЙрдирдХреЗ рдРрдк рдореЗрдВ рдЙрдЪрд┐рдд рдирд╣реАрдВ рд╣реИред

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

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

  <strong i="10">@override</strong>
  Widget build(BuildContext context) {
    final value = useAnimation(animation);

    final screenHeight = MediaQuery.of(context).size.height;
    final textHeight =
        useMemoized(() => math.sqrt(screenHeight), [screenHeight]);

    return Text(
      'Change Duration',
      style: TextStyle(fontSize: 10.0 + value * textHeight),
    );
  }

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

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

рдпрд╣ рд╡рд╣ рдЖрдЙрдЯрдкреБрдЯ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдорд┐рд▓рддрд╛ рд╣реИ, рд╡рд┐рдЬреНрдЮрд╛рдкрди infinitumред

/flutter (28121): Use hook:_ListenableHook
I/flutter (28121): Is this the current hook:false
I/flutter (28121): 1: --- inside shouldPreserveState ----
I/flutter (28121): Hook1:Instance of '_ListenableHook'
I/flutter (28121): Hook1 keys:null
I/flutter (28121): Hook2 :Instance of '_ListenableHook'
I/flutter (28121): Hook2 keys:null
I/flutter (28121): 2. Shoud we preserve the  state of _ListenableHook:true
I/flutter (28121): 3: --------------
I/flutter (28121): checking if the listenable did change
I/flutter (28121): Did the listenable change?false
I/flutter (28121): Use hook:_MemoizedHook<double>
I/flutter (28121): Is this the current hook:false
I/flutter (28121): 1: --- inside shouldPreserveState ----
I/flutter (28121): Hook1:Instance of '_MemoizedHook<double>'
I/flutter (28121): Hook1 keys:[1232.0]
I/flutter (28121): Hook2 :Instance of '_MemoizedHook<double>'
I/flutter (28121): Hook2 keys:[1232.0]
I/flutter (28121): iterating over the hooks keys
I/flutter (28121): 2. Shoud we preserve the  state of _MemoizedHook<double>:true
I/flutter (28121): Use hook:_ListenableHook
I/flutter (28121): Is this the current hook:false
I/flutter (28121): 1: --- inside shouldPreserveState ----
I/flutter (28121): Hook1:Instance of '_ListenableHook'
I/flutter (28121): Hook1 keys:null
I/flutter (28121): Hook2 :Instance of '_ListenableHook'
I/flutter (28121): Hook2 keys:null
I/flutter (28121): 2. Shoud we preserve the  state of _ListenableHook:true

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

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

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

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

@ рд╣рд┐рдХреНрд╕реА рдЖрдкрдиреЗ рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм рдирд╣реАрдВ рджрд┐рдпрд╛ рд╣реИред рдРрд╕рд╛ рдХреНрдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдКрдкрд░ рд╕реВрдЪреАрдмрджреНрдз рдмреБрд▓реЗрдЯ рд╕реВрдЪреА рдореЗрдВ рдирд╣реАрдВ рд╕рдордЭрддреЗ/рд╕рд╣рдордд рдирд╣реАрдВ рд╣реИрдВ?

рдЖрдк рдореБрдЭреЗ рдХреНрдпрд╛ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдпрд╣ рдЬрд╛рдиреЗ рдмрд┐рдирд╛ рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддрд╛ред

@Rudiksz рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рднреА рд╕рдорд╛рдзрд╛рди рдкрд░ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдлрд╛рдЗрд▓ рдФрд░ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдХрд┐ рдпрд╣ рдЪреАрдЬреЛрдВ рдХреЛ рдФрд░ рдЦрд░рд╛рдм рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдореИрдВрдиреЗ @TimWhiting рдХреЛ рд╕рдмрдорд┐рдЯ рдХрд┐рдП рдЧрдП рдбреЗрдореЛ рдРрдк рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рд╣реИ,

@rrousselGit рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдкрд░ рдорд╛рддрдо рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрд╣реБрдд рд╡реНрдпрдХреНрддрд┐рдкрд░рдХ рд╣реИ рд▓реЗрдХрд┐рди рдЬрдм рд╕реЗ рдЖрдк рдкреВрдЫрддреЗ рд╣реИрдВ:

  • рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕реНрдЯреНрд░реАрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдмрдЪреВрдВрдЧрд╛ред ValueListenable IMHO рдХрдореЛрдмреЗрд╢ рд╕рдорд╛рди рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЗрд╣рддрд░ рдкреИрдЯрд░реНрди рд╣реИред
  • рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╕реНрдЯреНрд░реАрдордмрд┐рд▓реНрдбрд░ рдХреЛ рдкрдврд╝рдирд╛ рдпрд╛ рд▓рд┐рдЦрдирд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХрдард┐рди рд╣реИ; рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдХрд┐ @satvikpendem рдиреЗ рдкрд╣рд▓реЗ рдЯрд┐рдкреНрдкрдгреА рдХреА рдереА , рдореЗрд░рд╛ рдЗрддрд┐рд╣рд╛рд╕ HTML рдореЗрдВ рдЧрд╣рд░реЗ рдШреЛрдВрд╕рд▓реЗ рд╡рд╛рд▓реЗ рдкреЗрдбрд╝реЛрдВ рдХреЗ рд╕рд╛рде рд╣реИ, рдФрд░ рдореИрдВ рдЕрдм 4 рд╕рд╛рд▓ рд╕реЗ рдлрд╝реНрд▓рдЯрд░ рдкреЗрдбрд╝реЛрдВ рдХреЛ рдШреВрд░ рд░рд╣рд╛ рд╣реВрдВ (рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдХрд╣рд╛ рд╣реИ рдХрд┐ рдлрд╝реНрд▓рдЯрд░ рдХреА рдореБрдЦреНрдп рдпреЛрдЧреНрдпрддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╡рд┐рд╢рд╛рд▓ рдкреЗрдбрд╝реЛрдВ рдХреЛ рдХреБрд╢рд▓рддрд╛рдкреВрд░реНрд╡рдХ рдХреИрд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдП), рдЗрд╕рд▓рд┐рдП рд╕рдВрднрд╡рдд: рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдореЗрд░реА рд╕рд╣рдирд╢реАрд▓рддрд╛ рдЕрдзрд┐рдХ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рдореЗрд░реА рд░рд╛рдп рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдирд╣реАрдВ рд╣реИред
  • рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХрд┐ рдХреНрдпрд╛ StreamBuilder рдХреЗ рд▓рд┐рдП рдорд┐рд╢реНрд░рдг рдФрд░ рдХрд╛рд░реНрдп рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдк рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣реБрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдзрд╛рд░рд╛рдУрдВ рдХреЛ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдорд┐рд╢реНрд░рдг рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреБрдЫ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХрдХреНрд╖рд╛рдПрдВ рдпрд╣рд╛рдВ рдХрд░ рд╕рдХрддреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╡реЗ рдХреНрдпреЛрдВ рдХрд░реЗрдВрдЧреЗ рд╕рдорд╛рдзрд╛рди рднреА рдирд╣реАрдВ рд╣реИред
  • рдЕрдВрдд рдореЗрдВ, рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдпрд╣ рдПрдХ рд╡реНрдпрдХреНрддрд┐рдкрд░рдХ рдорд╛рдорд▓рд╛ рд╣реИред рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рддрд░реНрдХ рдХреЛ initState/didUpdateWidget/рдирд┐рдкрдЯрд╛рди/рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдХреЙрдкреА рдФрд░ рдкреЗрд╕реНрдЯ рдирд╣реАрдВ рдХрд░рддрд╛, рдореИрдВ рдЗрд╕реЗ рд╣рд░ рдмрд╛рд░ рдирдП рд╕рд┐рд░реЗ рд╕реЗ рд▓рд┐рдЦрддрд╛ рд╣реВрдВ, рдФрд░ рдпрд╣ рдЕрдзрд┐рдХрддрд░ рдареАрдХ рд▓рдЧрддрд╛ рд╣реИред рдЬрдм рдпрд╣ "рдирд┐рдпрдВрддреНрд░рдг рд╕реЗ рдмрд╛рд╣рд░" рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдореИрдВ рдЗрд╕реЗ StreamBuilder рдЬреИрд╕реЗ рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реВрдВред рддреЛ рдлрд┐рд░ рдореЗрд░реА рд░рд╛рдп рд╢рд╛рдпрдж рдпрд╣рд╛рдБ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдирд╣реАрдВ рд╣реИред

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

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

рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдХрд┐рд╕реА рдРрд╕реА рдЪреАрдЬ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдкреВрдЫ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдореЗрд░реЗ рд▓рд┐рдП "рд╕реНрдкрд╖реНрдЯ" рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╣реИред

рдореБрдЭреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдореЗрдВ рдХреЛрдИ рдЖрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдЙрдореНрдореАрдж рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдирд╣реАрдВ рд╕рдордЭрддреЗ рд╣реИрдВред

рдореБрдЭреЗ рдЬреЛ рдХреБрдЫ рднреА рдХрд╣рдирд╛ рдерд╛, рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдХрд╣ рджрд┐рдпрд╛ рд╣реИред
рдЖрдк рдЬреЛ рдирд╣реАрдВ рд╕рдордЭрддреЗ рд╣реИрдВ, рдЙрд╕реЗ рд╕рдордЭреЗ рдмрд┐рдирд╛ рдореИрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рд╡рд╣ рд╣реИ рдЦреБрдж рдХреЛ рджреЛрд╣рд░рд╛рдирд╛ред

рдореИрдВ рдпрд╣рд╛рдВ рдХреБрдЫ рд╕реНрдирд┐рдкреЗрдЯ рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЦреБрдж рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред
рдпрджрд┐ рд╕реНрдирд┐рдкреЗрдЯ рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рдерд╛, рддреЛ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕реЗ рдЪрд▓рд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рд╕реЗ рдХреБрдЫ рднреА рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред

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

рд╣реБрдХ рдХреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╡реЗ Iterable/Stream рдХреЗ рд╕рдорд╛рди рдПрдХ рдирдИ рднрд╛рд╖рд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ

рдлрд╝рдВрдХреНрд╢рдВрд╕ рд╡рд╣ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдЬреЛ рд╣реБрдХ рдХрд░рддреЗ рд╣реИрдВ - рдЙрдирдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд░рд╛рдЬреНрдп рдпрд╛ рдХреНрд╖рдорддрд╛ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рд╕реЗ рд╡рд┐рдЬреЗрдЯреНрд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред

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

@rrousselGit рдареАрдХ рд╣реИ, рдЪреВрдВрдХрд┐ рдЖрдкрдХреЛ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдореЗрдВ рдХреЛрдИ рдЖрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЪреВрдВрдХрд┐ рдореИрдВ рдЬрд┐рди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдкреВрдЫ рд░рд╣рд╛ рд╣реВрдВ, рд╡реЗ рд╕реНрдкрд╖реНрдЯ рд╣реИрдВ, рдЖрдЗрдП рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ рдФрд░ рд╡рд╣рд╛рдВ рд╕реЗ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░реЗрдВред

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

рдореИрдВ рдЗрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ред

рд▓реЗрдХрд┐рди рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ рдореИрдВ рд░рд┐рд╡рд░рдкреЙрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдУрдкрди-рд╕реЛрд░реНрд╕ рд╡реЗрджрд░ рдРрдк рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЬрдм рдпрд╣ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рддреЛ рдореИрдВ рдЗрд╕реЗ рдпрд╣рд╛рдВ рд▓рд┐рдВрдХ рдХрд░ рджреВрдВрдЧрд╛ред


рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдмрд┐рд▓реНрдбрд░реНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдкреНрд░рд╢реНрди рдкреВрдЫрдиреЗ рдХреЗ рд▓рд┐рдП рдЯреНрд╡рд┐рдЯрд░ рдкрд░ рдПрдХ рд╕рд░реНрд╡реЗрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИ:

https://twitter.com/remi_rousselet/status/1295453683640078336

рдорддрджрд╛рди рдЕрднреА рднреА рд▓рдВрдмрд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рд╡рд░реНрддрдорд╛рди рд╕рдВрдЦреНрдпрд╛рдПрдВ рд╣реИрдВ:

Screenshot 2020-08-18 at 07 01 44

рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ 200 рдореЗрдВ рд╕реЗ 86% рд▓реЛрдЧ рдмрд┐рд▓реНрдбрд░реНрд╕ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдиреЗрд╕реНрдЯрд┐рдВрдЧ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдЕрдкрдиреЗ рд▓рд┐рдП рдмреЛрд▓рддрд╛ рд╣реИред

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

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

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

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдБ рдХрдИ ValueListenableBuilder+TweenAnimationBuilder https://gist.github.com/rrousselGit/a48f541ffaaafe257994c6f98992fa73 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕рд╛рд░ рд╣реИ

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдБ рдХрдИ ValueListenableBuilder+TweenAnimationBuilder https://gist.github.com/rrousselGit/a48f541ffaaafe257994c6f98992fa73 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕рд╛рд░ рд╣реИ

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

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

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

import 'package:flutter/material.dart';
import 'package:flutter_mobx/flutter_mobx.dart';
import 'counters.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  <strong i="13">@override</strong>
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Home1(),
    );
  }
}

var counters = Counters();

class Home1 extends StatelessWidget {
  <strong i="14">@override</strong>
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Observer(
              builder: (context) => TweenAnimationBuilder<int>(
                duration: const Duration(seconds: 5),
                curve: Curves.easeOut,
                tween: IntTween(end: counters.firstCounter),
                builder: (context, value, child) {
                  return Text('$value');
                },
              ),
            ),
            RaisedButton(
              onPressed: () => counters.firstCounter += 100,
              child: Text('+'),
            ),
            // Both counters have voluntarily a different Curve and duration
            Observer(
              builder: (context) => TweenAnimationBuilder<int>(
                duration: const Duration(seconds: 2),
                curve: Curves.easeInOut,
                tween: IntTween(end: counters.secondCounter),
                builder: (context, value, child) {
                  return Text('$value');
                },
              ),
            ),
            RaisedButton(
              onPressed: () => counters.secondCounter += 100,
              child: Text('+'),
            ),
            const Text('total:'),
            // The total must take into account the animation of both counters
            Observer(
              builder: (context) => TweenAnimationBuilder<int>(
                duration: const Duration(seconds: 5),
                curve: Curves.easeOut,
                tween: IntTween(
                    end: counters.firstCounter + counters.secondCounter),
                builder: (context, value, child) {
                  return Text('$value');
                },
              ),
            ),
          ],
        ),
      ),
    );
  }
}

рдХрд╛рдЙрдВрдЯрд░реНрд╕.рдбрд╛рд░реНрдЯ рдЬрд┐рддрдирд╛ рд╕рд░рд▓ рд╣реИ...

part 'counters.g.dart';

class Counters = _Counters with _$Counters;
abstract class _Counters with Store {
  <strong i="18">@observable</strong>
  int firstCounter = 0;

  <strong i="19">@observable</strong>
  int secondCounter = 0;
}

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

https://gist.github.com/Rudiksz/cede1a5fe88e992b158ee3bf15858bd9

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

рдЖрдкрдХреЗ рдЕрдВрддрд┐рдо рд╕рд╛рд░ рдХреЗ рд▓рд┐рдП, TickerProvider рдЯреВрдЯрд╛ рд╣реБрдЖ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ TickerMode рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ - рди рд╣реА рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЛ рд╣рдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХрд╛ рдирд┐рдкрдЯрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдФрд░ Mobx рд╕рдВрднрд╡рддрдГ рдСрдл-рдЯреЙрдкрд┐рдХ рд╣реИред рд╣рдо рдЗрд╕ рдмрд╛рдд рдкрд░ рдЪрд░реНрдЪрд╛ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдкрд░рд┐рд╡реЗрд╢реА рд╕реНрдерд┐рддрд┐ / ValueListenable рдмрдирд╛рдо рд╕реНрдЯреЛрд░ рдмрдирд╛рдо рд╕реНрдЯреНрд░реАрдо рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдмрд▓реНрдХрд┐ рд╕реНрдерд╛рдиреАрдп рд░рд╛рдЬреНрдп / рдиреЗрд╕реНрдЯреЗрдб рдмрд┐рд▓реНрдбрд░реНрд╕ рд╕реЗ рдХреИрд╕реЗ рдирд┐рдкрдЯрд╛ рдЬрд╛рдП - рдЬрд┐рд╕реЗ Mobx рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╣рд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

тАФтАУтАУтАУ

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

рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП, рд╣реБрдХ рдХреЗ рд╕рд╛рде рд╣рдо рдХреЗрд╡рд▓ рдПрдХ рд╣реА рддрддреНрд╡ рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдмрд┐рд▓реНрдбрд░реНрд╕ рдХреЗ рд╕рд╛рде 2-4 рдмрд┐рд▓реНрдбрд░реНрд╕ рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рддреЛ рд╣реБрдХ рдмрд╣реБрдд рддреЗрдЬ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

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

рдЖрдкрдиреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рднреА рдирд╣реАрдВ рдХреАред рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдЖрдкрдХреЗ рдХреЛрдб рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛

рдЖрдкрдХреЗ рдЕрдВрддрд┐рдо рд╕рд╛рд░ рдХреЗ рд▓рд┐рдП, рдЯрд┐рдХрд░рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рдЯреВрдЯ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЯрд┐рдХрд░рдореЛрдб рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

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

рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП, рд╣реБрдХ рдХреЗ рд╕рд╛рде рд╣рдо рдХреЗрд╡рд▓ рдПрдХ рд╣реА рддрддреНрд╡ рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдмрд┐рд▓реНрдбрд░реНрд╕ рдХреЗ рд╕рд╛рде 2-4 рдмрд┐рд▓реНрдбрд░реНрд╕ рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВред рддреЛ рд╣реБрдХ рдмрд╣реБрдд рддреЗрдЬ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдирд╣реАрдВ, рдмрд╕ рдирд╣реАрдВред рдЖрдкрдХреЗ рд╣реБрдХ рд╡рд┐рдЬреЗрдЯ рд╣рд░ рдПрдХ рдмрд┐рд▓реНрдб рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЗ рд▓рд┐рдП рд▓рдЧрд╛рддрд╛рд░ рдорддрджрд╛рди рдХрд░рддреЗ рд╣реИрдВред valuelistenables рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдмрд┐рд▓реНрдбрд░реНрд╕ "рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓" рд╣реИрдВред

рдЗрд╕реА рддрд░рд╣, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЙрджрд╛рд╣рд░рдг ValueListenableBuilder рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдХреНрдпрд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ ред

рдФрд░ Mobx рд╕рдВрднрд╡рддрдГ рдСрдл-рдЯреЙрдкрд┐рдХ рд╣реИред рд╣рдо рдЗрд╕ рдмрд╛рдд рдкрд░ рдЪрд░реНрдЪрд╛ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдкрд░рд┐рд╡реЗрд╢реА рд╕реНрдерд┐рддрд┐ / ValueListenable рдмрдирд╛рдо рд╕реНрдЯреЛрд░ рдмрдирд╛рдо рд╕реНрдЯреНрд░реАрдо рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдмрд▓реНрдХрд┐ рд╕реНрдерд╛рдиреАрдп рд░рд╛рдЬреНрдп / рдиреЗрд╕реНрдЯреЗрдб рдмрд┐рд▓реНрдбрд░реНрд╕ рд╕реЗ рдХреИрд╕реЗ рдирд┐рдкрдЯрд╛ рдЬрд╛рдП - рдЬрд┐рд╕реЗ Mobx рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╣рд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

рдЖрдк рдордЬрд╛рдХ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореИрдВрдиреЗ рдЖрдкрдХрд╛ рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдпрд╛ рдФрд░ рдиреЗрд╕реНрдЯреЗрдб ValueListenableBuilders * рдФрд░ рдЯреНрд╡реАрди рдмрд┐рд▓реНрдбрд░реНрд╕ рдХреЗ рд╕рд╛рде "рдирд┐рдкрдЯрд╛рдпрд╛" ?! рдПрдХ рдмрд┐рдВрджреБ рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдХ рдореБрджреНрджреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдард╛рдпрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рдпрд╣ рд╡рд╛рдХреНрдп рдЗрд╕ рдЪрд░реНрдЪрд╛ рдХреЗ рдкреНрд░рддрд┐ рдЖрдкрдХреЗ рдкреВрд░реЗ рд░рд╡реИрдпреЗ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рд╣реБрдХ рдирд╣реАрдВ рд╣реИ рддреЛ рдпрд╣ "рдСрдл-рд╡рд┐рд╖рдп" рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЛ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╣реБрдХ рд╣реИ рдЬреЛ рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдореБрдЭреЗ рдПрдХ рд╡рд┐рд░рд╛рдо рджреЗрдВред

рдЖрдкрдиреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рднреА рдирд╣реАрдВ рдХреАред рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдЖрдкрдХреЗ рдХреЛрдб рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рдирд╣реАрдВ рд╣реИред рдкрд╣рд▓рд╛ рдХрд╛рдЙрдВрдЯрд░ 5 рд╕реЗрдХрдВрдб рд╕реЗ рдЕрдзрд┐рдХ рдФрд░ рджреВрд╕рд░рд╛ 2 рд╕реЗрдХрдВрдб рдореЗрдВ рдПрдирд┐рдореЗрдЯ рдХрд░рддрд╛ рд╣реИ - рдФрд░ рджреЛрдиреЛрдВ рдПрдХ рдЕрд▓рдЧ рдХрд░реНрд╡ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

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

рджреВрд╕рд░реА рдУрд░, рдЖрдкрдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕ рдорд╛рдорд▓реЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдиреЗ 2 TweenAnimationBuilders рдХреЛ рдПрдХ рдореЗрдВ рдорд┐рд▓рд╛ рджрд┐рдпрд╛ рд╣реИред
рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛:

Observer(
  builder: (context) {
    return TweenAnimationBuilder<int>(
      duration: const Duration(seconds: 5),
      curve: Curves.easeOut,
      tween: IntTween(end: counters.firstCounter),
      builder: (context) {
        return Observer(
          valueListenable: secondCounter,
          builder: (context, value2, child) {
            return TweenAnimationBuilder<int>(
              duration: const Duration(seconds: 2),
              curve: Curves.easeInOut,
              tween: IntTween(end: counters.secondCounter),
              builder: (context, value2, child) {
                return Text('${value + value2}');
              },
            );
          },
        );
      },
    );
  },
)

рджреЛ TweenAnimationBuilders рдЗрд╕ рддрдереНрдп рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВ рдХрд┐ рджреЛрдиреЛрдВ рдХрд╛рдЙрдВрдЯрд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдПрдирд┐рдореЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рджреЛ Observer рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдкрд╣рд▓рд╛ Observer counters.secondCounter рдкрд╛рд▓рди тАЛтАЛрдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ


рдирд╣реАрдВ, рдмрд╕ рдирд╣реАрдВред рдЖрдкрдХреЗ рд╣реБрдХ рд╡рд┐рдЬреЗрдЯ рд╣рд░ рдПрдХ рдмрд┐рд▓реНрдб рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЗ рд▓рд┐рдП рд▓рдЧрд╛рддрд╛рд░ рдорддрджрд╛рди рдХрд░рддреЗ рд╣реИрдВред valuelistenables рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдмрд┐рд▓реНрдбрд░реНрд╕ "рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓" рд╣реИрдВред

рдЖрдк рдЕрдирджреЗрдЦрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ Element рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╣реБрдХ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╡рд╣реА рд╣реЛрддрд╛ рд╣реИ: рд░рдирдЯрд╛рдЗрдо рдЯрд╛рдЗрдк рдФрд░ рдЪрд╛рдмрд┐рдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛, рдФрд░ рдпрд╣ рддрдп рдХрд░рдирд╛ рдХрд┐ рдПрдХ рдирдпрд╛ рддрддреНрд╡ рдмрдирд╛рдирд╛ рд╣реИ рдпрд╛ рдореМрдЬреВрджрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╣реИ

рдореИрдВрдиреЗ рдЖрдкрдХрд╛ рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдпрд╛ рдФрд░ рдиреЗрд╕реНрдЯреЗрдб ValueListenableBuilders * рдФрд░ рдЯреНрд╡реАрди рдмрд┐рд▓реНрдбрд░реНрд╕ рдХреЗ рд╕рд╛рде "рдирд┐рдкрдЯрд╛рдпрд╛"

рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдареАрдХ рд╣реЛ рдЧрдИ рд╣реИ, рдХрд┐рд╕ рдиреЗрд╕реНрдЯрд┐рдВрдЧ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛?

Observer(
  builder: (context) => TweenAnimationBuilder<int>(
    duration: const Duration(seconds: 5),
    curve: Curves.easeOut,
    tween: IntTween(end: counters.firstCounter),
    builder: (context, value, child) {
      return Text('$value');
    },
  ),
),

рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИ:

ValueListenableBuilder<int>(
  valueListenable: firstCounter,
  builder: (context, value, child) => TweenAnimationBuilder<int>(
    duration: const Duration(seconds: 5),
    curve: Curves.easeOut,
    tween: IntTween(end: value),
    builder: (context, value, child) {
      return Text('$value');
    },
  ),
),

рдШреЛрдВрд╕рд▓реЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВред

рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рд╕рд╛рд░ рдХреА рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИ TickerProvider / TickerMode ред vsync рдХреЛ SingleTickerProviderClientStateMixin рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрд╛ рдпрд╣ рдЕрдиреНрдпрдерд╛ рдореНрдпреВрдЯрд┐рдВрдЧ рддрд░реНрдХ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИред
рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдкрдиреЗ рдПрдХ рд▓реЗрдЦ рдореЗрдВ рд╕рдордЭрд╛рдпрд╛ рд╣реИ: https://dash-overflow.net/articles/why_vsync/

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

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

рджреВрд╕рд░реА рдУрд░, рдЖрдкрдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕ рдорд╛рдорд▓реЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдиреЗ 2 TweenAnimationBuilders рдХреЛ рдПрдХ рдореЗрдВ рдорд┐рд▓рд╛ рджрд┐рдпрд╛ рд╣реИред

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

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

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

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

рдореИрдВрдиреЗ рдХрд╛рдЙрдВрдЯрд░() рдХрдХреНрд╖рд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХрд╛ рдЙрджрд╛рд╣рд░рдг рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рднреА рдирд╣реАрдВред

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

рдХреНрдпрд╛? рдХреНрдпреЛрдВ? рдХреГрдкрдпрд╛ рд╕рдордЭрд╛рдПрдВ, рдореИрдВ рдХрд╛рдЙрдВрдЯрд░ рдХреНрд▓рд╛рд╕ рдХреЗ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдЙрджрд╛рд╣рд░рдг рдХреНрдпреЛрдВ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрд╛ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдЬреЗрдЯреНрд╕ рдореЗрдВ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛?

@Rudiksz рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рд╕рдорд╛рдзрд╛рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рддреБрдо рдХрд╣реЛ

рдореИрдВрдиреЗ рдХрд╛рдЙрдВрдЯрд░() рдХрдХреНрд╖рд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХрд╛ рдЙрджрд╛рд╣рд░рдг рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рднреА рдирд╣реАрдВред

рдФрд░ рдЕрднреА рддрдХ

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

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

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

рдЖрдкрдиреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рднреА рдирд╣реАрдВ рдХреАред рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдЖрдкрдХреЗ рдХреЛрдб рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИред

рдирд╣реАрдВ, рдмрд╕ рдирд╣реАрдВред

рдЖрдк рдордЬрд╛рдХ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореИрдВрдиреЗ рдЖрдкрдХрд╛ рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдпрд╛ рдФрд░ рдиреЗрд╕реНрдЯреЗрдб ValueListenableBuilders * рдФрд░ рдЯреНрд╡реАрди рдмрд┐рд▓реНрдбрд░реНрд╕ рдХреЗ рд╕рд╛рде "рдирд┐рдкрдЯрд╛рдпрд╛"

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

@rrousselGit

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

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

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

рдЖрдк рдЕрдкрдирд╛ рд╕рдорд╛рдзрд╛рди рд╡рд╣рд╛рдВ рдЬрдорд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рд╕рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИред

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

рдЖрдкрдиреЗ рдХреЛрдб рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ @rrousselGit рдХреЗ рд╣реБрдХ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рдлрд┐рд░ рднреА рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдордХрдХреНрд╖ рдирд╣реАрдВ рд╣реИ,

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

рдпрджрд┐ рдЖрдкрдХреЛ рдмрд╛рд╣рд░реА рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рдЪрд░реНрдЪрд╛ рдореЗрдВ рд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ, рддреЛ рдореИрдВ рднреА рд╣реВрдВред

рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп: рдиреАрдЪреЗ рд░реЗрдкреЛ рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ
https://github.com/Rudiksz/cbl_example

рдзреНрдпрд╛рди рджреЗрдВ:

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

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

рдмрд╕ рдЗрддрдирд╛ рд╣реАред

@Hixie рдХреНрдпрд╛ рдореБрдЭреЗ рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгреА рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдпрд╣ рдХрд╣рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рдореЗрд░рд╛ рдЙрджрд╛рд╣рд░рдг (https://github.com/TimWhiting/local_widget_state_approaches/blob/master/lib/hooks/animated_counter.dart) рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ?

рд╕рд╛рде рд╣реА, рдХреНрдпрд╛ рд╣рдо рдЬреВрдо/рдЧреВрдЧрд▓ рдореАрдЯ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдореБрдЭреЗ рдпрд╣ рднреА рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдХреА рдЦреБрдж рдХреА рдкреЛрд╕реНрдЯ рдкрд░ рдЗрдореЛрдЬреА-рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдХреНрдпрд╛ рдкреНрд░рднрд╛рд╡ рдкрдбрд╝рддрд╛ рд╣реИред

рдХреБрдЫ рдирд╣реАрдВред рдпрд╣ рдХрд┐рд╕реА рднреА рдЪреАрдЬ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИред рдЖрдк рдЗрд╕реЗ рдХреНрдпреЛрдВ рд▓рд╛рдП?

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

рдХреЗрд╡рд▓ рдЖрдк рд╣реА рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рд╣реИ

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

рдореБрдЭреЗ рдЙрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рдЖрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИ рдЬреИрд╕рд╛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рдЗрд╕рд╕реЗ рд╣рдореЗрдВ рдХреИрд╕реЗ рдкреНрд░рдЧрддрд┐ рд╣реЛрдЧреАред

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

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

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

рдореЗрд░реЗ рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдкреГрдереНрд╡реА рдореЗрдВ 2 рдЕрдВрдХ рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдП рд╣реИрдВ, рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдо рджреЛрдиреЛрдВ рдХреЗ рд╕рд╛рде рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рдмрд╣рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

  1. рдиреЗрд╕реНрдЯреЗрдб рдмрд┐рд▓реНрдбрд░реЛрдВ рдХреЛ рдкрдврд╝рдирд╛ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдХрдард┐рди рд╣реИ
  2. рдиреЗрд╕реНрдЯреЗрдб рдмрд┐рд▓реНрдбрд░реЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╡рд┐рдЬреЗрдЯ рдЬреАрд╡рдирдЪрдХреНрд░ рд╣реБрдХ рд╡рд╛рд▓реЗ рд░рд╛рдЬреНрдп рдХреЛ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрдЯ рдФрд░ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП _no way_ рдирд╣реАрдВ рд╣реИред

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

рд░реЗрдореА рдХрд╛ рд╕рд░реНрд╡реЗрдХреНрд╖рдг рд╣рдореЗрдВ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдлрд╝реНрд▓рдЯрд░ рджреЗрд╡ рдХреЗ ~ 80% рдЬрдм рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдиреЗрд╕реНрдЯреЗрдб рдмрд┐рд▓реНрдбрд░реЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдХреНрд╖рдорддрд╛ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрдореЛ рдХреЗ рд▓рд┐рдП рдмреЛрд▓рддрд╛ рд╣реИред рдЬрдм рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рднрд╛рд╡рдирд╛ рдЗрддрдиреА рд╕реНрдкрд╖реНрдЯ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕реЗ рдЗрд╕ рд╕реВрддреНрд░ рдореЗрдВ рд╣рдорд╕реЗ рд▓реЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

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

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

List<AnimationController> controllers = [];
int numAnimationControllers = 50;

<strong i="7">@override</strong>
void initState() {
    for (int i = 0; i < numAnimationControllers; i++)
        controllers.add(AnimationController(...));
}

<strong i="8">@override</strong>
void dispose() {
    for (int i = 0; i < numAnimationControllers; i++)
        controllers[i].dispose();
}

рд▓реЗрдХрд┐рди рд╣реБрдХ рдХреЗ рд╕рд╛рде рдореИрдВ рд▓реВрдк рдореЗрдВ useAnimationController рдХреЛ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдорд╛рдореВрд▓реА рдЙрджрд╛рд╣рд░рдг рд╣реИ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд╣реАрдВ рднреА рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдорд┐рд▓рд╛ред

@satvikpendem

рдореЗрд░реЗ рдРрдкреНрд╕ рд╕реЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рдЬреЛ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рд╣реИрдВ (рдХреБрдЫ рд╣реБрдХ рдЬреИрд╕реЗ рдкреЗрдЬрд┐рдиреЗрд╢рди рдХреЗ рд╕рд╛рде рдЕрдиреБрд░реЛрдз рднреЗрдЬрдирд╛ рдПрдХ рд╣реБрдХ рдореЗрдВ рд╡рд┐рд▓рдп/рд░рд┐рдлреИрдХреНрдЯрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдпрд╣рд╛рдВ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ):

рдкреГрд╖реНрда рдкрд░ рдЕрдВрдХ рд▓рдЧрд╛рдирд╛ рдХреЗ рд╕рд╛рде рд╕рд░рд▓ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛:

    final selectedTab = useState(SelectedTab.Wallet);
    final isDrawerOpen = useValueNotifier(false);
    final pageNo = useValueNotifier(0);
    final generalData = useValueNotifier(initialData);
    final services = useXApi();
    final isLoading = useValueNotifier(false);
    final waybillData = useValueNotifier<List<WaybillResponseModel>>([]);
    final theme = useTheme();
    final router = useRouter();

    fetchNextPage() async {
      if (isLoading.value || selectedTab.value != SelectedTab.Wallet) return;
      isLoading.value = true;
      final request = WaybillRequestModel()..pageNo = pageNo.value;
      final result = await services.waybillGetList(model: request);
      if (result.isOk && result.data.length > 0) {
        pageNo.value += 1;
        waybillData.value = [...waybillData.value, ...result.data];
      }
      isLoading.value = false;
    }

    // first fetch
    useEffect(() {
      fetchNextPage();
      return () {};
    }, []);

рдлреЙрд░реНрдо рд▓реЙрдЬрд┐рдХ (рдлреЛрди рдирдВрдмрд░ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд╕рд╛рде рд▓реЙрдЧрд┐рди рдлреЙрд░реНрдо рдФрд░ рдЯрд╛рдЗрдорд░ рдлрд┐рд░ рд╕реЗ рднреЗрдЬреЗрдВ):

    final theme = useTheme();
    final loginState = useValueNotifier(LoginState.EnteringNumber);
    final error = useValueNotifier<String>(null);
    final phoneNumberController = useTextEditingController(text: "");
    final phoneNumberFocusNode = useMemoized(() => FocusNode(), []);
    final otpFocusNode = useMemoized(() => FocusNode(), []);
    final otpController = useTextEditingController(text: "");
    final appState = Provider.of<AppStateController>(context);
    final services = useXApi();
    final router = useRouter();
    final resendTimerValue = useValueNotifier(0);
    useEffect(() {
      var timer = Timer.periodic(Duration(seconds: 1), (t) async {
        if (resendTimerValue.value > 0) resendTimerValue.value--;
      });
      return () => timer.cancel();
    }, []);

    final doLogin = () async {
      // login
      loginState.value = LoginState.LoggingIn;
      final loginResult = await services.authLoginOrRegister(
        mobileNumber: phoneNumberController.text,
      );
      if (loginResult.isOk) {
        loginState.value = LoginState.EnteringOtpCode;
        WidgetsBinding.instance.addPostFrameCallback((_) {
          FocusScope.of(context).requestFocus(otpFocusNode);
        });
        resendTimerValue.value = 30;
      } else {
        error.value = loginResult.errorMessage;
        loginState.value = LoginState.EnteringNumber;
        WidgetsBinding.instance.addPostFrameCallback((_) {
          FocusScope.of(context).requestFocus(phoneNumberFocusNode);
        });
      }
    };

рдПрдиреАрдореЗрд╢рди рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @rrousselGit рдкрд╣рд▓реЗ рд╣реА рдкрд░реНрдпрд╛рдкреНрдд рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░ рдЪреБрдХрд╛ рд╣реИред

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

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

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

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

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

рд╣рд┐рдХреНрд╕реА Google рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЙрд╕реЗ рдЖрдкрдХреЗ рд╕рд╛рде рдзреИрд░реНрдп рдФрд░ рд╡рд┐рдирдореНрд░ рд░рд╣рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЖрдкрдХреА рд╕рдЧрд╛рдИ рдХреА рдХрдореА рдкрд░ рдЖрдкрдХреЛ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд╣ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЕрдзрд┐рдХ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдХреНрдХрд╛ рджреЗрдирд╛ред

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

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

рдпрд╣ рдЙрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рд╣реЛрдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдХреА рдХрдореА рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред


рдмреЗрд╢рдХ, рдКрдкрд░ рд╕рдм рдХреБрдЫ "рд╕рд┐рд░реНрдл рдореЗрд░реА рд░рд╛рдп рд╣реИ"ред

рдореИрдВ рдЙрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣реБрдХ рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рджреЗрдЦрддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рдпрд╣ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдЬрд╣рд╛рдВ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рд╕рд╛рде рдХрдИ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ AnimationController s рд▓реЗрдХрд┐рди рд╣рдХреАрдХрдд рдореЗрдВ рдпрд╣ рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣реБрдХ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВ?

рдореВрд▓ рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдореЛрдбрд╝рдиреЗ рдХрд╛ рдПрдХ рд╣реБрдХ рддрд░реАрдХрд╛ рд╣реИ

var x1 = useState(1);
var x2 = useState(2);
var x3 = useState(3);

рдореЗрдВ

var xs = []
for (int i = 0; i < 3; i++)
     xs[i] = useState(i);

рд╣реБрдХ рдирд┐рдпрдореЛрдВ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд┐рдП рдмрд┐рдирд╛? рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рд╕рдордХрдХреНрд╖ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдкрдВрджрди рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдпрд╛ рд╣реИред рдореИрдВ рд╕реНрдкрдВрджрди рдореЗрдВ рд╣реБрдХ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдЕрдиреБрднрд╡реА рдирд╣реАрдВ рд╣реВрдВ рдЗрд╕рд▓рд┐рдП рд╡рд╣рд╛рдВ рдореЗрд░реЗ рд╕рд╛рде рд░рд╣реЗрдВред

рдореИрдВ рдмрд╕ рдЕрдкрдиреЗ рд╕рднреА initState рдХреЗ рд╕рд╛рде рдорд╛рдВрдЧ рдкрд░ рд╣реБрдХ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдиреАрдореЗрд╢рди рдХрдВрдЯреНрд░реЛрд▓рд░) рдХреА рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддрддреНрдХрд╛рд▓ рдирд┐рдкрдЯрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╣реБрдХ рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

@satvikpendem рдПрдХ рд╡рд░реНрдЧ рдкрд░ рдЧреБрдгреЛрдВ рдХреА рддрд░рд╣ рд╣реБрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдПрдХ рд▓реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдПрдХ-рдПрдХ рдХрд░рдХреЗ рдирд╛рдо рджреЗрддреЗ рд╣реИрдВ?

рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛

var x1 = useState(1);
var x2 = useState(2);
var x3 = useState(3);

рдЗрд╕ рдЙрдкрдпреЛрдЧрдХреЗрд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ:

var isLoading = useState(1);
var selectedTab = useState(2);
var username = useState(3); // text field

рдХреНрдпрд╛ рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ useState рдЖрдкрдХреЗ рд░рд╛рдЬреНрдп рддрд░реНрдХ рдХреЗ рдирд╛рдорд┐рдд рднрд╛рдЧ рд╕реЗ рдХреИрд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ? (рдЬреИрд╕реЗ isLoading рдХрд╛ useState рдРрдк рд▓реЛрдб рд╣реЛрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реЛрдиреЗ рдкрд░ рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИ)

рдЕрдкрдиреЗ рджреВрд╕рд░реЗ рд╕реНрдирд┐рдкреЗрдЯ рдореЗрдВ рдЖрдк useState рдХреЛ рд▓реВрдк рдореЗрдВ рдХреЙрд▓ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЖрдк рдПрдХ рдореВрд▓реНрдп рдзрд╛рд░рдХ рдХреЗ рд░реВрдк рдореЗрдВ useState рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЗ рд░рд╛рдЬреНрдп рддрд░реНрдХ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рд╕реВрдЪреА ListView рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рд╕рдореВрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ? рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдЖрдкрдХреЛ рд╕реВрдЪреА рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЖрдЗрдЯрдо рдХреЛ рдПрдХ рд░рд╛рдЬреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЛрдЪрдирд╛ рдЪрд╛рд╣рд┐рдП, рди рдХрд┐ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗред

final listData = useState([]);

рдпрд╣ рд╕рд┐рд░реНрдл useState рдФрд░ рдореИрдВ рдХреБрдЫ рд╣реБрдХ рдХреЛ рдХрд┐рд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдпрд╛ рд▓реВрдк рдореЗрдВ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ (рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдмрд╣реБрдд рджреБрд░реНрд▓рдн рд╣реИрдВ) рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рдХреЗ рд╣реБрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЗ рдмрдЬрд╛рдп рдбреЗрдЯрд╛ рдХреА рд╕реВрдЪреА рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рд╣реБрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

var single = useTest("data");
var list = useTests(["data1", "data2"]);
// which is equivalent to
var single1 = useTest("data1");
var single2 = useTest("data2");

рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рд╣реБрдХ рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЗ рд╕рд╛рде рдорд╛рдорд▓реЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд╣реБрдХ рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдХрдИ рдПрдирд┐рдореЗрд╢рди рдХрдВрдЯреНрд░реЛрд▓рд░ред

рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рд╢реБрд░реВ рдореЗрдВ рдХрд┐рдпрд╛ рдерд╛ рдЬреЛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:

  final animationControllers = useState<List<AnimationController>>([]);

  animationControllers.value = List<AnimationController>.generate(
    50,
    (_) => useAnimationController(),
  );

рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдореИрдВ рдХрдИ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рд╣реБрдХ рд▓рд┐рдЦрддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╣реИ рдирд╛?

class _MultipleAnimationControllerHook extends Hook<MultipleAnimationController> {
  const _MultipleAnimationControllerHook({
    this.numControllers,
    this.duration,
    this.debugLabel,
    this.initialValue,
    this.lowerBound,
    this.upperBound,
    this.vsync,
    this.animationBehavior,
    List<Object> keys,
  }) : super(keys: keys);

  /// Take in number of controllers wanted
  /// This hook assumes all `AnimationController`s will have the same parameters
  final int numControllers; 

  final Duration duration;
  final String debugLabel;
  final double initialValue;
  final double lowerBound;
  final double upperBound;
  final TickerProvider vsync;
  final AnimationBehavior animationBehavior;

  <strong i="10">@override</strong>
  _AnimationControllerHookState createState() =>
      _AnimationControllerHookState();
}

class _AnimationControllerHookState
    extends HookState<AnimationController, _AnimationControllerHook> {
  List<AnimationController> _multipleAnimationController; // return a list instead of a singular item

  <strong i="11">@override</strong>
  void initHook() {
    super.initHook();
    for (int i = 0; i < hook.numControllers) // just added loops 
        _multipleAnimationController[i] = AnimationController(
          vsync: hook.vsync,
          duration: hook.duration,
          debugLabel: hook.debugLabel,
          lowerBound: hook.lowerBound,
          upperBound: hook.upperBound,
          animationBehavior: hook.animationBehavior,
          value: hook.initialValue,
        );
  }

  <strong i="12">@override</strong>
  void didUpdateHook(_AnimationControllerHook oldHook) {
      for (int i = 0; i < numControllers; i++) {
        if (hook.vsync != oldHook[i].vsync) {
           _multipleAnimationController[i].resync(hook.vsync);
        }

        if (hook.duration != oldHook[i].duration) {
          _multipleAnimationController[i].duration = hook.duration;
        }
      }
  }

  <strong i="13">@override</strong>
  MultipleAnimationController build(BuildContext context) {
    return _multipleAnimationController;
  }

  <strong i="14">@override</strong>
  void dispose() {
    _multipleAnimationController.map((e) => e.dispose());
  }
}

рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реБрдХ рдХрд╛ рдПрдХрд╡рдЪрди рд╕рдВрд╕реНрдХрд░рдг рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рдХрдИ рдЖрдЗрдЯрдо рд╡рд╛рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рддрд░реНрдХ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛? рдпрд╛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рд╣реИ?

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

@satvikpendem

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдореЗрд░рд╛ рдмрдпрд╛рди AnimationController рдпрд╛ useAnimationController рд▓рд┐рдП рдорд╛рдиреНрдп рд╣реИ

рдХреНрдпреЛрдВрдХрд┐ рдпрджреНрдпрдкрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ AnimationController рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдЙрдиреНрд╣реЗрдВ рдХрдХреНрд╖рд╛ рд╡рд┐рдзрд┐ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

useSingleTickProvider();
final animation1 = useAnimationController();
final animation2 = useAnimationController();
final animation3 = useAnimationController();
// ...
useEffect(() async {
  await animation1.forward();
  await Future.sleep(100);
  await animation1.reverse();
  await animation2.forward();
  await animation3.forward();
}, []);

(рдЖрдк рдПрдХ рд╕реВрдЪреА рдирд╣реАрдВ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ animation[0] рддрд░рд╣ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреЗ рд╣реИрдВ)

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

рдЕрдкрдиреЗ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдпрджрд┐ рдПрдХрд╛рдзрд┐рдХ AnimationController рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рдХреЛрдИ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ, рддреЛ рд╣рд╛рдВ рд╣реИ:

final ticker = useTickerProvider();
final controllers = useMemo(() => [AnimationController(ticker), AnimationController(ticker)], []);

useEffect(() {
  controllers.forEach(x => x.resync(ticker));
  return () => controllers.forEach(x => x.dispose());
}, [ticker, controllers]);

  • рдЖрдк useState рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ AnimationController s рдЧрддрд┐рд╢реАрд▓ рд╣реИрдВред

(рдЯрд┐рдХрд░ рдмрджрд▓рдиреЗ рдкрд░ рдпрд╣ рдлрд┐рд░ рд╕реЗ рд╕рд┐рдВрдХ рднреА рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ)

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

List<AnimationController> controllers = [];
int numAnimationControllers = 50;

<strong i="8">@override</strong>
void initState() {
    for (int i = 0; i < numAnimationControllers; i++)
        controllers.add(AnimationController(...));
}

<strong i="9">@override</strong>
void dispose() {
    for (int i = 0; i < numAnimationControllers; i++)
        controllers[i].dispose();
}

рд▓реЗрдХрд┐рди рд╣реБрдХ рдХреЗ рд╕рд╛рде рдореИрдВ рд▓реВрдк рдореЗрдВ useAnimationController рдХреЛ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдорд╛рдореВрд▓реА рдЙрджрд╛рд╣рд░рдг рд╣реИ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд╣реАрдВ рднреА рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдорд┐рд▓рд╛ред

рд╣реБрдХ рдЗрд╕реЗ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рдХрд░рддреЗ рд╣реИрдВред

рд╣рдо рдЕрдм рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреА рд╕реВрдЪреА рдирд╣реАрдВ рдмрдирд╛рддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рд╣рдо рдирд┐рдпрдВрддреНрд░рдХ рддрд░реНрдХ рдХреЛ рдЖрдЗрдЯрдо рдкрд░ рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ:

Widget build(context) {
  return ListView(
    children: [
      for (var i = 0; i < 50; i++)
        HookBuilder(
          builder: (context) {
            final controller = useAnimationController();
          },
        ),
    ],
  );
}

рд╣рдордиреЗ рдЕрднреА рднреА рдЕрдкрдиреЗ 50 рдПрдиреАрдореЗрд╢рди рдирд┐рдпрдВрддреНрд░рдХ рдмрдирд╛рдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдПрдХ рдЕрд▓рдЧ рд╡рд┐рдЬреЗрдЯ рдХреЗ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдореЗрдВ рд╣реИрдВред

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

рд╣рд┐рдХреНрд╕реА Google рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЙрд╕реЗ рдЖрдкрдХреЗ рд╕рд╛рде рдзреИрд░реНрдп рдФрд░ рд╡рд┐рдирдореНрд░ рд░рд╣рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЖрдкрдХреА рд╕рдЧрд╛рдИ рдХреА рдХрдореА рдкрд░ рдЖрдкрдХреЛ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд╣ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЕрдзрд┐рдХ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдХреНрдХрд╛ рджреЗрдирд╛ред

@ рд╣рд┐рдХреНрд╕реА , рдЕрдЧрд░ рдЖрдкрдХреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рдРрд╕рд╛ рдХрд╣реЗрдВ (рдпрд╛ рддреЛ рдпрд╣рд╛рдВ рдпрд╛ рдореБрдЭрд╕реЗ рдирд┐рдЬреА рддреМрд░ рдкрд░ рд╕рдВрдкрд░реНрдХ рдХрд░реЗрдВ)ред

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

рдзрдиреНрдпрд╡рд╛рдж, рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рдХреЛрдб рд╕реЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреИрдЯрд░реНрди рдХреИрд╕реЗ рдирд┐рдХрд╛рд▓реЗрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рддрд░реНрдХ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЛрдВ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред

рдУрдкреА рдореЗрдВ, рдореИрдВрдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 3 рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:

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

рдореБрдЭреЗ рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рддреАрд╕рд░реА рдкрд╕рдВрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ (рдЬреЛ Property рдпрд╛ addDispose рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХреЗ рд╢реБрд░реБрдЖрддреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рдорд╛рди рд╢реНрд░реЗрдгреА рдореЗрдВ рд╣реИ)ред

рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдкреИрдЯрд░реНрди рдХрд╛ рдиреНрдпрд╛рдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореВрд▓реНрдпрд╛рдВрдХрди рдЧреНрд░рд┐рдб рдмрдирд╛рдпрд╛ рдерд╛:

рдХреНрдпрд╛ рдЖрдк рдЗрд╕ рдкрд░ рдЕрдкрдирд╛ рд╕рдВрд╕реНрдХрд░рдг рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ? рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХрдИ рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдХреЛрдб рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЗ рдмрд┐рдирд╛ StreamBuilder рд╕рднреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджреВрд╕рд░реА рдЯрд┐рдкреНрдкрдгреАред

рдЗрд╕ рдмрдЧ рдкрд░ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдореЗрд░реА рдпреЛрдЬрдирд╛ рд╣реИ:

  1. https://github.com/flutter/flutter/issues/51752#issuecomment -675285066 рд╕реЗ рдЙрджрд╛рд╣рд░рдг рд▓реЗрдВ рдФрд░ рд╢реБрджреНрдз рд╕реНрдкрдВрджрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдРрдк рдмрдирд╛рдПрдВ рдЬреЛ рдЙрди рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓реЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рджрд┐рдЦрд╛рддрд╛ рд╣реИред
  2. рдПрдХ рд╕рдорд╛рдзрд╛рди рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдЬреЛ рдЙрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЛ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдпрд╣рд╛рдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдореБрдЦ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЬреЛ рд╣рдорд╛рд░реЗ рдбрд┐рдЬрд╛рдЗрди рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЗ рднреАрддрд░ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИред

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

@rrousselGit рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдореИрдВ рдПрдХ рдРрдк рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ рдХрдИ рд╡рд┐рдЬреЗрдЯ рд╕реНрдХреНрд░реАрди рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдШреВрдо рд╕рдХрддреЗ рд╣реИрдВ (рдЪрд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ Box es рдХрд╣рддреЗ рд╣реИрдВ), рдФрд░ рд╡реЗ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЗрд╕рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдкреНрд░рддреНрдпреЗрдХ Box рд▓рд┐рдП рдПрдХ рдПрдирд┐рдореЗрд╢рди CupertinoPicker рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХреЗ рдХрд╕реНрдЯрдо рд╕реНрдХреНрд░реЙрд▓ рд╡реНрд╣реАрд▓ рдкреНрд░рднрд╛рд╡ рдХреЗ рд╕рд╛рде .

рдПрдХ рд╕реНрдЯреИрдХ рдореЗрдВ рддреАрди рдмреЙрдХреНрд╕ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧрдПрдХреНрд╢рди рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдкрд░ рдКрдкрд░ рдФрд░ рдиреАрдЪреЗ рдЬрд╛рддреЗ рд╣реИрдВред

import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';

void main(List<String> args) => runApp(const App());

class App extends HookWidget {
  const App({Key key});

  static const Duration duration = Duration(milliseconds: 500);
  static const Curve curve = Curves.easeOutBack;

  <strong i="11">@override</strong>
  Widget build(BuildContext context) {
    final AnimationController controller =
        useAnimationController(duration: duration);
    final Animation<double> animation = Tween<double>(
      begin: 0,
      end: 300,
    )
        .chain(
          CurveTween(
            curve: curve,
          ),
        )
        .animate(controller);
    final ValueNotifier<bool> isDown = useState<bool>(false);
    final ValueNotifier<int> numBoxes = useState<int>(3);

    return MaterialApp(
      home: SafeArea(
        child: Scaffold(
          floatingActionButton: FloatingActionButton(
            onPressed: () {
              if (!isDown.value) {
                controller.forward();
                isDown.value = true;
              } else {
                controller.reverse();
                isDown.value = false;
              }
            },
          ),
          body: AnimatedBuilder(
            animation: animation,
            builder: (_, __) => Boxes(
              numBoxes: numBoxes.value,
              animation: animation,
            ),
          ),
        ),
      ),
    );
  }
}

class Boxes extends StatelessWidget {
  Boxes({
    <strong i="12">@required</strong> this.numBoxes,
    <strong i="13">@required</strong> this.animation,
  });

  final int numBoxes;
  final Animation<double> animation;

  <strong i="14">@override</strong>
  Widget build(BuildContext context) {
    return Stack(
      children: List<Widget>.generate(
        numBoxes,
        (int index) => Positioned(
          top: (animation.value) + (index * (100 + 10)),
          left: (MediaQuery.of(context).size.width - 100) / 2,
          child: Container(
            width: 100,
            height: 100,
            color: Colors.blue,
          ),
        ),
      ),
      // ],
    );
  }
}

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

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

рд╣реБрдХ рдХреЗ рд╕рд╛рде, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ Box es рдФрд░ рдореВрд▓ рд╡рд┐рдЬреЗрдЯ рдПрдХ рд╣реА рдХрдХреНрд╖рд╛ рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВ, рдореИрдВ рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдПрдирд┐рдореЗрд╢рди рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреА рд╕реВрдЪреА рдХреИрд╕реЗ рдмрдирд╛рдКрдВрдЧрд╛ рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ Box рдХреЛ рдПрдХ рдПрдирд┐рдореЗрд╢рди рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣реБрдХрдмрд┐рд▓реНрдбрд░ рдХреЗ рд╕рд╛рде рдЖрдкрдХреЗ рдЙрддреНрддрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдпрджрд┐ рдореИрдВ рд░рд╛рдЬреНрдп рдХреЛ рдмрдЪреНрдЪреЗ рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рд▓реЗ рдЬрд╛рддрд╛ рд╣реВрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ Box рдХреЛ useAnimationController рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдПрдирд┐рдореЗрд╢рди рдирд┐рдпрдВрддреНрд░рдХ рдмрдирд╛рдирд╛ рдЪреБрдирддреЗ рд╣реИрдВред , рдореИрдВ рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рд▓реЗрддрд╛ рд╣реВрдВ: рдореИрдВ рдкреНрд░рддреНрдпреЗрдХ рдмрдЪреНрдЪреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдПрдирд┐рдореЗрд╢рди рдХреЛ рд╕рдордиреНрд╡рдпрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдП рдЧрдП рдПрдирд┐рдореЗрд╢рди рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЛ рдореВрд▓ рд╡рд░реНрдЧ рдореЗрдВ рдХреИрд╕реЗ рдЙрдЬрд╛рдЧрд░ рдХрд░реВрдВ?

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

@satvikpendem рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдореИрдВ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдерд╛ред рдХреНрдпрд╛ рдЖрдк рджрд┐рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдмрд┐рдирд╛ рд╣реБрдХ рдХреЗ рдХреИрд╕реЗ рдХрд░реЗрдВрдЧреЗ, рдмрдЬрд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЖрдк рд╣реБрдХ рд╕реЗ рдЕрд╡рд░реБрджреНрдз рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

рдореИрдВ рдЗрд╕ рдмрд╛рдд рдХреА рд╕реНрдкрд╖реНрдЯ рд╕рдордЭ рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдмрдЬрд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЖрдк рдХрд╣рд╛рдВ рдлрдВрд╕ рд░рд╣реЗ рд╣реИрдВ

рд▓реЗрдХрд┐рди рдПрдХ рддреНрд╡рд░рд┐рдд рдЕрдиреБрдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЕрдВрддрд░рд╛рд▓ рд╡рдХреНрд░ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рд╣реИрдВ, рдФрд░ рдПрдХ рдПрдиреАрдореЗрд╢рди рдирд┐рдпрдВрддреНрд░рдХ рд╣реИред

@rrousselGit рдЬрд╝рд░реВрд░, рдпрд╣рд╛рдБ рдпрд╣ рд╣реИ

import 'package:flutter/material.dart';

void main(List<String> args) => runApp(const App());

class Animator {
  Animator({this.controller, this.animation});
  AnimationController controller;
  Animation<double> animation;
}

class App extends StatefulWidget {
  const App({Key key});

  static const Duration duration = Duration(milliseconds: 500);
  static const Curve curve = Curves.easeOutBack;

  <strong i="7">@override</strong>
  _AppState createState() => _AppState();
}

class _AppState extends State<App> with TickerProviderStateMixin {
  List<Animator> animators = [];
  bool isDown = false;
  int numBoxes = 3;

  <strong i="8">@override</strong>
  void initState() {
    for (int i = 0; i < numBoxes; i++) {
      final AnimationController c = AnimationController(
        duration: App.duration,
        vsync: this,
      );
      animators.add(
        Animator(
          controller: c,
          animation: Tween<double>(
            begin: 0,
            end: 300,
          )
              .chain(
                CurveTween(
                  curve: App.curve,
                ),
              )
              .animate(c),
        ),
      );
    }
    super.initState();
  }

  <strong i="9">@override</strong>
  void dispose() {
    for (int i = 0; i < numBoxes; i++) {
      animators[i].controller.dispose();
    }
    super.dispose();
  }

  <strong i="10">@override</strong>
  Widget build(BuildContext context) {
    return MaterialApp(
      home: SafeArea(
        child: Scaffold(
          floatingActionButton: FloatingActionButton(
            onPressed: () {
              if (!isDown) {
                for (final Animator animator in animators) {
                  animator.controller.forward();
                }
                setState(() {
                  isDown = true;
                });
              } else {
                for (final Animator animator in animators) {
                  animator.controller.reverse();
                }
                setState(() {
                  isDown = false;
                });
              }
            },
          ),
          body: Stack(
            children: List<Box>.generate(
              numBoxes,
              (int index) => Box(
                index: index,
                animation: animators[index].animation,
              ),
            ),
          ),
        ),
      ),
    );
  }
}

class Box extends StatelessWidget {
  Box({
    <strong i="11">@required</strong> this.animation,
    <strong i="12">@required</strong> this.index,
  });

  final int index;
  final Animation<double> animation;

  <strong i="13">@override</strong>
  Widget build(BuildContext context) {
    return Positioned(
      top: (animation.value) + (index * (100 + 10)),
      left: (MediaQuery.of(context).size.width - 100) / 2,
      child: Container(
        width: 100,
        height: 100,
        color: Colors.blue,
      ),
    );
  }
}

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

рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдкрдВрджрди рдХреЗ рд╕рд╛рде, initState рдФрд░ dispose рджреЛрдиреЛрдВ рдореЗрдВ рд▓реВрдк рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╣реБрдХ рдХреЗ рд╕рд╛рде рд▓рдЧрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдмрд╕ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреЛрдИ рдЗрд╕рдХрд╛ рдореБрдХрд╛рдмрд▓рд╛ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╕рд╛рде рд╣реА, рдореИрдВ Box рд╡рд░реНрдЧ рдХреЛ рдореВрд▓ рд╡рд┐рдЬреЗрдЯ рдХреЗ рдЕрдВрджрд░ рдирд╣реАрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЙрди рджреЛрдиреЛрдВ рдХреЛ рдХрд╕рдХрд░ рд╕рдорд╛рд╣рд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛; рдореБрдЭреЗ рдореВрд▓ рддрд░реНрдХ рдХреЛ рд╕рдорд╛рди рд░рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рд▓реЗрдХрд┐рди рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП Box рд╕рд╛рде Box2 рд╕реНрд╡реИрдк рдХрд░реЗрдВред

рдзрдиреНрдпрд╡рд╛рдж!
рдореИрдВрдиреЗ рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ @TimWhiting рдХреЗ рд░реЗрдкреЛ рдкрд░ рдПрдХ рд╣реБрдХ рд╕рдордХрдХреНрд╖ рдХреЗ рд╕рд╛рде рдзрдХреЗрд▓ рджрд┐рдпрд╛ рд╣реИ

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

рдзрдиреНрдпрд╡рд╛рдж @rrousselGit! рдореИрдВ рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдЬреВрдЭ рд░рд╣рд╛ рдерд╛ рд▓реЗрдХрд┐рди рдЕрдм рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдкреНрд░рддреНрдпреЗрдХ рдПрдиреАрдореЗрд╢рди рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд▓рдХреНрд╖реНрдп рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдкреАрдЖрд░ рдЦреЛрд▓рд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рдЖрдХрд░реНрд╖рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣реБрдХ рдЙрдкрдпреЛрдЧреА рдХреНрдпреЛрдВ рд╣реИрдВ рдЬреИрд╕рд╛ рдореИрдВрдиреЗ рдКрдкрд░ рдХрд╣рд╛ рдерд╛:

рд╣рдо рдПрдХ рдРрд╕реЗ рдкрд░рд┐рджреГрд╢реНрдп рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд╕рдорд╛рди рд╡рдХреНрд░ рд╣реЛрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдореИрдВ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдПрдХ рдЕрд▓рдЧ рд╡рдХреНрд░ рджреЗрддрд╛ рд╣реВрдВ, рдпрд╛ рдореИрдВ 100 рдмрдХреНрд╕реЗ рдмрдирд╛рддрд╛ рд╣реВрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреА рдЕрд╡рдзрд┐ рдкрд┐рдЫрд▓реЗ рд╡рд╛рд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд▓рдВрдмреА рдпрд╛ рдЫреЛрдЯреА рд╣реЛрддреА рд╣реИ, рдпрд╛ рдореИрдВ рд╕рдо рдХреЛ рдКрдкрд░ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЕрдЬреАрдм рдиреАрдЪреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реА рддрд░рд╣ред

рдореИрдВ рдШреЛрд╖рдгрд╛рддреНрдордХ рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреЛ рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ рд╡рд╣ didUpdateWidget/Hook рдЬреАрд╡рдирдЪрдХреНрд░ рд╡рд┐рдзрд┐ рдереА, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ рдорд╛рддрд╛-рдкрд┐рддрд╛ рд╕реЗ рдЪрд╛рдЗрд▓реНрдб рдкреНрд░реЛрдк рдмрджрд▓рдиреЗ рдкрд░ рдПрдиреАрдореЗрд╢рди рдХреИрд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдП, рд▓реЗрдХрд┐рди рдЖрдкрдХреЗ рдХреЛрдб рдиреЗ рдЗрд╕реЗ рд╕рд╛рдлрд╝ рдХрд░ рджрд┐рдпрд╛ред

рдЖрдЬ рдореЗрд░реЗ рдХреЛрдб рдмреЗрд╕ рдореЗрдВ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдЖрдпрд╛, рдЗрд╕рд▓рд┐рдП рд╕реЛрдЪрд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╕рд╛рдЭрд╛ рднреА рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

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

return ClipRRect(
      borderRadius: BorderRadius.circular(CornerStyles.dialog),
      child: Scaffold(
        backgroundColor: state.theme.scaffoldBackgroundColor,
        body: FamilyStreamBuilder<DocumentSnapshot>(
          stream: state.listRef.snapshots(),
          builder: (context, AsyncSnapshot<DocumentSnapshot> documentSnapshot) {
            //When a list is updated, we need to update the listOrder
            state.updateListOrderFromSnapshot(documentSnapshot);
            return FamilyStreamBuilder<QuerySnapshot>(
                stream: state.itemsCollection.snapshots(),
                builder: (_, AsyncSnapshot<QuerySnapshot> itemsSnapshot) {
                  //Sort the list items by the idField on the list-doc
                  List<DocumentSnapshot> items = itemsSnapshot.data.documents;
                  state.handleDocsSync(items);
                  return ValueListenableBuilder(
                    valueListenable: state.listOrderNotifier,
                    builder: (_, List<String> listOrder, __) {
                      List<DocumentSnapshot> ordered = state.sortItems(items, listOrder);
                     //Set the firstCompleted item if we have one
                      state.firstCompletedItem = ordered
                          ?.firstWhere((element) => element.data[FireParams.kIsComplete] == true, orElse: () => null)
                          ?.documentID;
                      return _buildItemList(items, ordered);
                    },
                  );
                });
          },
        ),
      ),
    );

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рддрд░реНрдХ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛрдЧрд╛, рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реВрдВ:

    DocumentSnapshot list = useFamilyStream(state.listRef.snapshots());
    List<DocumentSnapshot> items = useFamilyStream(state.itemsCollection.snapshots()).data.documents;
    List<String> listOrder = useValueListenable(state.listOrderNotifier);

    //When a list is updated, we need to update the listOrder
    state.updateListOrderFromSnapshot(list);

   //Sort the list items by the idField on the list-doc
    state.handleDocsSync(items);
    List<DocumentSnapshot> ordered = state.sortItems(items, listOrder);

    //Set the firstCompleted item if we have one
    state.firstCompletedItem = ordered
        ?.firstWhere((element) => element.data[FireParams.kIsComplete] == true, orElse: () => null)
        ?.documentID;

    return ClipRRect(
      borderRadius: BorderRadius.circular(CornerStyles.dialog),
      child: Scaffold(
          backgroundColor: state.theme.scaffoldBackgroundColor,
          body: _buildItemList(items, ordered)
      ));

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

рдХрдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЗ рд╕рд╛рде, "рдмрд╕ рдПрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ" рдХреА рд╕рд▓рд╛рд╣ рдпрдерд╛рд░реНрдерд╡рд╛рджреА рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдлрд╛рдпрд░рдмреЗрд╕ рдореЗрдВ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ рд╕реНрдЯреНрд░реАрдо рд╣реИ, рдФрд░ рдХрд┐рд╕реА рднреА рд╕рдордп рдореБрдЭреЗ рдпрд╣ рд╕реЙрдХреЗрдЯ рдЬреИрд╕рд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЪрд╛рд╣рд┐рдП рдореЗрд░реЗ рдкрд╛рд╕ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИ рдПрдХ рд╕реНрдЯреНрд░реАрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╕реЗрд╕реНрдЯ рд▓рд╛ рд╡рд┐рдПред

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

рдпрд╣ рдЕрднреА рднреА рдлрд░реНрдХ рдкрдбрд╝рддрд╛ рд╣реИред рдиреЛрдб рджреГрд╢реНрдп рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдпрд╣ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЦрд░реНрдЪ рд╣реЛрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред

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

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

рдЯрд┐рдо рдХреЗ рд░реЗрдкреЛ рдкрд░ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ рдЬреЛ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВред

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

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

рдЖрдИрдПрдордУ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдФрд░ рдЗрд╕ рджреГрд╢реНрдп рдХреЛ рдбреАрдмрдЧ рдХрд░рдирд╛ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИ рдпрджрд┐ рдпрд╣ рд╕рдм рддрд░реНрдХ рдПрдХ рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рд╕рдореВрд╣реАрдХреГрдд рд╣реИ, рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╡рд╛рдкрд╕ рдЖрдиреЗ рдкрд░ рдореЗрд░реЗ рдЬреАрд╡рди рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕ рдХреЗ рд░реВрдк рдореЗрдВ :)

рдзреНрдпрд╛рди рджреЗрдиреЗ рд╡рд╛рд▓реА рдПрдХ рдФрд░ рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╢рд┐рдХрд╛рд░ рдиреЗ рдореВрд▓ рд░реВрдк рд╕реЗ рдирд┐рд░реНрдорд╛рдг рд╡рд┐рдзрд┐ рдХреЗ "рдореБрдЭреЗ рдмрд╛рд╣рд░ рдХрд░ рджрд┐рдпрд╛", рдХреНрдпреЛрдВрдХрд┐ рдРрд╕рд╛ рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рдерд╛ рдЬрд┐рд╕рд╕реЗ рдореИрдВ рдЕрдкрдиреЗ рдкреЗрдбрд╝ рдХреЛ 3 рдХреНрд▓реЛрдЬрд░ рдФрд░ рдЫреЗрдж рдореЗрдВ 16 рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЗ рдЕрдВрджрд░ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХреВрдВред

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

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

рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдЗрд╕ рджреГрд╢реНрдп рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдкреНрд░рджрд░реНрд╢рди рд╕рдВрдмрдВрдзреА рдХреЛрдИ рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рд╣реИ

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

рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдореИрдВ рдЕрдкрдиреЗ рдкреЗрдбрд╝ рдХреЛ 3 рдХреНрд▓реЛрдЬрд░ рдФрд░ рдЫреЗрдж рдореЗрдВ 16 рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЗ рдЕрдВрджрд░ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдерд╛

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдЖрдкрд╕реЗ рдмрдбрд╝рд╛ рдореЙрдирд┐рдЯрд░ рд╣реЛ...:-/

рддреЛ 2 рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдЪреАрдЬреЛрдВ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдкрдардиреАрдпрддрд╛ рдФрд░ рд░рдЦрд░рдЦрд╛рд╡ рдХреА рдкрд░реЗрд╢рд╛рдиреА рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ

рдореИрдВ рд╡рд┐рдЬреЗрдЯреНрд╕ рдХреЛ рдЙрд╕реА рдлрд╛рдЗрд▓ рдореЗрдВ рд░рдЦреВрдВрдЧрд╛, FWIWред

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

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдЖрдкрд╕реЗ рдмрдбрд╝рд╛ рдореЙрдирд┐рдЯрд░ рд╣реЛ...:-/

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЕрд▓реНрдЯреНрд░рд╛рд╡рд╛рдЗрдб рд╣реИ: рдбреА, тАЛтАЛрд▓реЗрдХрд┐рди рдбрд╛рд░реНрдЯрдлрдПрдордЯреА рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╣рдо рд╕рднреА рдХреЛ 80 рддрдХ рд╕реАрдорд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП 16 рдЦреЛрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдореБрдЦреНрдп рдореБрджреНрджрд╛ рдореЗрд░реЗ рдмрдпрд╛рди рдХрд╛ рдЕрдВрдд рд╣реИ рдпрд╣ },);});},),),); рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдордЬреЗрджрд╛рд░ рдирд╣реАрдВ рд╣реИ рдЬрдм рдХреБрдЫ рдЧрдбрд╝рдмрдбрд╝ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рднреА рдореИрдВ рдЗрд╕ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рдмреЗрд╣рдж рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдЖрдИрдбреАрдИ рд╕рд╣рд╛рдпрдХ рдЬреИрд╕реЗ swap with parent рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрддреЗ рд╣реИрдВред

рдореИрдВ рд╡рд┐рдЬреЗрдЯреНрд╕ рдХреЛ рдЙрд╕реА рдлрд╛рдЗрд▓ рдореЗрдВ рд░рдЦреВрдВрдЧрд╛, FWIWред

100%, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрднреА рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рдВрдмрд╡рдд рд░реВрдк рд╕реЗ рдХреВрджрдирд╛ рдмрдирд╛рдП рд░рдЦрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдмреЗрд╢рдХ рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп, рд▓реЗрдХрд┐рди рдЬрдм рд╕рдВрднрд╡ рд╣реЛ рддреЛ рд╣рдо рдХрдо рдХрд░рдиреЗ рдФрд░ 'рдЪреАрдЬреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рд░рдЦрдиреЗ' рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред

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

dartfmt рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╣рдо рд╕рднреА рдХреЛ 80 . рддрдХ рд╕реАрдорд┐рдд рдХрд░рддрд╛ рд╣реИ

рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдпрд╣реА рдПрдХ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВ рдЖрдорддреМрд░ рдкрд░ dartfmt рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛, рдФрд░ рдЬрдм рдореИрдВ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдореИрдВ рдЗрд╕реЗ 120 рдпрд╛ 180 рд╡рд░реНрдгреЛрдВ рдкрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реВрдВ ...

рдпрд╣рд╛рдВ рдЖрдкрдХрд╛ рдЕрдиреБрднрд╡ рдкреВрд░реА рддрд░рд╣ рдорд╛рдиреНрдп рд╣реИред

рдореИрдВ рднреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкреВрд░реЗ рджрд┐рди 120 :) рд▓реЗрдХрд┐рди pub.dev рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдбрд╛рдЙрди-рд░реЗрдЯ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдЬреЛ 80 рдкрд░ рд╕реНрд╡рд░реВрдкрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдореБрдЭреЗ рдпрд╣ рдЖрднрд╛рд╕ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рд╣рдо рдЗрд╕ рдорд╛рди рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ рддреЛ рдореИрдВ (рд╣рдо) рдЕрд▓реНрдкрдордд рдореЗрдВ рд╣реЛрддреЗ рд╣реИрдВред

рдЦреИрд░ рдпрд╣ рдмреЗрддреБрдХрд╛ рд╣реИ, рд╣рдореЗрдВ рдЗрд╕реЗ рдареАрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

pub.dev dartfmt рдХрд╛ рд╕рдореНрдорд╛рди рдирд╣реАрдВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд▓рдЧ рдЗрди рдХреЛ рдбрд╛рдЙрди-рд░реЗрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рд╕реНрдХреЛрд░ рдкреГрд╖реНрда рдореЗрдВ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрдХреЛрд░ рдЕрдкреНрд░рднрд╛рд╡рд┐рдд рд░рд╣рддрд╛ рд╣реИ
рд▓реЗрдХрд┐рди рдпрдХреАрдирди, рдХреЗрд╡рд▓ рд▓рд╛рдЗрди-рд▓реЗрдВрде рдХреА рддреБрд▓рдирд╛ рдореЗрдВ dartfmt рдХреЗ рд╕рд╛рде рдФрд░ рднреА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВред

рдПрдХ рдмрд╣реБрдд рдмрдбрд╝реА рд░реЗрдЦрд╛-рд▓рдВрдмрд╛рдИ рдЙрди рдЪреАрдЬрд╝реЛрдВ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддреА рд╣реИ рдЬреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдардиреАрдп рд╣реЛрддреА рд╣реИрдВ, рдЬреИрд╕реЗ:

object
  ..method()
  ..method2();

рдЬреЛ рдмрди рд╕рдХрддрд╛ рд╣реИ:

object..method()..method2();

рдореИрдВ рдпрд╣ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБ?
image
рд╡рд┐рдЪрд╛рд░рд╛рдзреАрди рдкреИрдХреЗрдЬ: https://pub.dev/packages/size_context/score

рджрд┐рд▓рдЪрд╕реНрдк - рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкрд╣рд▓реЗ рдРрд╕рд╛ рдирд╣реАрдВ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рджрд╛рддрд╛ рдиреЗ рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓рд┐рдП dartfmt рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ред
рдореИрдВ рд╕рд╣реА рдЦрдбрд╛ рд╣реВрдБред

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

рдЗрди рд╕рднреА рдЪрд░реНрдЪрд╛рдУрдВ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд╣рдо рд╕реНрдкрдВрджрди рдореЗрдВ рд╣реБрдХ рдЬреИрд╕реЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рджреЗрд╢реА рд╕рдорд░реНрдерди рджреЗрдЦреЗрдВрдЧреЗред рдпрд╛ рддреЛ useHook рдпрд╛ use Hook рдпрд╛ рдХреБрдЫ рднреА рдЬреЛ рд╕реНрдкрдВрджрди рдХрд░рдиреЗ рд╡рд╛рд▓реА рдЯреАрдо рдХреЛ рдЙрдирдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдорд╣рд╕реВрд╕ рд╣реЛ рд╕рдХрддреА рд╣реИ, рд╡рд╣ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рддрд░рд╣ рдирд╣реАрдВ рд╣реИ тАНтЩВя╕П

рд╣рдо final controller = useAnimationController(duration: Duration(milliseconds: 800)); рдЬреИрд╕реЗ рддрд░реАрдХреЗ рд╕реЗ рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ
рдХреНрдпрд╛ рдбрд╛рд░реНрдЯреНрд╕ рдХреЗ рдирдП рдкреНрд░реЛрдЧреНрд░рд╛рдо рдлреАрдЪрд░ _Extension_ рдХреЛ рдХреЛрдЯрд▓рд┐рди/рд╕реНрд╡рд┐рдлреНрдЯ рд╕реЗ рдХреЙрдкреА рдХрд░рдХреЗ рдЙрд╕ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдЦреВрдмрд╕реВрд░рддреА рд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рдирд╣реАрдВ рд╣реИ?

рдХреБрдЫ рдЗрд╕ рддрд░рд╣: final controller = AnimationController.use(duration: Duration(milliseconds: 800));
рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдЬрдм рд╕реНрдкрдВрджрди/рдбрд╛рд░реНрдЯ рдЯреАрдо рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╕рд┐рдВрдЯреИрдХреНрд╕ useHook рдмрдЬрд╛рдп use Hook рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреА рд╣реИ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрд╕ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП Annotation рдиреЗ рдЗрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрдврд╝рд╛
final controller = use AnimationController(duration: Duration(milliseconds: 800));

use рдХреАрд╡рд░реНрдб рдЬреИрд╕реЗ const рдФрд░ new рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рднреА рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ/рд╕рд╛рд░реНрдердХ рд╣реИ:
new Something
const Something
use Something

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

рдмрд╣реБрдд рд╕реБрдВрджрд░ рдФрд░ рд╕реНрдкрдВрджрди/рдбрд╛рд░реНрдЯ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ ЁЯШЙ

рдХреНрдпрд╛ рдореИрдВ рдпрд╣ рдорд╛рдирдиреЗ рдореЗрдВ рд╕рд╣реА рд╣реВрдВ рдХрд┐ https://github.com/TimWhiting/local_widget_state_approaches/tree/master/lib/stateful рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдЕрдм рдЙрди рдореБрджреНрджреЛрдВ рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд▓реЛрдЧ рд╣рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рд░ рдХреЛрдИ рдХреИрд╕рд╛ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдХреБрдЫ рд╣рдж рддрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рдРрд╕рд╛ рдХреБрдЫ рдЗрдВрдЧрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред

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

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

рдореБрдЭреЗ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд╕рдВрдж рд╣реИ рдХреНрдпреЛрдВрдХрд┐:

  1. рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рдХрдо рд░рдирдЯрд╛рдЗрдо рдкреЗрдирд▓реНрдЯреА рд╣реИред
  2. рдмрд┐рд▓реНрдб рдкрде рдореЗрдВ рд░рд╛рдЬреНрдп рдмрдирд╛рдиреЗ рдпрд╛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реНрдХ/рдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реИ (рдмрд┐рд▓реНрдб рд╢реБрджреНрдз рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдХреЗрд╡рд▓ рд░рд╛рдЬреНрдп рд▓рд╛рдиреЗ рд╡рд╛рд▓рд╛)ред
  3. рдПрдХ рдмрд┐рд▓реНрдбрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░рддреЗ рд╕рдордп рдЬреАрд╡рдирдЪрдХреНрд░ рдкреНрд░рдмрдВрдзрди рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реЛрддрд╛ рд╣реИред (рд▓реЗрдХрд┐рди рдЖрдк рд░рд╛рдЬреНрдп рдХреЗ рдЫреЛрдЯреЗ рдЯреБрдХрдбрд╝реЛрдВ рдХреА рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдпрддрд╛ рдФрд░ рд╕рдВрд░рдЪрдирд╛ рдкрд░ рдмрд▓рд┐рджрд╛рди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ)ред
  4. рдЪреВрдВрдХрд┐ рдЖрдк рд░рд╛рдЬреНрдп рдХреЗ рдмрд┐рдЯреНрд╕ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд░рд╛рдЬреНрдп рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдмрд┐рдЯреНрд╕ рд╕реЗ рдмрдирд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдХреБрдЫ рддрд░реАрдХреЛрдВ рд╕реЗ рдмрдирд╛рдпрд╛ рдФрд░ рдирд┐рдкрдЯрд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЗ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдХрдо рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рд╣реИред

рдореБрдЭреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг (рд╣реБрдХ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ) рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ:

  1. рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕рдореЗрдВ рд╡рд╣ рд╕рдм рдХреБрдЫ рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреЛ рд╣реБрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
  2. рдЖрдк рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЧреБрдг рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред (рдЗрд╕рд▓рд┐рдП рдЬрдм рдХреБрдЫ рд░рд╛рдЬреНрдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рддрд░реНрдХ рдХреЗ рдЯреБрдХрдбрд╝реЛрдВ рдХреА рд░рдЪрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рд░рд╛рдЬреНрдп рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╣рд┐рд╕реНрд╕реЗ рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдВрдЬреА рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ - рдХреБрдВрдЬреА рдХреЛ рдПрдХ рдЖрд╡рд╢реНрдпрдХ рд╕реНрдерд┐рддрд┐рддреНрдордХ рдкреИрд░рд╛рдореАрдЯрд░ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдПрдХ рднрд╛рд╖рд╛ рд╕реНрддрд░ рд╕рдорд╛рдзрд╛рди рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреА рдПрдХ рдЪрд░ рдХреЗ рд▓рд┐рдП рдЕрджреНрд╡рд┐рддреАрдп рдЖрдИрдбреА)ред
  3. рдпрд╣ рд░рд╛рдЬреНрдп рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдмрд┐рдЯреНрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рднрд╛рд░реА рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдФрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЖрдИрдбреАрдИ рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡рддрдГ рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗред
  4. рдпрджрд┐ рдЖрдк рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд┐рдЬреЗрдЯреНрд╕ рдХреЗ рдЬреАрд╡рдирдЪрдХреНрд░ рдХреЛ рдорд┐рд▓рд╛рддреЗ рд╣реИрдВ/рд╡рд┐рдЬреЗрдЯ рдХреЗ рдмреАрдЪ рдЙрдиреНрд╣реЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХреНрд╕реЗрд╕ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рд╕реНрд╡рдпрдВ рдХреЛ рдЧрдбрд╝рдмрдбрд╝ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
  5. рдмрд┐рд▓реНрдбрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рд╣реИ рддрд╛рдХрд┐ рдирд┐рд░реНрдорд┐рдд рд╕реНрдерд┐рддрд┐ рдмрд┐рд▓реНрдб рдлрд╝рдВрдХреНрд╢рди рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рд╣реЛ, рд▓реЗрдХрд┐рди рдмрд┐рд▓реНрдб рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╢реБрджреНрдз рдЫреЛрдбрд╝ рджреЗред
  6. рдореИрдВрдиреЗ рдЕрднреА рддрдХ рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдХ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдХрд╡рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред

рд╕рд░рд▓ рдХрд╛рдЙрдВрдЯрд░ рдЙрджрд╛рд╣рд░рдгред
рдПрдирд┐рдореЗрдЯреЗрдб рдХрд╛рдЙрдВрдЯрд░ рдЙрджрд╛рд╣рд░рдг

рдврд╛рдВрдЪрд╛
рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рд░рд╛рдЬреНрдп рд░рдЪрдирд╛ рддрд░реНрдХ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдмрд┐рдЯреНрд╕

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдХрд┐рддрдирд╛ рд╕рдордп рд╣реИ, рд╕реНрдирд╛рддрдХ рдЕрдзреНрдпрдпрди рд╣рдореЗрд╢рд╛ рдореБрдЭреЗ рд╡реНрдпрд╕реНрдд рд░рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдХреБрдЫ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкрд╕рдВрдж рдЖрдПрдЧреАред @rrousselGit рдпрд╣ рд╣реБрдХ рдХреЗ рдХрд┐рддрдиреЗ рдХрд░реАрдм рд╣реИ, рдХреНрдпрд╛ рдЖрдк рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдпрд╛ рдХрдВрдкреЛрдЬрд╝реЗрдмрд┐рд▓рд┐рдЯреА рдореЗрдВ рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рдЫреЗрдж рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ?

рдореИрдВ рдЕрдкрдиреЗ рд╕рдорд╛рдзрд╛рди рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рддрд╛рдХрд┐ рдмреАрдЪ рдХреЗ рдореИрджрд╛рди рдкрд░ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдЪрд░реНрдЪрд╛ рдХреЛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдЕрдЧрд░ рд╣рдо рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдЧреБрдо рд╣реИ рдпрд╛ рдпрд╣ рд╕рдорд╛рдзрд╛рди рд╣рдореЗрдВ рдХреНрдпрд╛ рджреЗрддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЕрдЪреНрдЫреА рдкреНрд░рдЧрддрд┐ рдХрд░ рд░рд╣реЗ рд╣реЛрдВрдЧреЗред

@TimWhiting рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдореЗрд░реЗ рдкрд╛рд╕ рдореБрдЦреНрдп рдореБрджреНрджрд╛ рдордЬрдмреВрддреА рдХреА рдХрдореА рд╣реИред рдпрд╣рд╛рдВ рдПрдХ рдмрдбрд╝рд╛ рдЪрд╛рд▓рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдк рдореЗрдВ, рдмрд┐рд▓реНрдбрд░реЛрдВ рдХреА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдЬрд┐рдХ рдЖрдИрдбреА, рдФрд░ рдЬреАрд╡рдирдЪрдХреНрд░ рдкрд░ рдЯрдХрд░рд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛, рджреЛрдиреЛрдВ рд╣реА рдмрдЧ рдХреЗ рд▓рд┐рдП рдирдП рд╡реИрдХреНрдЯрд░ рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рдореИрдВ рдЕрдкрдиреА рдЯреАрдо рдХреЛ рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреВрдВрдЧрд╛ рдХрд┐ рд╡реЗ рдмрд┐рд▓реНрдбрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдкрдврд╝рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдмреБрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдХрдо рд╕реЗ рдХрдо рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ 100 рд╣реИрдВ % рдмрдЧ рдореБрдХреНрддред

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

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

рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреНрдпрд╛ @rrousselGit рдпрд╣рд╛рдВ рдХреБрдЫ рдЕрдВрддрд░реНрджреГрд╖реНрдЯрд┐ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдХреЛрдИ рдбреЗрдЯрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣реБрдХ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ 80% рд╕реНрдЯреНрд░реАрдо рдФрд░ рдПрдирд┐рдореЗрд╢рди рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдЬрд╛рдирдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд▓реЛрдЧ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

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

рдЬреИрд╕реЗ рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

var anim = get AnimationController();
return Column(
  _someExpensiveBuildMethod(),
  FadeTransition(opacity: anim, child: ...)
)

рд╣рдо рд╣рдореЗрд╢рд╛ рдХрд░ рд╕рдХрддреЗ рдереЗ:

var foo = get ComplicatedThingController();
return Column(
  _someExpensiveBuildMethod(),
  ComplicatedThing(controller: foo, child: ...)
)

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

рдХреНрдпрд╛ рдореИрдВ рдпрд╣ рдорд╛рдирдиреЗ рдореЗрдВ рд╕рд╣реА рд╣реВрдВ рдХрд┐ https://github.com/TimWhiting/local_widget_state_approaches/tree/master/lib/stateful рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдЕрдм рдЙрди рдореБрджреНрджреЛрдВ рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд▓реЛрдЧ рд╣рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?

рдореБрдЭреЗ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИред
рдореИрдВ рд╣рд╛рдБ рдХрд╣реВрдБрдЧрд╛_ред рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреИрд╕реЗ рдХрд░реЗрдВрдЧреЗред

рдЗрд╕ рд╕реВрддреНрд░ рдореЗрдВ, рд╣рдорд╛рд░рд╛ рдПрдХ-рджреВрд╕рд░реЗ рдХреЛ рди рд╕рдордЭрдиреЗ рдХрд╛ рдЗрддрд┐рд╣рд╛рд╕ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗ рд╕рдХрддрд╛ рдХрд┐ рдРрд╕рд╛ рджреЛрдмрд╛рд░рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

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

рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреНрдпрд╛ @rrousselGit рдпрд╣рд╛рдВ рдХреБрдЫ рдЕрдВрддрд░реНрджреГрд╖реНрдЯрд┐ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдХреЛрдИ рдбреЗрдЯрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣реБрдХ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ 80% рд╕реНрдЯреНрд░реАрдо рдФрд░ рдПрдирд┐рдореЗрд╢рди рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдЬрд╛рдирдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд▓реЛрдЧ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рд╕рдорд░реВрдк рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдЧрд░ рдХреБрдЫ рднреА рд╣реЛ, рддреЛ useStream рдФрд░ рдПрдирд┐рдореЗрд╢рди рдХрд╛ рд╕рдмрд╕реЗ рдХрдо рдЙрдкрдпреЛрдЧ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ:

  • рдЖрдкрдХреЗ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдпреВрдЬрд╝рд╕реНрдЯреНрд░реАрдо рдХрд╛ рдЖрдорддреМрд░ рдкрд░ рдмреЗрд╣рддрд░ рд╕рдордХрдХреНрд╖ рд╣реЛрддрд╛ рд╣реИред рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ context.watch , useBloc , useProvider , ...
  • рдХреБрдЫ рд▓реЛрдЧ рдПрдирд┐рдореЗрд╢рди рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдордп рд▓реЗрддреЗ рд╣реИрдВред рдпрд╣ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реИ, рдФрд░ TweenAnimationBuilder рдЕрдиреНрдп рдирд┐рд╣рд┐рдд рдПрдирд┐рдореЗрдЯреЗрдб рд╡рд┐рдЬреЗрдЯ рдЬрд░реВрд░рдд рдХреЗ рдПрдХ рдмрдбрд╝реЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдХрд╡рд░ рдХрд░рддреЗ рд╣реИрдВред
    рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдореИрдВ рдЕрдкрдиреЗ useImplicitlyAnimatedInt рд╣реБрдХ рдХреЛ flutter_hooks рдореЗрдВ рдЬреЛрдбрд╝ рджреВрдВ рддреЛ рдпрд╣ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред

@esDotDev рдиреЗ рдЬреАрд╡рдирдЪрдХреНрд░рдорд┐рдХреНрд╕рд┐рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рдХреБрдВрдЬреА/рдЖрдИрдбреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ред рдпрд╣ рдЕрднреА рднреА рдмрд┐рд▓реНрдбрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рд╣реИред рд▓реЗрдХрд┐рди рд╕рдВрднрд╡рдд: рдЗрд╕рд╕реЗ рдЕрдВрддрддрдГ рднреА рдорджрдж рдорд┐рд▓ рд╕рдХрддреА рд╣реИред рдЬрд┐рд╕ рдПрдХ рдореБрджреНрджреЗ рдореЗрдВ рдореИрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рд╣реИред рдпрд╣ рдЙрди рдЪреАрдЬреЛрдВ рдХреЛ рдХреБрдЫ рдЦрд╛рд╕ рддрд░реАрдХреЛрдВ рд╕реЗ рдбрд╛рд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣реА рд╣реИрдВред рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╢рд╛рдпрдж рдХреБрдЫ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдпрд╛ рд╕рд┐рд╕реНрдЯрдо рдорд╣рд╛рд░рдд рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИред рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдЬреАрд╡рдирдЪрдХреНрд░ рдХреЛ рдорд┐рд▓рд╛рдиреЗ рдХреА рдмрд╛рдд рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдЙрдЪрд┐рдд рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдлреЗрдВрдХрдХрд░ рдЗрд╕рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрдм рдЖрдк рдЬрд┐рд╕ рд░рд╛рдЬреНрдп рдХреЗ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╣рд┐рд╕реНрд╕реЗ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рд╡рд╣ рдЙрд╕ рд╡рд┐рдЬреЗрдЯ рдХреЗ рдЬреАрд╡рдирдЪрдХреНрд░ рджреНрд╡рд╛рд░рд╛ рд╕реБрд▓рдн рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдпрд╛ рдПрдХ рд▓рд┐рдВрдЯ рдХрд┐ рдПрдХ рдЬреАрд╡рдирдЪрдХреНрд░ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рднреАрддрд░ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рдЬреАрд╡рдирдЪрдХреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

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

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐, рдпрджрд┐ var anim = AnimationController.use(context, duration: widget.duration ?? _duration); рдПрдХ рдкреНрд░рдердо рд╢реНрд░реЗрдгреА рдХреЗ рдирд╛рдЧрд░рд┐рдХ рдереЗ, рддреЛ рд╡рд╕реНрддреБрддрдГ рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рднреА рдирд┐рд╣рд┐рдд рдпрд╛ рд╕реНрдкрд╖реНрдЯ рдПрдирд┐рдореЗрд╢рди рдХрд╛ рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдЙрдиреНрд╣реЗрдВ рдмреЗрдорд╛рдиреА рдмрдирд╛ рджреЗрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╕рднреА рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдП рдЧрдП рд╣реИрдВ: рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рд╡рд┐рдЬреЗрдЯ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдПрдХ рд╕реНрдЯреЗрдЯрдлреБрд▓ рдЪреАрдЬрд╝ (рдПрдиреАрдореЗрд╢рди рдХрдВрдЯреНрд░реЛрд▓рд░) рдХреЛ рдХрдВрдкреЛрдЬрд╝рд┐рдЯ рдХрд░рдирд╛ред TAB рд╡реНрдпрд░реНрде рдХреЗ рдХрд╛рдлреА рдХрд░реАрдм рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рд╡рд╣реА рдХрд╛рдо AnimatedBuilder + AnimatorController.use() рд╕рд╛рде рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

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

рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдХреНрдпрд╛ рд╣реИ, рдореИрдВ рд╕рд╛рдорд╛рдиреНрдп рдПрдиреАрдореЗрд╢рди рд╡рд┐рдЬреЗрдЯ рдХреЗ рдмрдЬрд╛рдп рдЕрдкрдиреЗ рдРрдк рдореЗрдВ useAnimation рдЬреИрд╕реЗ рдХреБрдЫ рдХрд╛ рднрд╛рд░реА рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдПрдХ рд╕реНрдкреНрд░рд┐рдВрдЧрдПрдиреАрдореЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдирд┐рдореЗрдЯреЗрдб рдХрдВрдЯреЗрдирд░ рдЬреИрд╕реЗ рд╡рд┐рдЬреЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ; рд╡реЗ рд╕рднреА рд╕рд┐рдореБрд▓реЗрд╢рди-рдЖрдзрд╛рд░рд┐рдд рдПрдиреАрдореЗрд╢рди рдХреЗ рдмрдЬрд╛рдп curve рдФрд░ duration рд╕рд╛рде рдПрдХ рд╕рдордп-рдЖрдзрд╛рд░рд┐рдд рдПрдиреАрдореЗрд╢рди рдорд╛рдирддреЗ рд╣реИрдВ, рдЬреЛ Simulation рддрд░реНрдХ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдЧрд╛ред

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

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рдХреИрд╕реЗ, рдпрджрд┐ var anim = AnimationController.use(рд╕рдВрджрд░реНрдн, рдЕрд╡рдзрд┐: widget.duration ?? _duration); рдПрдХ рдкреНрд░рдердо рд╢реНрд░реЗрдгреА рдХреЗ рдирд╛рдЧрд░рд┐рдХ рдереЗ, рд╡рд╕реНрддреБрддрдГ рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рднреА рдирд┐рд╣рд┐рдд рдпрд╛ рд╕реНрдкрд╖реНрдЯ рдПрдирд┐рдореЗрд╢рди рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореМрдЬреВрдж рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдЙрдиреНрд╣реЗрдВ рдмреЗрдорд╛рдиреА рдмрдирд╛ рджреЗрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╕рднреА рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдП рдЧрдП рд╣реИрдВ: рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рд╡рд┐рдЬреЗрдЯ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдПрдХ рд╕реНрдЯреЗрдЯрдлреБрд▓ рдЪреАрдЬрд╝ (рдПрдиреАрдореЗрд╢рди рдХрдВрдЯреНрд░реЛрд▓рд░) рдХреЛ рдХрдВрдкреЛрдЬрд╝рд┐рдЯ рдХрд░рдирд╛ред TAB рд╡реНрдпрд░реНрде рдХреЗ рдмрд╣реБрдд рдХрд░реАрдм рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк AnimatedBuilder + AnimatorController.use() рдХреЗ рд╕рд╛рде рднреА рдРрд╕рд╛ рд╣реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

рдХреНрдпрд╛ рдореИрдВ рдпрд╣ рдорд╛рдирдиреЗ рдореЗрдВ рд╕рд╣реА рд╣реВрдВ рдХрд┐ https://github.com/TimWhiting/local_widget_state_approaches/tree/master/lib/stateful рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдЕрдм рдЙрди рдореБрджреНрджреЛрдВ рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд▓реЛрдЧ рд╣рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?

рдореБрдЭреЗ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИред
рдореИрдВ рд╣рд╛рдБ рдХрд╣реВрдБрдЧрд╛_ред рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреИрд╕реЗ рдХрд░реЗрдВрдЧреЗред

рдЗрд╕ рд╕реВрддреНрд░ рдореЗрдВ, рд╣рдорд╛рд░рд╛ рдПрдХ-рджреВрд╕рд░реЗ рдХреЛ рди рд╕рдордЭрдиреЗ рдХрд╛ рдЗрддрд┐рд╣рд╛рд╕ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗ рд╕рдХрддрд╛ рдХрд┐ рдРрд╕рд╛ рджреЛрдмрд╛рд░рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

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

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

рдореИрдВ рдЙрдиреНрд╣реЗрдВ local_state рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЬреЛрдбрд╝рдХрд░ рдПрдХ рдкреАрдЖрд░ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВ

рдпрд╣ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред

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

рд╣рдордиреЗ рдХреЗрд╡рд▓ рд╡рд╣реА рджрд┐рдЦрд╛рдпрд╛ рд╣реИ рдЬреЛ _is't_ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реНрдкрдВрджрди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред

рдЙрдкрдпреЛрдЧ рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ, рдФрд░ рд╣реБрдХ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд┐рдЬреЗрдЯ-рд╕реНрдЯреЗрдЯ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд╛ рдХреБрд▓ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рднреНрд░рдо рдХрд╣рд╛рдБ рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрд╕рдХреЗ рдЪреЗрд╣рд░реЗ рдкрд░ рд╕реАрдзрд╛ рд▓рдЧрддрд╛ рд╣реИред

рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЛ рдХреЗрд╡рд▓ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: _рдмрд┐рд▓реНрдбрд░-рд╡рд┐рдЬреЗрдЯ рдХреБрдЫ рднреА рдХрд░ рд╕рдХрддрд╛ рд╣реИред_

рдкреВрдЫрдирд╛ рдХреБрдЫ рд╕реНрдЯреЗрдЯрдлреБрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рдХрд┐рд╕реА рднреА рд╡рд┐рдЬреЗрдЯ рдХреЗ рдЕрдВрджрд░ рдореМрдЬреВрдж рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

  • рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд░рд╛рдЬреНрдп рдХреЛ рд╕рдорд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реИ
  • InitState/рдирд┐рдкрдЯрд╛рди рдХреЙрд▓ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕реНрд╡рдпрдВ рдХреЛ рд╕реЗрдЯрдЕрдк/рдлрд╛рдбрд╝ рд╕рдХрддрд╛ рд╣реИ
  • рдЬрдм рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рдмрджрд▓рддреА рд╣реИрдВ рддреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рдФрд░ рдЗрд╕реЗ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди, рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ-рдореБрдХреНрдд рддрд░реАрдХреЗ рд╕реЗ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдк рдореЗрдВ рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ:
AnimationController anim = AnimationController.stateful(duration: widget.duration);
рдЕрдЧрд░ рдпрд╣ рд╕реНрдЯреЗрдЯрд▓реЗрд╕ рдФрд░ рд╕реНрдЯреЗрдЯрдлреБрд▓ рд╡рд┐рдЬреЗрдЯреНрд╕ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд░ рдпрд╣ рд╡рд┐рдЬреЗрдЯ рдХреЗ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХреЗ рджреМрд░рд╛рди рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░рддрд╛ рд╣реИред рдХреБрдЫ рдмрджрд▓рддрд╛ рд╣реИ, рдЕрдЧрд░ рдпрд╣ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ init() рдФрд░ рдирд┐рдкрдЯрд╛рди() рдХреЛ рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡рд┐рдЬреЗрддрд╛ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рд╣рд░ рдХреЛрдИ рдЗрд╕рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░реЗрдЧрд╛ред

рдореИрдВ рдЬрд┐рд╕ рдореБрдЦреНрдп рдЪреАрдЬ рд╕реЗ рдЬреВрдЭ рд░рд╣рд╛ рд╣реВрдВ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреБрд╢рд▓ рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, ValueListenableBuilder рдПрдХ рдмрд╛рд▓ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдорд╛рдкрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рд╕рдВрдкрддреНрддрд┐ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИред

рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЧреИрд░-рдореБрджреНрджрд╛ рд╣реИред рд╣рдо рдЗрд╕реЗ рд╡реИрд╕реЗ рд╣реА рдХрд░реЗрдВрдЧреЗ рдЬреИрд╕реЗ XTransition рд╡рд┐рдЬреЗрдЯ рдЕрднреА рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдЕрдЧрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдЬрдЯрд┐рд▓ рд╕реНрдерд┐рддрд┐ рд╣реИ, рдФрд░ рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреБрдЫ рдорд╣рдВрдЧрд╛ рдмрдЪреНрдЪрд╛ рд╣реЛ, рддреЛ рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд░реИрдкрд░ рд╡рд┐рдЬреЗрдЯ рдмрдирд╛рдЙрдВрдЧрд╛ред рдЬреИрд╕реЗ рд╣рдо рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:
FadeTransition(opacity: anim, child: someChild)

рд╣рдо рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЗ рд╕рд╛рде рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╣рдо рд░реЗрдВрдбрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЬреЗрдЯ рдореЗрдВ 'рдЪреАрдЬрд╝' рдХреЛ рдкрд╛рд╕ рдХрд░рдХреЗред
MyThingRenderer(value: thing, child: someChild)

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

@esDotDev рд╕реЗ рд╕рд╣рдорддред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╢реАрд░реНрд╖рдХ "рдмрд┐рд▓реНрдбрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЯреЗрдХреНрд╕ рд╢реБрдЧрд░" рд╣реЛрдЧрд╛ред

рдореИрдВ рдЬрд┐рд╕ рдореБрдЦреНрдп рдЪреАрдЬ рд╕реЗ рдЬреВрдЭ рд░рд╣рд╛ рд╣реВрдВ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреБрд╢рд▓ рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, ValueListenableBuilder рдПрдХ рдмрд╛рд▓ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдорд╛рдкрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рд╕рдВрдкрддреНрддрд┐ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИред

рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЧреИрд░-рдореБрджреНрджрд╛ рд╣реИред рд╣рдо рдЗрд╕реЗ рд╡реИрд╕реЗ рд╣реА рдХрд░реЗрдВрдЧреЗ рдЬреИрд╕реЗ XTransition рд╡рд┐рдЬреЗрдЯ рдЕрднреА рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдЕрдЧрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдЬрдЯрд┐рд▓ рд╕реНрдерд┐рддрд┐ рд╣реИ, рдФрд░ рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреБрдЫ рдорд╣рдВрдЧрд╛ рдмрдЪреНрдЪрд╛ рд╣реЛ, рддреЛ рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд░реИрдкрд░ рд╡рд┐рдЬреЗрдЯ рдмрдирд╛рдЙрдВрдЧрд╛ред рдЬреИрд╕реЗ рд╣рдо рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:

рдЗрд╕рдХреА рдХреЛрдИ рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред
рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд╛рднреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд░рд╛рдЬреНрдп-рддрд░реНрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ "рд╡рд┐рдЬреЗрдЯ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЛ рдХреИрд╢ рдХрд░реЗрдВ рдпрджрд┐ рдЗрд╕рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рдмрджрд▓реЗ рд╣реИрдВ"ред

рд╣реБрдХ рдХреЗ рд╕рд╛рде, рдпрд╣ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ useMemo :

<insert whatever>
final myWidget = useMemo(() => MyWidget(pameter: value), [value]);

рдЗрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде, myWidget _only_ рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдЧрд╛ рдЬрдм value рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдЧрд╛ред рднрд▓реЗ рд╣реА useMemo рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╡рд┐рдЬреЗрдЯ рдЕрдиреНрдп рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдлрд┐рд░ рд╕реЗ рдмрдирд╛ рд╣реЛред

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

рдЯрд┐рдо рдХреЗ рд░реЗрдкреЛ рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред

рдкреВрдЫрдирд╛ рдХреБрдЫ рд╕реНрдЯреЗрдЯрдлреБрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рдХрд┐рд╕реА рднреА рд╡рд┐рдЬреЗрдЯ рдХреЗ рдЕрдВрджрд░ рдореМрдЬреВрдж рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

  • рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд░рд╛рдЬреНрдп рдХреЛ рд╕рдорд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реИ
  • InitState/рдирд┐рдкрдЯрд╛рди рдХреЙрд▓ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕реНрд╡рдпрдВ рдХреЛ рд╕реЗрдЯрдЕрдк/рдлрд╛рдбрд╝ рд╕рдХрддрд╛ рд╣реИ
  • рдЬрдм рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рдмрджрд▓рддреА рд╣реИрдВ рддреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдпрд╣ рджреЗрдЦрдиреЗ рдореЗрдВ рдХрдард┐рдирд╛рдИ рд╣реЛ рд░рд╣реА рд╣реИ рдХрд┐ рдЙрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, StatefulWidget рдХрд╛рдо рдХреЛ рдЙрд╕рд╕реЗ рдмреЗрд╣рддрд░ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдпрд╣ рд╕рд╡рд╛рд▓ рдкреВрдЫрд╛ рд╣реИ рдХрд┐ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдХрд┐рд╕реА рдРрд╕реЗ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛ flutter_hooks рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ StatefulWidget рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдЕрдзрд┐рдХ рдордЬрд╝рд╛ рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рд╡рд╛рдЪрд╛рд▓рддрд╛ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ - рдЗрд╕рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐ рдореИрдВ рд╣реБрдХ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕реЛрдЪрддрд╛ рд╣реВрдВред рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ Widget s рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╣реБрдХ рдХреЗ рд╕рд╛рде UI рдЕрдкрдбреЗрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рддрд░реНрдХ рдореБрд╢реНрдХрд┐рд▓ рд▓рдЧрддрд╛ рд╣реИред

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

рдЖрдкрдХрд╛ рдорддрд▓рдм рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╡рд┐рдЬреЗрдЯ рдХреЗ рдЕрдВрджрд░ рдмрдирд╛рдпрд╛/рдЕрдзрд┐рдЧреНрд░рд╣рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛? рдпрд╛ рдкреЗрдбрд╝ рдореЗрдВ рд╡рд┐рдЬреЗрдЯ рдХреЗ рдиреАрдЪреЗ рдПрдХ рдирд┐рд░реНрднрд░рддрд╛?

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

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

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

<insert whatever>
final myWidget = useMemo(() => MyWidget(pameter: value), [value]);

рдЗрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде, myWidget _only_ рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдЧрд╛ рдЬрдм value рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдЧрд╛ред рднрд▓реЗ рд╣реА useMemo рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╡рд┐рдЬреЗрдЯ рдЕрдиреНрдп рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдлрд┐рд░ рд╕реЗ рдмрдирд╛ рд╣реЛред

рдЖрд╣, рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ, рдореЗрдореЛрдЗрдЬреНрдб рдПрдХ рд╡рд┐рдЬреЗрдЯ рд╕реНрд╡рдпрдВ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЖрдк [рдореВрд▓реНрдп] рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдЯреНрд░рд┐рдЧрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рд╕рд╛рдл!

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

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

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

https://reactjs.org/docs/hooks-faq.html#are -hooks-slow-рдХреНрдпреЛрдВрдХрд┐-of-creating-functions-in-render

рдореВрд▓ рд░реВрдк рд╕реЗ рдпрд╣ рдкреВрдЫрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рд░реЗрдВрдбрд░ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рдХрд╛рд░рдг рд╣реБрдХ рдзреАрдореЗ рд╣реИрдВ, рдФрд░ рд╡реЗ рдХреБрдЫ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдирд╣реАрдВ рдХрд╣рддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ useMemo рдпрд╛ useCallback рдЬреИрд╕реЗ рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдпрд╛рдж рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред

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

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

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

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

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

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реБрдХ рдХреЛ рд╕реНрдкрдВрджрди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рджреЗрдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдЬреИрд╕рд╛ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдореИрдВ рд░рд╛рдЬреНрдп рдХреЛ рдЙрд╕реА рддрд░рд╣ рд╕реНрдкрдВрджрди рд╕реЗ рджреЗрдЦрддрд╛ рд╣реВрдВ рдЬреИрд╕реЗ рдореИрдВ рдкрд╣рд▓реА рдмрд╛рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддреЗ рд╕рдордп рдХрд░рддрд╛ рдерд╛ред рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдХрднреА рдкреАрдЫреЗ рдирд╣реАрдВ рд╣рдЯреВрдВрдЧрд╛ред

рдпрд╣ рдЗрддрдирд╛ рдЕрдзрд┐рдХ рдкрдардиреАрдп рдЖрдИрдПрдордУ рд╣реИред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЖрдкрдХреЛ рджреЛ рд╡рд░реНрдЧреЛрдВ рдХреЛ рдПрдХ рд╕реНрдЯреЗрдЯрдлреБрд▓ рд╡рд┐рдЬреЗрдЯ рдмрдирд╛рдо рд╣реБрдХ рдХреЗ рд╕рд╛рде рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрд╣рд╛рдВ рдЖрдк рдмрд╕ рдпреВрдЬрд╕реНрдЯреЗрдЯ рдореЗрдВ рдбреНрд░реЙрдк рдХрд░рддреЗ рд╣реИрдВред

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

рдореИрдВ рд╕реНрдкрдВрджрди рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ рд╕реЗ рдирдлрд░рдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд░рд╛ рдкрд╕рдВрджреАрджрд╛ рдврд╛рдВрдЪрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкрдардиреАрдпрддрд╛ рдФрд░ рджреЗрд╡ рдЕрдиреБрднрд╡ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХрд╛ рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдЕрд╡рд╕рд░ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдирд╛рдордХрд░рдг рдкрд░рдВрдкрд░рд╛рдУрдВ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдФрд░ рдЕрдзрд┐рдХ рд╕реНрдкрдВрджрди рдХреА рддрд░рд╣ рдмрдирд╛рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИред

UseMemoized рдФрд░ UseEffect рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рдХрд╛рдлреА рд╡рд┐рджреЗрд╢реА рд▓рдЧрддреА рд╣реИрдВ, рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдмрд┐рд▓реНрдб fxn рдореЗрдВ init () рдХреЛрдб рди рдЪрд▓рд╛рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реЛред

рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣реБрдХ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рд░рдВрдн рдХрд░рдирд╛ рдЗрд╕ рддрд░рд╣ рд╣реИ (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ?):

Widget build(){
   useEffect(
      (){
          // Do init stuff
         return (){  //Do dispose stuff };
      }, [ ] ) //<-- pass an empty list of rebuild triggers, so this can only fire once. Passing null here would let it fire every time.
   );
}

рдореИрдВ рдЗрд╕ рдХреЛрдб рдХреА рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкрдардиреАрдпрддрд╛ рдФрд░ "рд╕реНрд╡рдпрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЛрдб" рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдЖрджрд░реНрд╢ рд╕реЗ рдмрд╣реБрдд рдХрдо рд╣реИред рдпрд╣рд╛рдВ рдмрд╣реБрдд рд╕рд╛рд░рд╛ рдирд┐рд╣рд┐рдд рдЬрд╛рджреВ рдЪрд▓ рд░рд╣рд╛ рд╣реИред рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдЗрд╕рдХреЗ init/рдирд┐рдкрдЯрд╛рди рд╣реБрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдФрд░ рд╕реНрдЯреЗрдЯрд▓реЗрд╕ рд╡рд┐рдЬреЗрдЯ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рд╕реНрд╡рдпрдВ рдХреЛ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдордЬрдмреВрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

useMemoized рдФрд░ useEffect рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рд╢рд╛рдпрдж рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ hook ComputedValue() рдФрд░ hook SideEffect() рдирд╛рдо рд╕реЗ рдмреЗрд╣рддрд░ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ

Widget build(BuildContext context){
   List<int> volumes = hook ComputedValue(
        execute: ()=>_getVolumeFromAudioSamples(widget.bytes), 
        dependencies: [ widget.bytes ]);

   hook SideEffect(
       execute: ()=>_recordSongChangedAnalytics()
       dependencies: [ widget.songUrl ]);
   )

   return SongVisualizer(volumes: volumes);
}

рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рд╣реИ, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ hook рдХреАрд╡рд░реНрдб рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕рд╛ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рд╡рд┐рджреЗрд╢реА рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЗ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред рдирдП рдХреАрд╡рд░реНрдб рдкреЗрд╢ рдХрд░рдирд╛ рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛, withSideEffect рдпрд╛ withComputedValue ? рдореИрдВ рдХреЛрдИ рднрд╛рд╖рд╛ рдбрд┐рдЬрд╛рдЗрдирд░ рдирд╣реАрдВ рд╣реВрдВ рдЗрд╕рд▓рд┐рдП рдореЗрд░реЗ рд╢рдмреНрдж рдмреЗрдХрд╛рд░ рд╣реИрдВред

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

@lemusthelroy рдХреЛ рдкреНрд░рддрд┐рдзреНрд╡рдирд┐рдд

рд╣рд╛рдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрд╕ рд╕рд┐рдХреНрдХреЗ рдХреЗ рджреЛ рдкрд╣рд▓реВ рд╣реИрдВред рдПрдХ рдирдпрд╛ рдХреАрд╡рд░реНрдб рдПрдХ рдкреНрд░рдореБрдЦ рдШрдЯрдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬреНрдЮрд╛рди рдХрд╛ рдкреНрд░рд╕рд╛рд░ рдмрд╣реБрдд рддреЗрдЬрд╝ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рджреВрд╕рд░рд╛ рдкрдХреНрд╖ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдм _рд╣рд░ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдирдпрд╛ рд╣реИред рдЕрдЧрд░ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рд╕рдВрднрд╡ рд╣реИ рддреЛ рднреА рдЕрдЪреНрдЫрд╛ рд╣реИ! рдмрд╕ рдпрдХреАрди рдирд╣реАрдВ рд╣реЛрддрд╛... рдХрдо рд╕реЗ рдХрдо рдЗрддрдиреА рд╢рд╛рди рд╕реЗ рддреЛ рдирд╣реАрдВред

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

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

рдореВрд▓ рдмрд╛рддреЗрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ hook рдХреАрд╡рд░реНрдб рдХреЗ рд▓рд┐рдП; рдХреЛрдИ рдЗрд╕реЗ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ (рдПрдХ рдореИрдХреНрд░реЛ) рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдФрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ hook рдЙрдкрд╕рд░реНрдЧ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЗрд╡рд▓ рдХреЙрд▓ рдХрд░ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдмрд┐рд▓реНрдЯ-рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЖрдВрддрд░рд┐рдХ рд╕реНрдерд┐рддрд┐ рд╣реИ (рд╕реА-рд╕реНрдЯрд╛рдЗрд▓ рд╕реНрдЯреЗрдЯрд┐рдХреНрд╕ред )

рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рд╕реНрд╡рд┐рдлреНрдЯ рдлрдВрдХреНрд╢рдирдмрд┐рд▓реНрдбрд░реНрд╕ рдореЗрдВ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдкреВрд░реНрд╡-рдХрд▓рд╛ рдирд╣реАрдВ рд╣реИред

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

Hook SideEffect(void Function() execute, List<Object> dependencies) {
  // Whatever happens each build.
}

Widget build(BuildContext context){
   List<int> volumes = hook ComputedValue(
        execute: ()=>_getVolumeFromAudioSamples(widget.bytes), 
        dependencies: [ widget.bytes ]);

   SideEffect(
       execute: ()=>_recordSongChangedAnalytics()
       dependencies: [ widget.songUrl ]);
   )

   return SongVisualizer(volumes: volumes);
}

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

рдЗрд╕реЗ рд▓рд┐рдЦрддреЗ рд╕рдордп рдореИрдВ рдереЛрдбрд╝рд╛ рд░реЛрддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рднрд╛рд╖рд╛ рдХреЗ рдирдЬрд░рд┐рдП рд╕реЗ рдПрдХ рдРрд╕реА рд╡рд┐рд╖рдорддрд╛ рд╣реИред рдлрд┐рд░ рд╕реЗ, рдбрд╛рд░реНрдЯ рдпреВрдЬрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрджрд╛ рд╣реБрдИ рднрд╛рд╖рд╛ рд╣реИред рдЕрдЧрд░ рдЗрд╕ рддрд░рд╣ рдХреА рд╡рд┐рд╖рдорддрд╛ рдХрд╣реАрдВ рдореМрдЬреВрдж рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рддреЛ рд╢рд╛рдпрдж рдпрд╣реА рдЬрдЧрд╣ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпрд╣ рд╡рд┐рд╖рдорддрд╛ рдирд╣реАрдВред

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

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд╣рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣реБрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЬрд┐рд╕реЗ рдореИрдВ рдЕрдкрдиреЗ get_it_mixin рдХреЗ рд╕рд╛рде рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдмрд╕ рд╡рд┐рдЬреЗрдЯ рдкреЗрдбрд╝ рдХреЛ рдмрд┐рд▓реНрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрдврд╝рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред

рд░рд┐рдПрдХреНрдЯ рд╣реБрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдк рд▓реЗрдЦ

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

рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рд╡рд┐рднрд┐рдиреНрди рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рдмрд╛рддрдЪреАрдд рдХреЛ рдкрдврд╝реЗрдВред

рдпрд╣ рдХрд╣рдирд╛ рдЙрдЪрд┐рдд рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдкреВрд░реЗ рдзрд╛рдЧреЗ рдХреЛ рдирд╣реАрдВ рдкрдврд╝рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╛рдХреА рдзрд╛рдЧреЗ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреАрдЬреЛрдВ рдХреЛ рдФрд░ рд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред рдРрд╕реЗ рд▓реЛрдЧ рд╣реИрдВ рдЬрд┐рдирдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд┐рдЬреЗрдЯреНрд╕ рдХреЛ рд╡реИрд╕реЗ рд╣реА рд░рдЦрдирд╛ рд╣реИ рдЬреИрд╕реЗ рд╡реЗ рд╣реИрдВ, рдФрд░ рдПрдХ рдЕрдиреНрдп рд╕рдореВрд╣ рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХреБрдЫ рдФрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдпрд╛ рд╡рд┐рдЬреЗрдЯреНрд╕ рдХреЛ рдЕрдзрд┐рдХ рдореЙрдбреНрдпреВрд▓рд░ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╕рдЪ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдореБрджреНрджрд╛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдРрд╕реА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╡рд┐рдЬреЗрдЯ рдХреЗ рд╕рд╛рде рд╣рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рд╣рдо рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдирдпрд╛ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╡рд╣реА рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ Future s рд╣реИ рдФрд░ рдмрд╛рдж рдореЗрдВ async/await рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдмрд╛рдж рд╡рд╛рд▓рд╛ рдЙрди рдЪреАрдЬреЛрдВ рдХреЛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдирдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдмрд┐рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рдереЗред

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

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

рдореБрдЭреЗ рдХреЗрд╡рд▓ init рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреЗрдЯрдлреБрд▓ рд╡рд┐рдЬреЗрдЯ рдмрдирд╛рдирд╛ рд╣реИред

рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, useEffect() рдирд┐рд░реНрдорд╛рдг рдХреЗ рдЕрдВрджрд░ initCall рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред рдбреЙрдХреНрд╕ рдЗрд╕реЗ рд╕рдордЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рднреА рдкреНрд░рдпрд╛рд╕ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдореВрд▓ рд░реВрдк рд╕реЗ рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдПрдХ рд░рд┐рдПрдХреНрдЯ рджреЗрд╡ рд╣реИрдВ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╣реБрдХ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред

рдореИрдВ рдЙрд╕ рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдкреИрдХреЗрдЬ рдХреА рд╕реАрдорд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЕрдиреНрдп рд╕рдорд╕реНрдпрд╛рдПрдВ рдереАрдВ рдФрд░ рдореБрдЭреЗ рдареАрдХ рд╕реЗ рдпрд╛рдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡реЗ рдХреНрдпрд╛ рдереЗред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

shadyaziza picture shadyaziza  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ppolasek picture ppolasek  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

zoechi picture zoechi  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

yjbanov picture yjbanov  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

xster picture xster  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ