-
Notifications
You must be signed in to change notification settings - Fork 498
Null Safety Guide
开源社区的开发者们好,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:
测试或运行混合版本的程序
-
在
dart
和flutter
命令里,加入--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 |