lianjiatech / bruno Goto Github PK
View Code? Open in Web Editor NEWAn enterprise-class package of Flutter components for mobile applications. ( Bruno 是基于一整套设计体系的 Flutter 组件库。)
Home Page: https://bruno.ke.com/
License: MIT License
An enterprise-class package of Flutter components for mobile applications. ( Bruno 是基于一整套设计体系的 Flutter 组件库。)
Home Page: https://bruno.ke.com/
License: MIT License
请问贵团队内部采用的ide是什么? 有对应的代码格式化配置文件吗?
有意向提交一些pr, 但是我在保存时,代码格式全部发生变化...
安卓12 aosp 系统
公司:无
截图:无
app下载地址:无
留言如下:
你好,看到你们的开源产品感觉眼前一亮。在使用BrnCalendarView组件时,发现只有选择功能,缺少数据展示的功能。希望能增加一下传入数据就能用该控件进行展示(如,历史打卡记录功能:有传入的日期就高亮显示,没有的就置灰)
Originally posted by @shoppinglink in #2 (comment)
内容需包含:
1、优化描述
代码:
var smallFormItemConfig = BrnFormItemConfig(
titleTextStyle: BrnTextStyle(fontSize: 14),
hintTextStyle: BrnTextStyle(fontSize: 14),
titlePaddingSm: EdgeInsets.zero,
titlePaddingLg: EdgeInsets.zero,
);
BrnTextInputFormItem(
themeData: smallFormItemConfig,
title: "店铺名称",
hint: "填写店铺名称",
onChanged: (newValue) {},
),
BrnLine(),
BrnTextSelectFormItem(
themeData: smallFormItemConfig,
title: "主营范围",
hint: "",
onTap: () {},
),
只对 BrnTextInputFormItem 生效,而对 BrnTextSelectFormItem 没有生效
2、关联组件
BrnTextSelectFormItem
3、具体优化建议
4、运行环境(非必填)
5、附加信息
当前效果:
期望效果:
全部左对齐
建议提供暗黑模式下的默认样式
BrnPopupListWindow.showPopListWindow(context, _key, data: ['評價', '退出'], onItemClick: (index, text) { switch (index) { case 0: Navigator.push(context, MaterialPageRoute(builder: (_) => const EvaluatePage())); // Get.to(() => const EvaluatePage(), // transition: Transition.rightToLeftWithFade); break; case 1: SystemNavigator.pop(); break; default: } });
我是一名Flutter初学者,当我使用弹出的选项跳转至下一界面,我收到了这样的消息:
最开始我以为是context的问题,但当我引入Get管理的时候错误依旧。
BUG描述
华为荣耀6X的Dialog中的输入框存在软键盘遮挡
复现步骤
安卓手机运行example,点击Dialog弹窗,点击”标题+信息+输入+按钮“,如下图:
运行环境
设备:华为荣耀6X
系统:安卓版本8.0.0
Bruno 版本:1.22.4
Flutter Doctor 信息:
[✓] Flutter (Channel stable, 2.8.0, on macOS 12.0.1 21A559 darwin-x64, locale zh-Hans-CN)
[!] Android toolchain - develop for Android devices (Android SDK version 30.0.0)
✗ cmdline-tools component is missing
Run path/to/sdkmanager --install "cmdline-tools;latest"
See https://developer.android.com/studio/command-line for more details.
✗ Android license status unknown.
Run flutter doctor --android-licenses
to accept the SDK licenses.
See https://flutter.dev/docs/get-started/install/macos#android-setup for more details.
[✓] Xcode - develop for iOS and macOS (Xcode 13.1)
[✓] Chrome - develop for the web
[✓] Android Studio (version 2020.3)
[✓] IntelliJ IDEA Community Edition (version 2021.1.2)
[✓] VS Code (version 1.63.0)
[✓] VS Code (version 1.63.0-insider)
[✓] Connected device (2 available)
标题格式: NoSuchMethodError: Class '_Timer' has no instance method 'onCancel'. 程序并没报错,控制台一直打印
内容需包含:
1、BUG 描述
E/flutter (29819): [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: NoSuchMethodError: Class '_Timer' has no instance method 'onCancel'.
E/flutter (29819): Receiver: Instance of '_Timer'
E/flutter (29819): Tried calling: onCancel()
E/flutter (29819): #0 Object.noSuchMethod (dart:core-patch/object_patch.dart:63:5)
E/flutter (29819): #1 _ActionSheetEntryPageState._showChangeableStyle.
package:example/…/actionsheet/actionsheet_entry_page.dart:391
E/flutter (29819): #2 _rootRunUnary (dart:async/zone.dart:1436:47)
E/flutter (29819): #3 _CustomZone.runUnary (dart:async/zone.dart:1335:19)
E/flutter (29819):
E/flutter (29819):
E/flutter (29819): [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: setState() called after dispose(): _StatefulBuilderState#60b89(lifecycle state: defunct, not mounted)
E/flutter (29819): This error happens if you call setState() on a State object for a widget that no longer appears in the widget tree (e.g., whose parent widget no longer includes the widget in its build). This error can occur when code calls setState() from a timer or an animation callback.
E/flutter (29819): The preferred solution is to cancel the timer or stop listening to the animation in the dispose() callback. Another solution is to check the "mounted" property of this object before calling setState() to ensure the object is still in the tree.
E/flutter (29819): This error might indicate a memory leak if setState() is being called because another object is retaining a reference to this State object after it has been removed from the tree. To avoid memory leaks, consider breaking the reference to this object during dispose().
E/flutter (29819): #0 State.setState.
package:flutter/…/widgets/framework.dart:1052
E/flutter (29819): #1 State.setState
package:flutter/…/widgets/framework.dart:1087
E/flutter (29819): #2 _ActionSheetEntryPageState._showChangeableStyle...
package:example/…/actionsheet/actionsheet_entry_page.dart:364
E/flutter (29819): #3 _rootRunUnary (dart:async/zone.dart:1436:47)
E/flutter (29819): #4 _CustomZone.runUnary (dart:async/zone.dart:1335:19)
E/flutter (29819): #5 _CustomZone.runUnaryGuarded (dart:async/zone.dart:1244:7)
E/flutter (29819): #6 _CustomZone.bindUnaryCallbackGuarded. (dart:async/zone.dart:1281:26)
E/flutter (29819): #7 _rootRunUnary (dart:async/zone.dart:1444:13)
E/flutter (29819): #8 _CustomZone.runUnary (dart:async/zone.dart:1335:19)
E/flutter (29819): #9 _CustomZone.bindUnaryCallback. (dart:async/zone.dart:1265:26)
E/flutter (29819): #10 _Timer._runTimers (dart:isolate-patch/timer_impl.dart:395:19)
E/flutter (29819): #11 _Timer._handleMessage (dart:isolate-patch/timer_impl.dart:426:5)
E/flutter (29819): #12 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:184:12)
E/flutter (29819):
I/chatty (29819): uid=10146(com.beike.bruno) 1.ui identical 3 lines
2、复现步骤
ActionSheet > CommonActionSheet(通用样式ActionSheet,选择名动态变化)> dismiss sheet 时 出现异常
3、期望行为
4、运行环境
5、附加信息
包括视频、图片等补充信息
BrnBubbleText 组件 颜色 自定义 属性 希望得到增加
是否有多语言适配到组件功能?
请问这套组件库是否会 自动适配不同设备的尺寸?
标题格式:[BUG]: 问题简介
内容需包含:
1、BUG 描述
../../flutter/.pub-cache/hosted/pub.flutter-io.cn/bruno-2.0.0/lib/src/components/form/items/group/element_expand_widget.dart:275:31: Error: The getter 'subhead' isn't defined for the class 'TextTheme'.
2、复现步骤
3、期望行为
4、运行环境
flutter 2.5.3
5、附加信息
包括视频、图片等补充信息
最新版本已经是2.8了,今天想在新项目中尝试一下这些组件,发现因为版本依赖太低无法运行
如果你有好的组件,欢迎参照以下方式共建进来,一起为开发社区贡献力量:fist:
在提共建之前请参照以下格式:
组件名称:
组件功能:
组件视频 or 截图:
我们会根据以上信息对共建组件进行评审并给出回复
如果想直接参与修改源代码,请将 Pull Request 请提交到 2.2.x
分支,我们会定期查阅合并 PR,在发版前合入master,期待您的参与~
标题格式:[Optimize]: 优化简介
内容需包含:
1、优化描述
2、关联组件
3、具体优化建议
4、运行环境(非必填)
5、附加信息
欢迎联系我:vx:A329887179
包括视频、图片等补充信息
安装依赖正常,但只要引入了 bruno 就报如下异常
flutter 版本:2.5.3
bruno 版本:2.0.0
/.pub-cache/hosted/pub.flutter-io.cn/bruno-2.0.0/lib/src/components/form/items/group/element_expand_widget.dart:275:31: Error: The getter 'subhead' isn't defined for the class 'TextTheme'.
- 'TextTheme' is from 'package:flutter/src/material/text_theme.dart' ('../../flutter/flutter/packages/flutter/lib/src/material/text_theme.dart').
Try correcting the name to the name of an existing getter, or defining a getter or field named 'subhead'.
..end = theme.textTheme.subhead.color;
bruno组件非常牛,请问空安全版本什么时候能用?
✨非常感谢您对我们产品的的关注和支持✨
如果您的公司使用到我们产品欢迎在下方留言晒图,您的回复将成为我们持续的动力源泉:sunny: , 我们也会持续关注使用问题、提升使用体验:fist:
建议留言形式
感谢参与迁移共建,在认领前请确保你认领的类别在 project todo 进度中
在确定没有其他人在迁移后回复:
申请迁移[组名]
eg:apply migrate text
请注意:我们建议一次迁移一类组件,因此认领建议一次认领一个类别
我们会按照时间顺序将对应 card 关联上申请的开发者
迁移工作预计将在 1月31号左右完成,如有特殊情况中途无法完成,还请在回复中及时同步我们~
最后,再次感谢大家参与 ❤️
ActionSheet 示例中我发现你们在做购物车底部跳出功能使用是 Overlay 来做的,这么做可以和Widget解耦,但是没有考虑点击返回键的情况
bug:弹出购物车列表在点击返回键,页面回退了但是购物车列表还在页面上,建议参考 WidgetsBindingObserver 的 didPopRoute 函数处理这个问题
标题格式:[BUG]: 问题简介
内容需包含:
1、BUG 描述
BrnDialogManager.showSingleButtonDialog按钮确定不会关闭
2、复现步骤
BrnDialogManager.showSingleButtonDialog(
context,
label: "确定",
title: "确定要吗",
barrierDismissible: false,
onTap: () async{
BrnToast.show("aaaa", context);
return;
},
);
3、期望行为
onTap后按钮关闭
4、运行环境
android
windows
bruno: ^2.1.0-nullsafety.1
5、附加信息
包括视频、图片等补充信息
#25 引入了静态代码检查,已有代码和后续新加入的需要统一规范。
analysis_options.yaml
Plugin 已经装上了 还需要怎么才做才能 展示代码么?
Bruno 在公司内是一个时间跨度大,贡献者多的项目,虽然已经经过多条业务线累计上万次的引用。但从开源项目来看,它仍是一个蹒跚学步的婴儿,需要成长。如果你在使用过程中遇到了问题,或者有什么建议,欢迎 issue 与我们交流共建,我们非常期待与你一起将 Bruno 做成 Flutter 生态中最有影响力的组件项目。
为了更高效的沟通,你的行为可以参考以下指南:
标题格式:[BUG]: 问题简介
内容需包含:
1、BUG 描述
问题的描述,请尽量使用简短、准确的语言
2、复现步骤
3、期望行为
4、运行环境
5、附加信息
包括视频、图片等补充信息
在提功能需求之前,建议先查询组件文档,考虑你需要的功能是否可以通过组件其他属性完成。如无法解决 ,issue 参考:
标题格式:[Feature]: 需求描述
内容需包含:
1、运行环境
2、是否有与之关联的 issue
3、描述你期望的解决方案
4、附加信息
包括视频、图片等补充信息
标题格式:[Optimize]: 优化简介
内容需包含:
1、优化描述
2、关联组件
3、具体优化建议
4、运行环境(非必填)
5、附加信息
包括视频、图片等补充信息
提供一个钉钉群一起进步吧
空安全适配什么时候上啊,
这个字体应该是个商用收费字体,项目中依赖这个,看是不是换成免费字体比较好。 https://fonts.google.com/?query=Condensed
BrnPickerTitleConfig titleContent 设置无效
需要在lib/src/components/picker/brn_bottom_picker.dart 第183行添加
titleContent: widget.pickerTitleConfig.titleContent,
1、BUG 描述
BrnTabBar 设置 showMore: true 运行时报错
2、复现步骤
点击展开时报错 A RenderFlex overflowed by 199413 pixels on the bottom ,见附图
Scaffold(
appBar: BrnAppBar(
brightness: Brightness.dark,
leading: BrnBackLeading(
child: FlutterLogo(),
),
title: Text("HELLO"),
),
body: Column(
children: [
BrnTabBar(
tabHeight: AppBar().preferredSize.height,
tabs: [
BadgeTab(text: "需求1"),
BadgeTab(text: "需求2"),
],
showMore: true,
controller: _tabController,
onTap: (state, index) {
// state.refreshBadgeState(index);
},
),
],
),
);
3、期望行为
不报错
4、运行环境
flutter 2.8.1
5、附加信息
标题格式:[BUG]: 问题简介
内容需包含:
1、BUG 描述
问题的描述,请尽量使用简短、准确的语言
2、复现步骤
3、期望行为
4、运行环境
5、附加信息
包括视频、图片等补充信息
内容需包含:
1、优化描述
系统状态栏颜色能自定义
比如:
Widget build(BuildContext context) {
return Scaffold(
appBar: BrnAppBar(
themeData: BrnAppBarConfig(
backgroundColor: Colors.white,
systemUiOverlayStyle: SystemUiOverlayStyle.dark.copyWith(
statusBarColor: Colors.transparent,
)
),
automaticallyImplyLeading: false,
showDefaultBottom: false,
brightness: Brightness.light,
actions: BrnTextAction(
"验证码登录",
iconPressed: () {
print('验证码登录');
},
),
),
实际上这里传入的 systemUiOverlayStyle 并没有生效。
2、关联组件
BrnAppBar
3、具体优化建议
4、运行环境(非必填)
5、附加信息
当前效果:
期望效果:
1、优化描述
见图。默认情况下,这个第一个组件总是居中显示,对于长列表来说,效果不是很理想,希望可以使这个滚动列表第一项位置直接在顶部展示。
相关代码:
final List<String> _list = [
'水果生鲜',
'家用电器',
'休闲食品',
'茶酒饮料',
'美妆个护',
'粮油调味',
'家庭清洁',
'厨具用品',
'儿童玩具',
'床上用品'
];
BrnMultiDataPicker(
context: context,
themeData: BrnPickerConfig(
pickerHeight: 400,
),
title: '来源',
delegate: SingleColumnDataPickerDelegate(
dataList: _list, itemTitleBuilder: (index) => _list[index]),
confirmClick: (list) {
BrnToast.show(list.toString(), context);
},
).show();
typedef ItemTitleBuilder = String Function(int index);
class SingleColumnDataPickerDelegate extends BrnMultiDataPickerDelegate {
int current;
double itemExtent;
List<String> dataList;
ItemTitleBuilder itemTitleBuilder;
SingleColumnDataPickerDelegate(
{this.current = 0,
this.itemExtent = 50.0,
required this.dataList,
required this.itemTitleBuilder});
@override
int initSelectedRowForComponent(int component) {
return current;
}
@override
int numberOfComponent() {
return 1;
}
@override
int numberOfRowsInComponent(int component) {
return dataList.length;
}
@override
double? rowHeightForComponent(int component) {
return itemExtent;
}
@override
void selectRowInComponent(int component, int row) {
current = row;
}
@override
String titleForRowInComponent(int component, int index) {
return itemTitleBuilder(index);
}
}
2、关联组件
BrnMultiDataPicker
3、具体优化建议
4、运行环境(非必填)
5、附加信息
希望示例代码里可以加入主题定制的详细代码
聊天组件或者私信组件都可以
1、优化描述
大多数组件依赖bruno_theme
,先迁移bruno_theme
到空安全可能更好🤣
参考 https://dart.cn/null-safety/migration-guide#migrating-by-hand
2、关联组件
library bruno_theme
3、具体优化建议
bruno_theme
到空安全4、运行环境
branch null-safe
标题格式:[Optimize]: 优化简介
每个页面的切换挺卡,首页的list滚动也是一顿一顿的
类似 咸鱼
项目中加入相关的 Linter 规范会不会好点?
标题格式:[BUG]: 问题简介
内容需包含:
1、BUG 描述
BrnCommonActionSheet中调用BrnMiddleInputDialog,BrnMiddleInputDialog打开失败,未报错误信息
2、复现步骤
BrnCommonActionSheet中调用BrnMiddleInputDialog
3、期望行为
BrnMiddleInputDialog可以正常打开
4、运行环境
bruno: ^2.1.0-nullsafety.1
5、附加信息
包括视频、图片等补充信息
标题格式:[BUG]: 问题简介
内容需包含:
1、BUG 描述
BrnPopupListWindow.showPopListWindow
点击事件,路由无法跳转
BrnPopupListWindow.showPopListWindow(context, _popWindowKey, offset: 10, data: ["新增个人担保人", "新增企业担保人"], onItemClick: (index, item) { if(index == 0){ print('1111111'); Navigator.push( context, MaterialPageRoute(builder: (context) => GuarantorPersonPage()), ); Get.toNamed(AppPages.guarantorPerson); } else { print('222222'); Get.toNamed(AppPages.guarantorCompany); } },); })
我用了两个路由才能实现跳转,我用了一个原生+getx路由,才能跳转过去。
2、复现步骤
BrnPopupListWindow.showPopListWindow
3、期望行为
希望只要是个路由就能跳转过去
4、运行环境
Flutter 1.22.5 • channel stable
Engine • revision ae90085a84
Tools • Dart 2.10.4
5、附加信息
包括视频、图片等补充信息
标题格式:[Optimize]: 优化简介
内容需包含:
1、优化描述
2、关联组件
3、具体优化建议
4、运行环境(非必填)
5、附加信息
包括视频、图片等补充信息
有拍照控制及图片加上水印和压缩组件吗
标题格式:[BUG]:
内容需包含:
1、BUG 描述
本地启动flutter run后,使用Safari加载服务地址后白屏报错
2、复现步骤
main.dart导入
import 'package:bruno/bruno.dart';
添加代码
BrnInitializer.register(
allThemeConfig: BrnAllThemeConfig(
// 全局配置
commonConfig: BrnCommonConfig(brandPrimary: Color(0xFF3072F6)),
// dialog配置
dialogConfig: BrnDialogConfig(radius: 12.0)));
启动
flutter run -d chrome --no-sound-null-safety
safari打开地址报错
3、期望行为
4、运行环境
5、附加信息
包括视频、图片等补充信息
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.