[Flutter翻译]P3. Flutter - 制作特定平台的UI移动应用(Android与Material,iOS与Cupertino)。

980 阅读3分钟

原文地址:juejin.im/editor/draf…

原文作者:medium.com/@aurimas.de…

发布时间: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分支)

bitbucket.org/deimantasa/…

基本小工具

以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 )(免费版)翻译