发布时间:2020年7月25日 - 4分钟阅读
这是从我之前的文章中延续出来的关于flutter和cupertino widget的材料。
这是我的三部分系列的最后一部分,用于在Flutter中对齐widget--Android和iOS。而在这部分,我向你展示了我在当前项目实施过程中所做的大部分widget定制。
关于这个项目的一些背景--要求是严格区分Android和iOS UI。这就是我如何想到这个主意的,向你们所有人展示它是多么的简单(大部分)。 我提供的例子中也包含了几个不同的切换器,所以你可以真正地在UI层面测试元素是如何一起工作的。这对ListTile尤其有帮助。
好了,让我们来研究一下吧
TL;DR
iOS(第一部分),Android(第二部分)。
Youtube:Platform Specific UI in Flutter (Material x Cupertino)
自定义小部件列表
Generic -> Android <-> iOS
Button -> Raised Button <-> CupertinoButton.filled
Text Button ->Flat Button <-> CupertinoButton
Clickable Text -> Flat Button <-> GestureDetector + Text
Scaffold -> Scaffold <-> CupertinoPageScaffold
List Section Name -> Custom <-> Custom
List Tile -> Customised List Tile <-> Custom
Search -> Custom <-> Custom
Text Field -> TextFormField <-> Container + CupertinoTextField
Bottom Sheet/Action Sheet -> showModalBottomSheet(..) <-> showCupertinoModalPopup(..)
Clickable Icon -> IconButton <-> GestureDetector + Icon
Icon -> Icon <-> Icon
Loading Widget -> CircularProgressIndicator <-> CupertinoActivityIndicator
Alert Dialog -> AlertDialog <-> CupertinoAlertDialog
Notification Icon -> Icon <-> Icon
Check Box -> CheckBox <-> GestureDetector + Icon
Date Time Picker -> showDateTimePicker(..) <-> showModalBottomSheet(..) + CupertinoDatePicker
iOS和Android的外观相同
的widget
库地址(Advanced分支)
基本小工具
以Text Button、ClickableText、Icon等widget为例,没什么好说的。一般来说,你只需要把Android和iOS的逻辑拆分开来,然后使用相应的widget(已经实现了)来进行视觉渲染。
高级小工具
现在这里比较有意思,因为Flutter就这一天来说,并没有像Material那样有很多对应的widget。而其中一个例子就是ListTile。我花了相当长的时间来使它防弹,但我试图将它与我们的设计和iOS标准相匹配。但我尽量使它符合我们的设计和iOS标准。
你也可能会面临ListTile的问题,一旦尾部的文字太长。对于这个问题,你可以使用FixedListTileTrailingWidget。它简单地限制了widget的宽度,所以你不会有任何溢出的错误。
另外,我们还有单独的选取日期的实现。这是相当不幸的。在Android端,我们可以简单地使用showDatePicker,但在iOS端,我们必须使用自定义的实现来使它看起来像本地的。
平台小部件按钮
在项目中,你会注意到使用了PlatformWidgetButton,这是一个通用类,用于收集数据需求的通用数据,在显示Dialogs或BottomSheet/ActionSheet时使用。这是一个通用类,用于收集通用数据以满足数据需求,它在显示对话框或BottomSheet/ActionSheet时使用。
之后,在Android和iOS之间严格拆分逻辑,以呈现出一个完美的UI,符合两个设计重用相同的数据。
就这样了。希望对你构建原生UI有所帮助,在Flutter的土地上获得更大的进步!
通过( www.DeepL.com/Translator )(免费版)翻译