什么是使自定义小部件不与材料包导出的小部件冲突的最佳方法?具体来说:我正在尝试开发一个基于原子设计的设计系统。所以,假设我想要我自己的Text
和Card
小部件。我不能将它们命名为Text
或Card
,因为它们都是由材料包导出的。
我已经考虑过的一些选择:
ui
库并使用 as
导入的// components/atoms/Text.dart
import "package:flutter/material.dart" hide Text;
import "package:flutter/material.dart" as material show Text;
class Text extends StatelessWidget {
Text(String content);
Widget build(BuildContext context) {
// Imagine some more complicated styling specific to my design system
return material.Text(content);
}
}
// components/ui.dart
library ui
export "package:my_app/components/atoms/Text";
// screens/HomeScreen.dart
import "package:flutter/material.dart";
import "package:my_app/components/ui" as ui;
class HomeScreen extends StatelessWidget {
Widget build(BuildContext context) {
// Example usage
return ui.Text(content);
}
}
感觉不太好..。首先,每当我导入as
库时,我都需要记住包括ui
,其次,在Text
实现中使用hide
和show
类有点烦人。
hide
冲突类// screens/HomeScreen.dart
import "package:flutter/material.dart" hide Text;
import "package:my_app/components/Text";
class HomeScreen extends StatelessWidget {
Widget build(BuildContext context) {
// Example usage
return Text(content);
}
}
类似于选项(1),我不想记住与我的自定义小部件冲突的所有类hide
。
也许是AppText
,ThemeText
,UIText
,AtomText
?这感觉也不太好,特别是对于其他一些小部件,比如IconButton
。
围绕这件事有什么约定吗,或者有什么像样的解决办法?我还没有看到任何定制的UI库,但是对于那些希望在应用程序之间重用小部件并保持一致风格的团队来说,这是非常有用的。
发布于 2021-04-09 10:48:33
据我所知,您希望您的自定义文本类与普通文本小部件完全相同,但使用不同的设计。如果确实如此,我建议您更改项目的ThemeData。MaterialApp
小部件接受一个主题参数,因此您可以在其中对TextTheme、CardTheme、IconButtonTheme等进行样式设置。这将防止任何命名冲突,节省大量编码,并使其易于调整。
像TextTheme这样的东西允许使用不同类型的样式,如标题、正文等,就像这里描述的那样。
发布于 2021-04-09 11:24:24
https://stackoverflow.com/questions/67026502
复制