рдХреНрдпрд╛ рдлрд╝реНрд▓рдЯрд░ рдРрдкреНрд╕ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рдЖрдзрд╛рд░рд┐рдд рд╡рд┐рдЬреЗрдЯ рдХрд╛ рд╕рдкрдирд╛ рджреЗрдЦрддреЗ рд╣реИрдВ?

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

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

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

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

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



рд╕реНрдкрдВрджрди рдкреНрд░рдХреГрддрд┐ рдореЗрдВ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рд▓реЗрдЖрдЙрдЯ рдпреВрдЖрдИ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рдореВрд▓ рдирд┐рд╡рд╛рд╕реА рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдЪ рдирд╣реАрдВ рд╣реИред рд╣рдореЗрдВ рджреЛ рд╕рдорд╛рди рд▓реЗрдЖрдЙрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, iOS рдХреЗ рд▓рд┐рдП, CupertinoNavigationBar CupertinoPageScaffold рдФрд░ Android рдореЗрдВ, Scaffold рдХреЗ рдЕрдВрджрд░ AppBar рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдлрд╝реНрд▓рдЯрд░ рдореЗрдВ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд▓рд╛рдн рдХреЛ рдХрдо рдХрд░рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд▓реЗрдЖрдЙрдЯ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред

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

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

CupertinoNavigationBar ({ this.leading, this.middle, }) 

рдФрд░

  AppBar ({ this.leading, this.title }) 

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

 import 'package:flutter/material.dart'; import 'dart:io' show Platform; abstract class PlatformWidget<I extends Widget, A extends Widget> extends StatelessWidget { @override Widget build(BuildContext context) { if (Platform.isAndroid) { return createAndroidWidget(context); } else if (Platform.isIOS) { return createIosWidget(context); } // platform not supported returns an empty widget return Container(); } I createIosWidget(BuildContext context); A createAndroidWidget(BuildContext context); } 

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЙрдкрд░реЛрдХреНрдд рд╡рд░реНрдЧ рдПрдХ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рдЖрд╢реНрд░рд┐рдд рд╡рд┐рдЬреЗрдЯ рдлреИрдХреНрдЯреНрд░реА рд╣реИ, рдЬрд┐рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдкрд░, рдПрдХ рдХрд╕реНрдЯрдо рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ (рдпрд╛ рдХрдИ рдирд╛рдорд┐рдд рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░) рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рджреЛрдиреЛрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд░реНрдЧреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВред

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

рдЕрдм рд╣рдо рдЕрдкрдиреЗ рдкрд╣рд▓реЗ рд╡рд┐рдЬреЗрдЯ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

  class PlatformAppBar extends PlatformWidget<CupertinoNavigationBar, AppBar> { final Widget leading; final Widget title; PlatformAppBar({ this.leading, this.title, }); @override AppBar createAndroidWidget(BuildContext context) { return AppBar( leading: leading, title: title, ); } @override CupertinoNavigationBar createIosWidget(BuildContext context) { return CupertinoNavigationBar( leading: leading, middle: title, ); } } 

рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ, рд╣реИ рдирд╛? рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреИрдирд▓ рдореЗрдВ рд╡рд┐рдЧреЗрдЯреНрд╕ рдХреА рд╕рд╛рдордЧреНрд░реА рдкрд░ рд╣рдорд╛рд░рд╛ рдкреВрд░реНрдг рдирд┐рдпрдВрддреНрд░рдг рд╣реИред

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдордиреЗ рдкрд╛рдбрд╝ рдФрд░ рдмрдЯрди рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред

 class PlatformScaffoldWidget extends PlatformWidget<CupertinoPageScaffold,Scaffold> { ... } class PlatformButton extends PlatformWidget<CupertinoButton,FlatButton> { ... } 

рдЕрдм рд╣рдо рдЕрдкрдиреЗ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рдЙрдиреНрдореБрдЦ рд╡рд┐рдЬреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред

 Widget build(BuildContext context) { return PlatformScaffoldWidget( appBar: PlatformAppBarWidget( leading: PlatformButton( child: Icon(Icons.ic_arrow_back), onClick: () => _handleBack() ), title: Text("I love my Platform"), ), content: ... ); } 

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

рдХреЛрдб рдХреЛ рдЬреАрдердм рдкрд░ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

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


All Articles