Skip to content

Null Safety Guide

Sandy edited this page Dec 15, 2021 · 9 revisions

开源社区的开发者们好,Bruno自12月10日上线以后,迁移空安全(null-safe)呼声较高,为了不阻碍开发者在健全空安全下使用bruno,由于Bruno组件较多体量较大,我们特邀请社区开发者一起参与bruno空安全迁移。

在你决定参与迁移空安全前,请先阅读 空安全 相关,并且掌握 常见问题 的解法,然后参照 迁移步骤 开始迁移

由于是多人协作,我们建议采用非健全模式逐步迁移,还请确定没有将其它未迁移的部分打开。

重要事情说三遍,请注意 请注意 请注意~~~~

  • 优先迁移lib ,待 lib 全部迁移完成后再迁移 example

  • 迁移分支:null-safe (请确定在对应分支进行迁移)

  • Flutter SDK:2.2.2

bruno 依赖库均已迁移最新版本(null-safe),因此我们只需进行以下步骤

Step1:

 dart migrate

Step2:

如果你的 package 可以进行迁移,工具会输出类似以下的内容:

View the migration suggestions by visiting:

  http://127.0.0.1:60278/Users/you/project/mypkg.console-simple?authToken=Xfz0jvpyeMI%3D

Step3:

使用 Chrome 浏览器访问 URL,你可以看到一个交互式的界面,引导你进行迁移

Step4:

请将你要迁移的组件进行迁移,其余文件取消勾选

eg: 如果你想对BrnVerticalIconButton组件进行迁移 ,那么你只勾选其所在dart文件(brn_vertical_icon_button.dart)和其组合的其余内部组件 brn_icon_button.dart,其余的勾选去掉

进行迁移结果改进,你可以直接在编辑器中改进(工具默认的迁移改动是向后兼容的),确定改动后点击 APPLY MIGRATE,即可生效。

当然你也可以点击 APPLY MIGRATE 后,在工程中进行迁移结果改进

Step5:

测试或运行混合版本的程序

  • dartflutter 命令里,加入 --no-sound-null-safety 标记禁用。例如:

     dart --no-sound-null-safety run
     flutter run --no-sound-null-safety
    
  • 或者,设定程序入口的语言版本 —— 包含 main() 函数的文件 —— 设定为 2.9。在 Flutter 应用中,一般是 lib/main.dart。在命令行应用中,一般是 bin/<package 名称>.dart。同时你也可以设定 test 下的文件,因为它们也包含程序入口。例如

// @dart=2.9
import 'src/my_app.dart';

main() {
  //...
}

代码迁移完成后,也请务必确保Demo运行正常后提交Pull request

以下是组件列表,请实时更新已完成迁移的组件状态(在 null-safe 列 将 n 改为 y ),并署名

component Desc Contributor null-safe (y/n)
BrnVerticalIconButton 图片在上,文字在下的垂直排列按钮 n
BrnBottomButtonPanel 用于页面底部的组合按钮 n
BrnExpandableText 收起展开文本 Sandy y
BrnButtonPanel 常用于卡片底部的组合按钮 n
BrnTextButtonPanel 平分屏幕的文本按钮 n
BrnCheckbox 多选的radio用法同系统的radio相似 n
BrnRadioButton 单选按钮 n
BrnSubSwitchTitle 多个标题切换控件,用于详情卡片 n
BrnNoticeBar 通知栏样式 n
BrnSwitchTitle 多个标题切换控件 n
BrnNoticeBarWithButton 通知栏01样式,适用于房源页面验真提示 n
BrnAppraise 评价、平级、反馈 n
BrnAppraiseBottomPicker 评价、平级、反馈 n
BrnRatioInputFormItem 用于比例输入 n
BrnStarsFormItem 评星表单项 n
BrnStepInputFormItem 递增/递减表单项 n
BrnTitleSelectInputFormItem 标题可选文本输入型表单项 n
BrnAddLabel 添加组类型表单项 n
BrnTitleFormItem 标题类型表单项 n
BrnTextSelectFormItem 选择类型表单项 n
BrnTextInputFormItem 文本输入表单项 n
BrnTextBlockInputFormItem 文本块输入表单项 n
BrnRadioInputFormItem 横向单选表单项 n
BrnExpandFormGroup 可展开/收起组类型表单项 n
BrnTextQuickSelectFormItem 选择类型表单项 n
BrnBaseTitle 自定义视图可分离标题表单元素 n
BrnSelectAllTitle 全选表单标题元素 n
BrnNormalFormGroup 普通组类型录入项、不可展开收起 n
BrnMultiChoicePortraitInputFormItem 纵向多选表单项 n
BrnMultiChoiceInputFormItem 横向多选表单项 n
BrnRadioPortraitInputFormItem 纵向单选录入项 n
BrnRangeInputFormItem 范围输入表单项 n
BrnIconButton 支持图片和文字任意组合按钮 n
BrnInputText 动态通用输入框 n
BrnDatePicker 可用于页面底部弹出选择【单个】时间点的情况 n
BrnMultiDataPicker 适用于单列或者多列数据选择的情况 n
BrnBottomWritePicker 从底部弹出带输入框的选择器 n
BrnSearchText 搜索框,用于输入文本进行搜索 n
BrnDateRangePicker 适用于时间范围选择的情况 n
BrnSelectionView 筛选 n
BrnLoadingDialog 页面中间的加载弹窗,覆盖整个页面,可以配置显示的文字 n
BrnMultiSelectListPicker 适用于从页面底部弹出,存在多选列表的情况 n
BrnCalendarView 日历,日程 n
BrnExpandableGroup 可展开收起的表单项组类型 n
BrnPortraitRadioGroup 垂直单选列表 表单项 n
BrnBrokenLine 适用于需要折现图,曲线图的场景 n
BrnSingleSelectDialog 适用于单选弹窗列表 n
BrnSelectTag 选择标签 n
BrnDeleteTag 删除模式下流式的标签 n
BrnMultipleBottomButton 用于多选状态页面底部的组合按钮 n
BrnGalleryDetailPage 查看大图交互模式-详情页 n
BrnGallerySummaryPage 查看大图交互模式-列表页 n
BrnGuide 通过阻断式的交互弹框,实现新手交互 n
BrnEnhanceOperationDialog 纵向单/双按钮Dialog n
BrnShareDialog 分享专用 Dialog n
BrnCommonActionSheet 通用ActionSheet n
BrnShareActionSheet 分享专用ActionSheet n
BrnDashedLine 虚线,分割线 n
BrnHorizontalSteps 横向步骤条一种常见的导航形式 n
BrnToast 通用吐司 n
BrnTabBar 适用于多 tab 切换的场景 n
BrnPopupWindow 悬浮框 n
BrnAppBar 适用于页面顶部存在导航栏的情况 n
BrnDialog 通用的对话框 n
BrnPageLoading 页面中间的加载框,可以配置显示的文字 n
BrnMiddleInputDialog 带输入的弹窗 n
BrnBottomPicker 从底部弹出带输入框的 Picker n
BrnTagCustom 自定义标签 n
BrnStateTag 显示状态的标签 n
BrnBubbleText 气泡背景文本展示,支持展开/收起操作 n
BrnInsertInfo 该元件的背景是不规则的边框,常用于卡片的下方作为备注信息 n
BrnBigMainButton 用于页面底部、宽度为屏幕宽度的主题色按钮 n
BrnBigOutlineButton 页面底部、宽度为屏幕宽度的边框按钮 n
BrnBigGhostButton 宽度为屏幕宽度的幽灵按钮 n
BrnSmallMainButton 主题色的小按钮 n
BrnSmallOutlineButton 小边框按钮 n
BrnActionCardTitle 带右侧箭头的卡片标题 n
BrnCommonCardTitle 普通卡片标题主要用于卡片标题或者在列表中的一行 n
BrnRichInfoGrid 常用于详情页中两列的信息展示 n
BrnPairInfoTable 页面或者卡片中,单列的展示标题-值文本数据 n
BrnStepLine 垂直步骤条 n
BrnSearchAppbar 适用于页面顶部Appbar 存在搜索功能的情况 n
BrnEnhanceNumberCard 常用于卡片中强化展示 数字信息 n
BrnMultiSelectTagsPicker 适用于底部弹出 Picker,且选择样式为 Tag 的场景 n
BrnSingleSelectCityPage 城市选择的单选页面 n
BrnShadowCard 阴影卡片支持业务方自定义背景的颜色 n
BrnAbnormalStateWidget 异常页面,页面数据为空的情况 n
BrnMultiSelectDialog 多选列表,适用于从页面中部弹出的情况,属于 Dialog n
BrnFlatSelection 区间+输入混合一级筛选 n
BrnScrollableTextDialog 纯文本Dialog 超过定高可滚动 n
BrnMultiColumnPicker 用于页面底部的级联选择器 n
BrnSelectTagsWithInputPicker 可作为当操作“驳回/无效”等场景时用来填写原因的简单录入 n
BrnDoughnutChart 环状图通过扇形区块的面积,弧度和颜色等视觉标记 n
BrnProgressChart 展示一段进度或者数值 n
BrnProgressBarChart 柱状图用于描述分类数据之间的对比 n
BrnBottomTabBar 一般用于首页,或者功能模块底部 n
BrnSelectedListActionSheet 已选列表 n
BrnRatingStar 星级评分条 n
BrnFunnelChart 漏斗图,通常用于表达转化率的场景 n
BrnRadarChart 雷达图,满足普通使用雷达图的场景 n
BrnSimpleSelection 简单筛选 n
BrnAnchorTab 锚点 n
Clone this wiki locally