diff --git a/.github/workflows/preview-build.yml b/.github/workflows/preview-build.yml
index 9d37794f8..c7988e8bf 100644
--- a/.github/workflows/preview-build.yml
+++ b/.github/workflows/preview-build.yml
@@ -90,147 +90,6 @@ jobs:
repository: TDesignOteam/tdesign-flutter-generator
path: ./example/tdesign-flutter-generator
- - name: 重写脚本
- run: |
- # AOPMarket.enable = true
- yq e '.AOPMarket.enable = true' -i tdesign-component/example/pubspec.yaml
- # 更新 tdesign-component/example/android/app/build.gradle
- cd $GITHUB_WORKSPACE/tdesign-component/example/android/app
-
- # 使用 sed 更新 build.gradle 文件
- # 1. 添加 namespace 如果不存在
- if ! grep -q "namespace" build.gradle; then
- sed -i '/^android {$/a\\ namespace '\''com.tdesign.tdesign_flutter_example'\''' build.gradle
- fi
-
- # 2. 更新 compileSdkVersion 从 34 到 35
- sed -i 's/compileSdkVersion 34/compileSdkVersion 35/g' build.gradle
-
- # 3. 更新 minSdkVersion 从 21 到 23
- sed -i 's/minSdkVersion 21/minSdkVersion 23/g' build.gradle
-
- # 4. 更新 targetSdkVersion 从 31 到 35
- sed -i 's/targetSdkVersion 31/targetSdkVersion 35/g' build.gradle
-
- # 5. 将双引号改为单引号 (applicationId)
- sed -i 's/applicationId "com.tdesign.tdesign_flutter_example"/applicationId '\''com.tdesign.tdesign_flutter_example'\''/g' build.gradle
-
- # 6. 添加 compileOptions 和 kotlinOptions 如果不存在
- if ! grep -q "compileOptions" build.gradle; then
- # 在 buildTypes 块之后添加 compileOptions 和 kotlinOptions
- awk '
- BEGIN { in_android = 0; buildtypes_done = 0 }
- /^android \{/ { in_android = 1; print; next }
- /^ buildTypes \{/ && in_android { print; in_buildtypes = 1; next }
- /^ \}/ && in_buildtypes && in_android {
- print
- print ""
- print " compileOptions {"
- print " sourceCompatibility JavaVersion.VERSION_17"
- print " targetCompatibility JavaVersion.VERSION_17"
- print " }"
- print ""
- print " kotlinOptions {"
- print " jvmTarget = '\''17'\''"
- print " }"
- in_buildtypes = 0
- buildtypes_done = 1
- next
- }
- /^}/ && in_android && buildtypes_done { in_android = 0 }
- { print }
- ' build.gradle > build.gradle.tmp && mv build.gradle.tmp build.gradle
- fi
-
- echo "=== build.gradle 更新完成 ==="
- echo "=== 显示更新后的 android 块 ==="
- sed -n '/^android {/,/^}/p' build.gradle
- # 重写 tdesign-component/example/android/build.gradle
- cd $GITHUB_WORKSPACE/tdesign-component/example/android
-
- # 删除原文件并创建新文件
- rm -f build.gradle
-
- # 创建新的 build.gradle 文件内容
- echo "buildscript {" > build.gradle
- echo " ext.kotlin_version = '1.7.10'" >> build.gradle
- echo "" >> build.gradle
- echo " ext {" >> build.gradle
- echo " config = [" >> build.gradle
- echo " // 蓝盾自带变量" >> build.gradle
- echo " isCI : System.getenv(\"isCI\") ?: \"false\" // 是否在RMD的持续集成构建环境中" >> build.gradle
- echo " , VersionCode : System.getenv(\"VersionCode\") ?: \"1\" // VersionCode,每次发版本+2" >> build.gradle
- echo " , devopsUUID : System.getenv(\"uuid\") ?: \"local\" // 蓝盾构建UUID" >> build.gradle
- echo " , MajorVersion : System.getenv(\"MajorVersion\") ?: \"1\" // 主版本号" >> build.gradle
- echo " , MinorVersion : System.getenv(\"MinorVersion\") ?: \"0\" // 特性版本号" >> build.gradle
- echo " , FixVersion : System.getenv(\"FixVersion\") ?: \"0\" // 修正版本号" >> build.gradle
- echo " , BuildNo : System.getenv(\"BuildNo\") ?: \"0\" // 构建号" >> build.gradle
- echo " , isPublish : System.getenv(\"isPublish\") ?: \"false\" // 是否是外发版本,用来控制调试入口等" >> build.gradle
- echo " , isBeta : System.getenv(\"isBeta\") ?: \"false\" // 是否是灰度版本" >> build.gradle
- echo " , gitVersion : System.getenv(\"gitVersion\") ?: \"local\" // git提交hash" >> build.gradle
- echo " , keyAlias : System.getenv(\"keyAlias\") ?: \"debug\" // 签名信息" >> build.gradle
- echo " , storePassword: System.getenv(\"storePassword\") ?: \"debug\" // storePassword" >> build.gradle
- echo " , abi_filters : System.getenv(\"abi_filters\") ?: \"armeabi-v7a,arm64-v8a,x86,x86_64\" // abi类型配置" >> build.gradle
- echo " ]" >> build.gradle
- echo "" >> build.gradle
- echo " def dir = System.getProperty(\"user.dir\")" >> build.gradle
- echo " def file = new File(dir, 'local.properties')" >> build.gradle
- echo " Properties properties = new Properties()" >> build.gradle
- echo " if (file.exists()) {" >> build.gradle
- echo " properties.load(file.newDataInputStream())" >> build.gradle
- echo " }" >> build.gradle
- echo " enableWatchman = Boolean.valueOf(properties.getProperty('enableWatchman', \"\"))" >> build.gradle
- echo " }" >> build.gradle
- echo "" >> build.gradle
- echo " repositories {" >> build.gradle
- echo " google()" >> build.gradle
- echo " mavenCentral()" >> build.gradle
- echo " }" >> build.gradle
- echo "" >> build.gradle
- echo " dependencies {" >> build.gradle
- echo " classpath 'com.android.tools.build:gradle:7.0.1'" >> build.gradle
- echo " classpath \"org.jetbrains.kotlin:kotlin-gradle-plugin:\$kotlin_version\"" >> build.gradle
- echo " }" >> build.gradle
- echo "}" >> build.gradle
- echo "" >> build.gradle
- echo "allprojects {" >> build.gradle
- echo " repositories {" >> build.gradle
- echo " google()" >> build.gradle
- echo " mavenCentral()" >> build.gradle
- echo " }" >> build.gradle
- echo "}" >> build.gradle
- echo "rootProject.buildDir = '../build'" >> build.gradle
- echo "subprojects {" >> build.gradle
- echo " project.buildDir = \"\${rootProject.buildDir}/\${project.name}\"" >> build.gradle
- echo "}" >> build.gradle
- echo "subprojects {" >> build.gradle
- echo " project.evaluationDependsOn(':app')" >> build.gradle
- echo "}" >> build.gradle
- echo "tasks.register(\"clean\", Delete) {" >> build.gradle
- echo " delete rootProject.buildDir" >> build.gradle
- echo "}" >> build.gradle
-
- echo "=== android/build.gradle 重写完成 ==="
- echo "=== 显示新的 android/build.gradle 内容 ==="
- cat build.gradle
- # 更新 tdesign-component/example/android/gradle/wrapper/gradle-wrapper.properties
- cd $GITHUB_WORKSPACE/tdesign-component/example/android/gradle/wrapper
-
- # 更新 Gradle 版本从 7.6 到 8.4
- sed -i 's|distributionUrl=https\\://services.gradle.org/distributions/gradle-7.6-all.zip|distributionUrl=https\\://services.gradle.org/distributions/gradle-8.4-all.zip|g' gradle-wrapper.properties
-
- echo "=== gradle-wrapper.properties 更新完成 ==="
- echo "=== 显示更新后的 gradle-wrapper.properties 内容 ==="
- cat gradle-wrapper.properties
- # 更新 tdesign-component/example/android/settings.gradle
- cd $GITHUB_WORKSPACE/tdesign-component/example/android
-
- # 更新 Android Gradle Plugin 版本从 7.3.0 到 8.3.0
- sed -i 's|id "com.android.application" version "7.3.0" apply false|id "com.android.application" version "8.3.0" apply false|g' settings.gradle
-
- echo "=== settings.gradle 更新完成 ==="
- echo "=== 显示更新后的 settings.gradle 内容 ==="
- cat settings.gradle
- name: Build Flutter apk
run: |
cd $GITHUB_WORKSPACE/tdesign-component/example
@@ -314,7 +173,7 @@ jobs:
run: |
npm install --unsafe-perm
npm run site
-
+
- name: Build site Demo
working-directory: ./tdesign-component/example
run: |
diff --git a/README.md b/README.md
index 570844aed..573b007ff 100644
--- a/README.md
+++ b/README.md
@@ -98,6 +98,10 @@ TDesign Flutter depends on the following component libraries. We appreciate the
Contributing is welcome. Read [guidelines for contributing](CONTRIBUTING.md) before submitting your [Pull Request](https://github.com/Tencent/tdesign-flutter/pulls).
+
+
+
+
# Feedback
Create your [Github issues](https://github.com/Tencent/tdesign-flutter/issues) or scan the QR code below to join our user groups.
diff --git a/README_zh_CN.md b/README_zh_CN.md
index 4cfc3f577..5dd493b3f 100644
--- a/README_zh_CN.md
+++ b/README_zh_CN.md
@@ -88,9 +88,13 @@ TDesign Flutter 依赖以下组件库,感谢作者的开源贡献:
- [flutter_slidable](https://pub-web.flutter-io.cn/packages/flutter_slidable)
- [image_picker](https://pub-web.flutter-io.cn/packages/image_picker)
-# Contributing
+# 贡献
-Contributing is welcome. Read [guidelines for contributing](CONTRIBUTING.md) before submitting your [Pull Request](https://github.com/Tencent/tdesign-flutter/pulls).
+欢迎贡献代码。在提交 [Pull Request](https://github.com/Tencent/tdesign-flutter/pulls) 之前,请先阅读[贡献指南]((CONTRIBUTING.md))。
+
+
+
+
# 反馈
diff --git a/tdesign-component/example/android/app/build.gradle b/tdesign-component/example/android/app/build.gradle
index 925c7d952..754be2516 100644
--- a/tdesign-component/example/android/app/build.gradle
+++ b/tdesign-component/example/android/app/build.gradle
@@ -40,7 +40,19 @@ if (keystorePropertiesFile.exists()) {
android {
- compileSdkVersion 34
+ // AGP 8.0+ 需要设置包命名空间
+ namespace 'com.tdesign.tdesign_flutter_example'
+
+ compileSdkVersion flutter.compileSdkVersion
+
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_11
+ targetCompatibility JavaVersion.VERSION_11
+ }
+
+ kotlinOptions {
+ jvmTarget = JavaVersion.VERSION_11.toString()
+ }
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
@@ -49,8 +61,8 @@ android {
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.tdesign.tdesign_flutter_example"
- minSdkVersion 21
- targetSdkVersion 31
+ minSdkVersion flutter.minSdkVersion
+ targetSdkVersion flutter.targetSdkVersion
versionCode createVersionCode()
versionName createVersionName()
}
diff --git a/tdesign-component/example/android/gradle/wrapper/gradle-wrapper.properties b/tdesign-component/example/android/gradle/wrapper/gradle-wrapper.properties
index 02e5f5817..7aeeb11c6 100644
--- a/tdesign-component/example/android/gradle/wrapper/gradle-wrapper.properties
+++ b/tdesign-component/example/android/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip
diff --git a/tdesign-component/example/android/settings.gradle b/tdesign-component/example/android/settings.gradle
index fa3b8b140..cabc2fa06 100644
--- a/tdesign-component/example/android/settings.gradle
+++ b/tdesign-component/example/android/settings.gradle
@@ -20,8 +20,8 @@ pluginManagement {
plugins {
id "dev.flutter.flutter-plugin-loader" version "1.0.0" // 声明式加载插件
- id "com.android.application" version "7.3.0" apply false // 根据实际 AGP 版本调整
- id "org.jetbrains.kotlin.android" version "1.9.22" apply false // Kotlin 版本需兼容 AGP
+ id "com.android.application" version "8.6.0" apply false // 根据实际 AGP 版本调整
+ id "org.jetbrains.kotlin.android" version "2.1.0" apply false // Kotlin 版本需兼容 AGP
}
include ":app"
\ No newline at end of file
diff --git a/tdesign-component/example/assets/img/empty.png b/tdesign-component/example/assets/img/empty.png
index 70d00ae06..812b0ea4d 100644
Binary files a/tdesign-component/example/assets/img/empty.png and b/tdesign-component/example/assets/img/empty.png differ
diff --git a/tdesign-component/example/assets/theme.json b/tdesign-component/example/assets/theme.json
index 88dfcec04..c864be0e5 100644
--- a/tdesign-component/example/assets/theme.json
+++ b/tdesign-component/example/assets/theme.json
@@ -174,5 +174,114 @@
"grayColor13": "#242424",
"grayColor14": "#181818"
}
+ },
+ "dark": {
+ "ref": {
+ "brandLightColor": "brandColor1",
+ "brandFocusColor": "brandColor1",
+ "brandDisabledColor": "brandColor3",
+ "brandHoverColor": "brandColor5",
+ "brandNormalColor": "brandColor8",
+ "brandActiveColor": "brandColor2",
+ "warningNormalColor": "warningColor5",
+ "warningHoverColor": "warningColor4",
+ "warningFocusColor": "warningColor2",
+ "warningActiveColor": "warningColor6",
+ "warningDisabledColor": "warningColor3",
+ "warningLightColor": "warningColor1",
+ "errorNormalColor": "errorColor6",
+ "errorHoverColor": "errorColor5",
+ "errorFocusColor": "errorColor2",
+ "errorActiveColor": "errorColor7",
+ "errorDisabledColor": "errorColor3",
+ "errorLightColor": "errorColor1",
+ "successNormalColor": "successColor5",
+ "successHoverColor": "successColor4",
+ "successFocusColor": "successColor2",
+ "successActiveColor": "successColor6",
+ "successDisabledColor": "successColor3",
+ "successLightColor": "successColor1",
+ "brandColorLightHover": "brandColor2",
+ "warningColorLightHover": "warningColor2",
+ "errorColorLightHover": "errorColor2",
+ "successColorLightHover": "successColor2",
+ "bgColorPage": "grayColor14",
+ "bgColorContainer": "grayColor13",
+ "bgColorContainerHover": "grayColor12",
+ "bgColorContainerActive": "grayColor10",
+ "bgColorContainerSelect": "grayColor9",
+ "bgColorSecondaryContainer": "grayColor12",
+ "bgColorSecondaryContainerHover": "grayColor11",
+ "bgColorSecondaryContainerActive": "grayColor9",
+ "bgColorComponent": "grayColor11",
+ "bgColorComponentHover": "grayColor10",
+ "bgColorComponentActive": "grayColor9",
+ "bgColorComponentDisabled": "grayColor12",
+ "componentStrokeColor": "grayColor11",
+ "componentBorderColor": "grayColor9",
+ "textColorPrimary": "fontWhColor1",
+ "textColorSecondary": "fontWhColor2",
+ "textColorPlaceholder": "fontWhColor3",
+ "textColorDisabled": "fontWhColor4",
+ "textColorAnti": "fontWhColor1",
+ "textColorBrand": "brandColor8",
+ "textColorLink": "brandColor8"
+ },
+ "color": {
+ "brandColor1": "#1b2f51",
+ "brandColor2": "#173463",
+ "brandColor3": "#143975",
+ "brandColor4": "#103d88",
+ "brandColor5": "#0d429a",
+ "brandColor6": "#054bbe",
+ "brandColor7": "#2667d4",
+ "brandColor8": "#4582e6",
+ "brandColor9": "#699ef5",
+ "brandColor10": "#96bbf8",
+ "warningColor1": "#4f2a1d",
+ "warningColor2": "#582f21",
+ "warningColor3": "#733c23",
+ "warningColor4": "#a75d2b",
+ "warningColor5": "#cf6e2d",
+ "warningColor6": "#dc7633",
+ "warningColor7": "#e8935c",
+ "warningColor8": "#ecbf91",
+ "warningColor9": "#eed7bf",
+ "warningColor10": "#f3e9dc",
+ "errorColor1": "#472324",
+ "errorColor2": "#5e2a2d",
+ "errorColor3": "#703439",
+ "errorColor4": "#83383e",
+ "errorColor5": "#a03f46",
+ "errorColor6": "#c64751",
+ "errorColor7": "#de6670",
+ "errorColor8": "#ec888e",
+ "errorColor9": "#edb1b6",
+ "errorColor10": "#eeced0",
+ "successColor1": "#193a2a",
+ "successColor2": "#1a4230",
+ "successColor3": "#17533d",
+ "successColor4": "#0d7a55",
+ "successColor5": "#059465",
+ "successColor6": "#43af8a",
+ "successColor7": "#46bf96",
+ "successColor8": "#80d2b6",
+ "successColor9": "#b4e1d3",
+ "successColor10": "#deede8",
+ "grayColor1": "#f3f3f3",
+ "grayColor2": "#eeeeee",
+ "grayColor3": "#e7e7e7",
+ "grayColor4": "#dcdcdc",
+ "grayColor5": "#c5c5c5",
+ "grayColor6": "#a6a6a6",
+ "grayColor7": "#8b8b8b",
+ "grayColor8": "#77",
+ "grayColor9": "#5e5e5e",
+ "grayColor10": "#4b4b4b",
+ "grayColor11": "#383838",
+ "grayColor12": "#2c2c2c",
+ "grayColor13": "#242424",
+ "grayColor14": "#181818"
+ }
}
}
\ No newline at end of file
diff --git a/tdesign-component/example/l10n.yaml b/tdesign-component/example/l10n.yaml
index 4e6692e55..281a5f8fc 100644
--- a/tdesign-component/example/l10n.yaml
+++ b/tdesign-component/example/l10n.yaml
@@ -1,3 +1,8 @@
+# 详见 https://docs.flutter.dev/release/breaking-changes/flutter-generate-i10n-source
+# 新版可注释掉synthetic-package,使用旧版则保留
+# 也可参考上述文档执行 flutter config --explicit-package-dependencies
+synthetic-package: false
arb-dir: lib/l10n
template-arb-file: app_en.arb
-output-localization-file: app_localizations.dart
\ No newline at end of file
+output-localization-file: app_localizations.dart
+#output-dir: lib/l10n
\ No newline at end of file
diff --git a/tdesign-component/example/lib/about.dart b/tdesign-component/example/lib/about.dart
index 50b4f6fb8..1b7f12fec 100644
--- a/tdesign-component/example/lib/about.dart
+++ b/tdesign-component/example/lib/about.dart
@@ -10,7 +10,6 @@ class AboutPage extends StatefulWidget {
}
class _AboutPageState extends State {
-
String? version;
String? publishTime;
@@ -26,61 +25,27 @@ class _AboutPageState extends State {
version = await rootBundle.loadString('assets/version');
setState(() {});
}
-
+
Future _getPublishTime() async {
var timeStamp = await rootBundle.loadString('assets/publish_time');
- var exactTime = DateTime.fromMillisecondsSinceEpoch(int.parse(timeStamp.trim()));
+ var exactTime =
+ DateTime.fromMillisecondsSinceEpoch(int.parse(timeStamp.trim()));
publishTime = '${exactTime.year}-${exactTime.month}-${exactTime.day}';
setState(() {});
}
-
@override
Widget build(BuildContext context) {
return Scaffold(
- backgroundColor: TDTheme.of(context).grayColor1,
- appBar: AppBar(title: TDText('关于我们', textColor: TDTheme.of(context).whiteColor1,),),
- body: SingleChildScrollView(
- child: Column(
- children: [
- demoRow(context, '版本号:',desc: version),
- demoRow(context, '发版日期:', desc: publishTime)
- ],
- ),
+ appBar: AppBar(title: const Text('关于我们')),
+ body: TDCellGroup(
+ title: 'TDesign Flutter',
+ theme: TDCellGroupTheme.cardTheme,
+ cells: [
+ TDCell(title: '版本号', note: version),
+ TDCell(title: '发版日期', note: publishTime),
+ ],
),
);
}
-
- Widget demoRow(
- BuildContext context,
- String? title, {
- String? desc,
- bool on = true,
- bool enable = true,
- Color? onColor,
- Color? offColor,
- }) {
- final theme = TDTheme.of(context);
- Widget current = Row(
- children: [
- Expanded(
- child: TDText(
- title,
- textColor: theme.fontGyColor1,
- )),
- TDText(
- desc ?? '',
- textColor: theme.grayColor6,
- forceVerticalCenter: true,
- ),
- ],
- );
- current = Container(
- color: TDTheme.of(context).whiteColor1,
- padding: const EdgeInsets.only(left: 16, right: 16, bottom: 1, top: 1),
- child: current,
- height: 44,
- );
- return current;
- }
}
diff --git a/tdesign-component/example/lib/base/api_widget.dart b/tdesign-component/example/lib/base/api_widget.dart
index e197a2d6b..41f0cc861 100644
--- a/tdesign-component/example/lib/base/api_widget.dart
+++ b/tdesign-component/example/lib/base/api_widget.dart
@@ -1,4 +1,3 @@
-
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_markdown/flutter_markdown.dart';
@@ -16,22 +15,22 @@ class ApiPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
- appBar: AppBar(title: TDText('${model?.text} API', textColor: TDTheme.of(context).whiteColor1,),),
+ appBar: AppBar(title: Text('${model?.text} API')),
body: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.all(16),
- child: ApiWidget(apiName: model?.name, visible: true,),
+ child: ApiWidget(apiName: model?.name),
),
),
);
}
}
-
class ApiWidget extends StatefulWidget {
- const ApiWidget({Key? key, required this.apiName, this.visible = false}) : super(key: key);
-
- final bool visible;
+ const ApiWidget({
+ Key? key,
+ required this.apiName,
+ }) : super(key: key);
final String? apiName;
@@ -40,21 +39,18 @@ class ApiWidget extends StatefulWidget {
}
class _ApiWidgetState extends State {
-
String? result;
String? lastApiName;
@override
Widget build(BuildContext context) {
- return Visibility(
- visible: widget.visible,
- child: FutureBuilder(
+ return FutureBuilder(
future: getApiData(),
builder: (context, AsyncSnapshot snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
return Container(
margin: const EdgeInsets.only(bottom: 64),
- child: Markdown(
+ child: Markdown(
padding: EdgeInsets.zero,
physics: const NeverScrollableScrollPhysics(),
shrinkWrap: true,
@@ -67,13 +63,17 @@ class _ApiWidgetState extends State {
),
);
} else {
- return Container(
- alignment: Alignment.topLeft,
- child: const TDText('加载中…'),
+ return const Center(
+ child: TDLoading(
+ size: TDLoadingSize.large,
+ icon: TDLoadingIcon.circle,
+ text: '加载中…',
+ axis: Axis.horizontal,
+ ),
);
}
},
- ));
+ );
}
Future getApiData() async {
@@ -82,16 +82,18 @@ class _ApiWidgetState extends State {
暂无对应api
''';
- if(widget.apiName == lastApiName && result != null && result != defaultResult){
+ if (widget.apiName == lastApiName &&
+ result != null &&
+ result != defaultResult) {
return result!;
}
try {
var apiName = widget.apiName ?? 'default';
- result = await rootBundle.loadString('assets/api/${apiName}_api.md');
+ result = await rootBundle.loadString('assets/api/${apiName}_api.md');
lastApiName = widget.apiName;
} catch (e) {
print('getApiData error: $e');
}
return result ?? defaultResult;
}
-}
\ No newline at end of file
+}
diff --git a/tdesign-component/example/lib/base/example_widget.dart b/tdesign-component/example/lib/base/example_widget.dart
index d0a8deaed..bc3ea6fe8 100644
--- a/tdesign-component/example/lib/base/example_widget.dart
+++ b/tdesign-component/example/lib/base/example_widget.dart
@@ -25,7 +25,7 @@ class ExamplePage extends StatefulWidget {
this.desc = '',
this.children = const [],
this.padding,
- this.backgroundColor,
+ @deprecated this.backgroundColor,
required this.exampleCodeGroup,
this.test = const [],
this.showSingleChild = false,
@@ -101,8 +101,6 @@ class _ExamplePageState extends State {
Widget build(BuildContext context) {
return Scaffold(
floatingActionButton: widget.floatingActionButton,
- backgroundColor:
- widget.backgroundColor ?? TDTheme.of(context).grayColor1,
body: ScrollbarTheme(
data: ScrollbarThemeData(
trackVisibility: MaterialStateProperty.all(true)),
@@ -114,63 +112,72 @@ class _ExamplePageState extends State {
child: widget.showSingleChild && widget.singleChild != null
? _singleChild()
: MediaQuery(
- // 去掉底部安全区域,保证示例展示正常
- data: MediaQuery.of(context).copyWith(padding: EdgeInsets.zero),
- child: ListView.builder(
- controller: widget.scrollController,
- shrinkWrap: true,
- physics: const BouncingScrollPhysics(),
- padding: const EdgeInsets.only(top: 24, bottom: 24),
- itemCount: widget.children.length + 3,
- itemBuilder: (context, index) {
- if (index == 0) {
- return _buildHeader(context);
- }
- if (index == widget.children.length + 2) {
- return WebMdTool.needGenerateWebMd
- ? Container(
- margin: const EdgeInsets.only(top: 24),
- child: Column(
- children: [
- TDButton(
- text: '生成Web使用md',
- type: TDButtonType.fill,
- onTap: () => WebMdTool.generateWebMd(
- model: model,
- description: widget.desc,
- exampleCodeGroup:
- widget.exampleCodeGroup,
- exampleModuleList:
- widget.children,
- testList: widget.test,
- singleChild:
- widget.showSingleChild
- ? widget.singleChild
- : null),
- ),
- TDButton(
- text: '返回首页',
- type: TDButtonType.fill,
- onTap: () => Navigator.of(context).maybePop(),
- ),
- ],
- ),
- )
- : Container();
- }
- ExampleModule data;
- if (index <= widget.children.length) {
- data = widget.children[index - 1];
- } else {
- data = ExampleModule(title: '单元测试', children: [
- _buildTestExampleItem(),
- ...widget.test
- ]);
- }
- return _buildModule(index, data, context);
- },
- ),
- )),
+ // 去掉底部安全区域,保证示例展示正常
+ data: MediaQuery.of(context)
+ .copyWith(padding: EdgeInsets.zero),
+ child: ListView.builder(
+ controller: widget.scrollController,
+ shrinkWrap: true,
+ physics: const BouncingScrollPhysics(),
+ padding:
+ const EdgeInsets.only(top: 24, bottom: 24),
+ itemCount: widget.children.length + 3,
+ itemBuilder: (context, index) {
+ if (index == 0) {
+ return _buildHeader(context);
+ }
+ if (index == widget.children.length + 2) {
+ return WebMdTool.needGenerateWebMd
+ ? Container(
+ margin:
+ const EdgeInsets.only(top: 24),
+ child: Column(
+ children: [
+ TDButton(
+ text: '生成Web使用md',
+ type: TDButtonType.fill,
+ onTap: () =>
+ WebMdTool.generateWebMd(
+ model: model,
+ description:
+ widget.desc,
+ exampleCodeGroup: widget
+ .exampleCodeGroup,
+ exampleModuleList:
+ widget.children,
+ testList: widget.test,
+ singleChild: widget
+ .showSingleChild
+ ? widget.singleChild
+ : null),
+ ),
+ TDButton(
+ text: '返回首页',
+ type: TDButtonType.fill,
+ onTap: () =>
+ Navigator.of(context)
+ .maybePop(),
+ ),
+ ],
+ ),
+ )
+ : Container();
+ }
+ ExampleModule data;
+ if (index <= widget.children.length) {
+ data = widget.children[index - 1];
+ } else {
+ data = ExampleModule(
+ title: '单元测试',
+ children: [
+ _buildTestExampleItem(),
+ ...widget.test
+ ]);
+ }
+ return _buildModule(index, data, context);
+ },
+ ),
+ )),
],
)));
}
@@ -199,7 +206,7 @@ class _ExamplePageState extends State {
exampleModuleList: widget.children,
testList: widget.test,
singleChild:
- widget.showSingleChild ? widget.singleChild : null),
+ widget.showSingleChild ? widget.singleChild : null),
),
TDButton(
text: '返回首页',
@@ -267,11 +274,11 @@ class _ExamplePageState extends State {
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
- if(WebMdTool.needGenerateWebMd) const TDText('WebGenTag'),
+ if (WebMdTool.needGenerateWebMd) const TDText('WebGenTag'),
TDText(
widget.title,
font: TDTheme.of(context).fontHeadlineSmall,
- textColor: TDTheme.of(context).fontGyColor1,
+ textColor: TDTheme.of(context).textColorPrimary,
),
Container(
margin: const EdgeInsets.only(
@@ -280,7 +287,7 @@ class _ExamplePageState extends State {
child: TDText(
widget.desc,
font: TDTheme.of(context).fontBodyMedium,
- textColor: TDTheme.of(context).fontGyColor2,
+ textColor: TDTheme.of(context).textColorSecondary,
),
),
// Expanded(child: ),
@@ -299,7 +306,7 @@ class _ExamplePageState extends State {
child: TDText(
'${index < 10 ? "0$index" : index} ${data.title}',
font: TDTheme.of(context).fontTitleLarge,
- textColor: TDTheme.of(context).fontGyColor1,
+ textColor: TDTheme.of(context).textColorPrimary,
fontWeight: FontWeight.bold,
),
),
@@ -333,14 +340,15 @@ class ExampleModule {
/// 示例样例数据
class ExampleItem {
- const ExampleItem(
- {Key? key,
- this.desc = '',
- required this.builder,
- this.methodName,
- this.center = true,
- this.ignoreCode = false,
- this.padding});
+ const ExampleItem({
+ Key? key,
+ this.desc = '',
+ required this.builder,
+ this.methodName,
+ this.center = true,
+ this.ignoreCode = false,
+ this.padding,
+ });
final String desc;
@@ -431,7 +439,7 @@ class _ExampleItemWidgetState extends State {
child: TDText(
widget.data.desc,
font: TDTheme.of(context).fontBodyMedium,
- textColor: TDTheme.of(context).fontGyColor2,
+ textColor: TDTheme.of(context).textColorSecondary,
),
),
child
@@ -473,6 +481,8 @@ class _CodeWrapperState extends State {
String? codeString;
+ Brightness brightness = Brightness.light;
+
@override
void initState() {
super.initState();
@@ -490,6 +500,7 @@ class _CodeWrapperState extends State {
.dependOnInheritedWidgetOfExactType();
exampleCodeGroup = modelTheme?.model.codePath ?? '';
apiVisible = modelTheme?.model.apiVisible ?? false;
+ brightness = Theme.of(context).brightness;
});
if (WebMdTool.needGenerateWebMd && !widget.isFromItem) {
@@ -577,7 +588,7 @@ class _CodeWrapperState extends State {
return Container(
alignment: Alignment.center,
decoration: BoxDecoration(
- color: TDTheme.of(context).grayColor1,
+ color: TDTheme.of(context).bgColorSecondaryContainer,
borderRadius: BorderRadius.vertical(
top: Radius.circular(TDTheme.of(context).radiusDefault))),
height: 500,
@@ -595,10 +606,15 @@ class _CodeWrapperState extends State {
${codeString}
```
''';
+
+ var syntaxHighlighterStyle = brightness == Brightness.light
+ ? SyntaxHighlighterStyle.lightThemeStyle()
+ : SyntaxHighlighterStyle.darkThemeStyle();
+
return Container(
alignment: Alignment.center,
decoration: BoxDecoration(
- color: TDTheme.of(context).grayColor1,
+ color: TDTheme.of(context).bgColorSecondaryContainer,
borderRadius: BorderRadius.vertical(
top: Radius.circular(TDTheme.of(context).radiusDefault))),
height: height,
@@ -607,7 +623,7 @@ ${codeString}
padding: EdgeInsets.zero,
selectable: false,
shrinkWrap: true,
- syntaxHighlighter: DartSyntaxHighlighter(),
+ syntaxHighlighter: DartSyntaxHighlighter(syntaxHighlighterStyle),
data: mdText,
extensionSet: md.ExtensionSet(
md.ExtensionSet.gitHubWeb.blockSyntaxes,
diff --git a/tdesign-component/example/lib/base/intl_resource_delegate.dart b/tdesign-component/example/lib/base/intl_resource_delegate.dart
index 33c5ac400..62d802a45 100644
--- a/tdesign-component/example/lib/base/intl_resource_delegate.dart
+++ b/tdesign-component/example/lib/base/intl_resource_delegate.dart
@@ -1,7 +1,7 @@
import 'package:flutter/cupertino.dart';
import 'package:tdesign_flutter/tdesign_flutter.dart';
-import '../localizations/app_localizations.dart';
+import '../l10n/app_localizations.dart';
/// 国际化资源代理
class IntlResourceDelegate extends TDResourceDelegate {
@@ -162,4 +162,8 @@ class IntlResourceDelegate extends TDResourceDelegate {
@override
String get top => AppLocalizations.of(context)!.top;
+
+ @override
+ String get emptyData => AppLocalizations.of(context)!.emptyData;
+
}
diff --git a/tdesign-component/example/lib/base/notification_center.dart b/tdesign-component/example/lib/base/notification_center.dart
index a9d0be006..8c88b7b69 100644
--- a/tdesign-component/example/lib/base/notification_center.dart
+++ b/tdesign-component/example/lib/base/notification_center.dart
@@ -3,6 +3,13 @@ import 'dart:collection';
typedef Observer = void Function(dynamic arguments);
/// 广播工具
+///
+///
+/// todo bug
+/// flutter: TNotification postNotificationCallHandler onApiVisibleChange_165563855 error: setState() called after dispose(): _CodeWrapperState#1423d(lifecycle state: defunct, not mounted)
+/// 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.
+/// 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.
+/// 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().
class TNotification {
static final Map> _eventMap = HashMap();
diff --git a/tdesign-component/example/lib/component_test/image_test.dart b/tdesign-component/example/lib/component_test/image_test.dart
index 50b5f73f6..e7ad3ff0b 100644
--- a/tdesign-component/example/lib/component_test/image_test.dart
+++ b/tdesign-component/example/lib/component_test/image_test.dart
@@ -2,10 +2,12 @@ import 'package:flutter/material.dart';
import 'package:tdesign_flutter/tdesign_flutter.dart';
void main() async {
- runApp(ImageTestApp());
+ runApp(const ImageTestApp());
}
class ImageTestApp extends StatelessWidget {
+ const ImageTestApp({super.key});
+
@override
Widget build(BuildContext context) {
return MaterialApp(
@@ -21,12 +23,14 @@ class ImageTestApp extends StatelessWidget {
class TestPage extends StatelessWidget {
final GlobalKey _formKey = GlobalKey();
+ TestPage({super.key});
+
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
- title: TDText('TDImage Test Page'),
+ title: const TDText('TDImage Test Page'),
),
body: Form(
key: _formKey,
@@ -38,9 +42,9 @@ class TestPage extends StatelessWidget {
width: 335,
fit: BoxFit.fitWidth,
),
- SizedBox(height: 20),
+ const SizedBox(height: 20),
- TDImage(
+ const TDImage(
imgUrl: 'assets/img/image.png',
type: TDImageType.fitHeight,
height: 144,
diff --git a/tdesign-component/example/lib/component_test/popup_test.dart b/tdesign-component/example/lib/component_test/popup_test.dart
index 901f4c1ef..d81aff2ea 100644
--- a/tdesign-component/example/lib/component_test/popup_test.dart
+++ b/tdesign-component/example/lib/component_test/popup_test.dart
@@ -34,16 +34,16 @@ class _TestPageState extends State {
slideTransitionFrom: SlideTransitionFrom.bottom,
builder: (context) {
return TDPopupBottomDisplayPanel(
- title: "title",
+ title: 'title',
radius: 20,
- backgroundColor: Color(0xFFFAFFFC),
+ backgroundColor: const Color(0xFFFAFFFC),
closeClick: () {
Navigator.maybePop(context);
},
child: Container(
- padding: EdgeInsets.only(left: 20, right: 20, bottom: 33),
- decoration: BoxDecoration(color: Colors.white),
- child: Column(
+ padding: const EdgeInsets.only(left: 20, right: 20, bottom: 33),
+ decoration: const BoxDecoration(color: Colors.white),
+ child: const Column(
children: [
Center(
child: Text("立即拨打"),
diff --git a/tdesign-component/example/lib/component_test/step_test.dart b/tdesign-component/example/lib/component_test/step_test.dart
index b37246cf4..9f5975d43 100644
--- a/tdesign-component/example/lib/component_test/step_test.dart
+++ b/tdesign-component/example/lib/component_test/step_test.dart
@@ -2,10 +2,12 @@ import 'package:flutter/material.dart';
import 'package:tdesign_flutter/tdesign_flutter.dart';
void main() async {
- runApp(StepTestApp());
+ runApp(const StepTestApp());
}
class StepTestApp extends StatelessWidget {
+ const StepTestApp({super.key});
+
@override
Widget build(BuildContext context) {
return MaterialApp(
@@ -21,6 +23,8 @@ class StepTestApp extends StatelessWidget {
class TestPage extends StatelessWidget {
final GlobalKey _formKey = GlobalKey();
+ TestPage({super.key});
+
@override
Widget build(BuildContext context) {
// 创建水平步骤条的数据
@@ -56,7 +60,7 @@ class TestPage extends StatelessWidget {
return Scaffold(
appBar: AppBar(
- title: TDText('TDSteps Test Page'),
+ title: const TDText('TDSteps Test Page'),
),
body: Form(
key: _formKey,
diff --git a/tdesign-component/example/lib/component_test/tabbar_test.dart b/tdesign-component/example/lib/component_test/tabbar_test.dart
index 1bd118624..c0030c23c 100644
--- a/tdesign-component/example/lib/component_test/tabbar_test.dart
+++ b/tdesign-component/example/lib/component_test/tabbar_test.dart
@@ -2,7 +2,6 @@ import 'package:extended_nested_scroll_view/extended_nested_scroll_view.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:tdesign_flutter/tdesign_flutter.dart';
-import 'package:tdesign_flutter/src/util/string_util.dart';
// import 'package:xjy_study/utils/color_util.dart';
class StudyDetail extends StatefulWidget {
@@ -51,10 +50,10 @@ class _StudyDetailState extends State with SingleTickerProviderStateMixin {
),
body: ExtendedNestedScrollView(
onlyOneScrollInBody: true,
- physics: ClampingScrollPhysics(),
+ physics: const ClampingScrollPhysics(),
headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {
return [
- SliverToBoxAdapter(
+ const SliverToBoxAdapter(
child: _CourseItemDetail(),
)
];
@@ -115,7 +114,7 @@ class _CourseItemDetail extends StatelessWidget {
height: 16.h,
alignment: Alignment.center,
padding: EdgeInsets.symmetric(horizontal: 6.w),
- decoration: BoxDecoration(
+ decoration: const BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(4)),
gradient: LinearGradient(colors: [
Color(0xFFFFB442),
diff --git a/tdesign-component/example/lib/component_test/tag_test.dart b/tdesign-component/example/lib/component_test/tag_test.dart
index 45e11c1bf..c1d8fb3ba 100644
--- a/tdesign-component/example/lib/component_test/tag_test.dart
+++ b/tdesign-component/example/lib/component_test/tag_test.dart
@@ -2,10 +2,12 @@ import 'package:flutter/material.dart';
import 'package:tdesign_flutter/tdesign_flutter.dart';
void main() async {
- runApp(TagTestApp());
+ runApp(const TagTestApp());
}
class TagTestApp extends StatelessWidget {
+ const TagTestApp({super.key});
+
@override
Widget build(BuildContext context) {
return MaterialApp(
@@ -13,17 +15,19 @@ class TagTestApp extends StatelessWidget {
theme: ThemeData(
primarySwatch: Colors.blue,
),
- home: TestPage(),
+ home: const TestPage(),
);
}
}
class TestPage extends StatelessWidget {
+ const TestPage({super.key});
+
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
- title: TDText('TDTag 宽度测试'),
+ title: const TDText('TDTag 宽度测试'),
),
body: SingleChildScrollView(
padding: const EdgeInsets.all(16),
@@ -40,15 +44,15 @@ class TestPage extends StatelessWidget {
}
Widget _buildSection(BuildContext context) {
- return Column(
+ return const Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TDText('不带宽度测试', style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold)),
- const SizedBox(height: 12),
+ SizedBox(height: 12),
Wrap(
spacing: 12,
runSpacing: 12,
- children: const [
+ children: [
TDTag('1',
theme: TDTagTheme.primary,
size: TDTagSize.medium,
@@ -61,21 +65,21 @@ class TestPage extends StatelessWidget {
),
],
),
- const SizedBox(height: 24),
+ SizedBox(height: 24),
],
);
}
Widget _buildFixedWidthSection(BuildContext context) {
- return Column(
+ return const Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TDText('基础固定宽度测试', style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold)),
- const SizedBox(height: 12),
+ SizedBox(height: 12),
Wrap(
spacing: 12,
runSpacing: 12,
- children: const [
+ children: [
TDTag('1',
fixedWidth: 80,
theme: TDTagTheme.primary,
@@ -91,7 +95,7 @@ class TestPage extends StatelessWidget {
),
],
),
- const SizedBox(height: 24),
+ SizedBox(height: 24),
],
);
}
@@ -100,7 +104,7 @@ class TestPage extends StatelessWidget {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
- TDText('边界情况测试', style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold)),
+ const TDText('边界情况测试', style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold)),
const SizedBox(height: 12),
const TDTag('超长文本测试超长文本测试超长文本测试超长文本测试',
fixedWidth: 100,
diff --git a/tdesign-component/example/lib/component_test/test_app.dart b/tdesign-component/example/lib/component_test/test_app.dart
index 21c062d92..243da0aea 100644
--- a/tdesign-component/example/lib/component_test/test_app.dart
+++ b/tdesign-component/example/lib/component_test/test_app.dart
@@ -48,7 +48,7 @@ Padding body(BuildContext context) {
mainAxisAlignment: MainAxisAlignment.center,
children: [
- TDButton(text: "ixanshi ",onTap: (){
+ TDButton(text: 'ixanshi ',onTap: (){
TDLoadingController.show(context);
TDLoadingController.dismiss();
@@ -175,7 +175,7 @@ TDBottomTabBar _buildBottomTabBar() {
),
TDBottomTabBarTabConfig(
selectedIcon: Icon(TDIcons.user, size: iconSize, color: Colors.red),
- unselectedIcon: Icon(TDIcons.user, size: iconSize, color: Color(0xFF383838)),
+ unselectedIcon: Icon(TDIcons.user, size: iconSize, color: const Color(0xFF383838)),
tabText: '我的',
selectTabTextStyle: TextStyle(fontSize: textSize, color: Colors.red),
unselectTabTextStyle: TextStyle(fontSize: textSize, color: Colors.black),
diff --git a/tdesign-component/example/lib/config.dart b/tdesign-component/example/lib/config.dart
index 2ca80a677..ce857c490 100644
--- a/tdesign-component/example/lib/config.dart
+++ b/tdesign-component/example/lib/config.dart
@@ -29,12 +29,12 @@ import 'page/td_empty_page.dart';
import 'page/td_fab_page.dart';
import 'page/td_font_page.dart';
import 'page/td_footer_page.dart';
+import 'page/td_form_page.dart';
import 'page/td_icon_page.dart';
import 'page/td_image_page.dart';
import 'page/td_image_viewer_page.dart';
import 'page/td_indexes_page.dart';
import 'page/td_input_page.dart';
-import 'page/td_form_page.dart';
import 'page/td_link_page.dart';
import 'page/td_loading_page.dart';
import 'page/td_message_page.dart';
@@ -56,7 +56,6 @@ import 'page/td_slider_page.dart';
import 'page/td_stepper_page.dart';
import 'page/td_steps_page.dart';
import 'page/td_swipe_cell_page.dart';
-import 'page/td_steps_page.dart';
import 'page/td_swiper_page.dart';
import 'page/td_switch_page.dart';
import 'page/td_table_page.dart';
@@ -83,15 +82,29 @@ List examplePageList = [];
Map> exampleMap = {
'基础': [
ExamplePageModel(
- text: 'Button 按钮', name: 'button', pageBuilder: _wrapInheritedTheme((context) => const TDButtonPage())),
+ text: 'Button 按钮',
+ name: 'button',
+ pageBuilder: _wrapInheritedTheme((context) => const TDButtonPage())),
+ ExamplePageModel(
+ text: 'Divider 分割线',
+ name: 'divider',
+ pageBuilder: _wrapInheritedTheme((context) => const TDDividerPage())),
ExamplePageModel(
- text: 'Divider 分割线', name: 'divider', pageBuilder: _wrapInheritedTheme((context) => const TDDividerPage())),
+ text: 'Fab 悬浮按钮',
+ name: 'fab',
+ pageBuilder: _wrapInheritedTheme((context) => const TDFabPage())),
ExamplePageModel(
- text: 'Fab 悬浮按钮', name: 'fab', pageBuilder: _wrapInheritedTheme((context) => const TDFabPage())),
- ExamplePageModel(text: 'Icon 图标', name: 'icon', pageBuilder: _wrapInheritedTheme((context) => const TDIconPage())),
+ text: 'Icon 图标',
+ name: 'icon',
+ pageBuilder: _wrapInheritedTheme((context) => const TDIconPage())),
ExamplePageModel(
- text: 'Link 链接', name: 'link', pageBuilder: _wrapInheritedTheme((context) => const TDLinkViewPage())),
- ExamplePageModel(text: 'Text 文本', name: 'text', pageBuilder: _wrapInheritedTheme((context) => const TDTextPage())),
+ text: 'Link 链接',
+ name: 'link',
+ pageBuilder: _wrapInheritedTheme((context) => const TDLinkViewPage())),
+ ExamplePageModel(
+ text: 'Text 文本',
+ name: 'text',
+ pageBuilder: _wrapInheritedTheme((context) => const TDTextPage())),
],
'导航': [
ExamplePageModel(
@@ -108,14 +121,27 @@ Map> exampleMap = {
name: 'indexes',
pageBuilder: _wrapInheritedTheme((context) => const TDIndexesPage())),
ExamplePageModel(
- text: 'NavBar 导航栏', name: 'navbar', pageBuilder: _wrapInheritedTheme((context) => const TDNavBarPage())),
+ text: 'NavBar 导航栏',
+ name: 'navbar',
+ pageBuilder: _wrapInheritedTheme((context) => const TDNavBarPage())),
+ ExamplePageModel(
+ text: 'SideBar 侧边栏',
+ name: 'side-bar',
+ pageBuilder: _wrapInheritedTheme((context) => const TDSideBarPage())),
ExamplePageModel(
- text: 'SideBar 侧边栏', name: 'side-bar',pageBuilder: _wrapInheritedTheme((context) => const TDSideBarPage())),
- ExamplePageModel(text: 'Steps 步骤条', name: 'steps', pageBuilder: _wrapInheritedTheme((context) => const TDStepsPage())),
+ text: 'Steps 步骤条',
+ name: 'steps',
+ pageBuilder: _wrapInheritedTheme((context) => const TDStepsPage())),
ExamplePageModel(
- text: 'TabBar 标签栏', name: 'tab-bar',
- pageName: 'bottom_tab_bar',pageBuilder: _wrapInheritedTheme((context) => const TDBottomTabBarPage())),
- ExamplePageModel(text: 'Tabs 选项卡', name: 'tabs', pageBuilder: _wrapInheritedTheme((context) => const TDTabsPage())),
+ text: 'TabBar 标签栏',
+ name: 'tab-bar',
+ pageName: 'bottom_tab_bar',
+ pageBuilder:
+ _wrapInheritedTheme((context) => const TDBottomTabBarPage())),
+ ExamplePageModel(
+ text: 'Tabs 选项卡',
+ name: 'tabs',
+ pageBuilder: _wrapInheritedTheme((context) => const TDTabsPage())),
],
'输入': [
ExamplePageModel(
@@ -127,30 +153,51 @@ Map> exampleMap = {
name: 'cascader',
pageBuilder: _wrapInheritedTheme((context) => const TDCascaderPage())),
ExamplePageModel(
- text: 'Checkbox 多选框', name: 'checkbox', pageBuilder: _wrapInheritedTheme((context) => const TDCheckboxPage())),
+ text: 'Checkbox 多选框',
+ name: 'checkbox',
+ pageBuilder: _wrapInheritedTheme((context) => const TDCheckboxPage())),
ExamplePageModel(
text: 'DateTimePicker 时间选择器',
name: 'date-time-picker',
pageName: 'data_picker',
- pageBuilder: _wrapInheritedTheme((context) => const TDDatePickerPage())),
+ pageBuilder:
+ _wrapInheritedTheme((context) => const TDDatePickerPage())),
ExamplePageModel(
- text: 'Form 表单', name: 'form', pageBuilder: _wrapInheritedTheme((context) => const TDFormPage())),
+ text: 'Form 表单',
+ name: 'form',
+ pageBuilder: _wrapInheritedTheme((context) => const TDFormPage())),
ExamplePageModel(
- text: 'Input 输入框', name: 'input', pageBuilder: _wrapInheritedTheme((context) => const TDInputViewPage())),
+ text: 'Input 输入框',
+ name: 'input',
+ pageBuilder: _wrapInheritedTheme((context) => const TDInputViewPage())),
ExamplePageModel(
- text: 'Picker 选择器', name: 'picker', pageBuilder: _wrapInheritedTheme((context) => const TDPickerPage())),
+ text: 'Picker 选择器',
+ name: 'picker',
+ pageBuilder: _wrapInheritedTheme((context) => const TDPickerPage())),
ExamplePageModel(
- text: 'Radio 单选框', name: 'radio', pageBuilder: _wrapInheritedTheme((context) => const TDRadioPage())),
+ text: 'Radio 单选框',
+ name: 'radio',
+ pageBuilder: _wrapInheritedTheme((context) => const TDRadioPage())),
ExamplePageModel(
- text: 'Rate 评分', name: 'rate', pageBuilder: _wrapInheritedTheme((context) => const TDRatePage())),
+ text: 'Rate 评分',
+ name: 'rate',
+ pageBuilder: _wrapInheritedTheme((context) => const TDRatePage())),
ExamplePageModel(
- text: 'Search 搜索框', name: 'search', pageBuilder: _wrapInheritedTheme((context) => const TDSearchBarPage())),
+ text: 'Search 搜索框',
+ name: 'search',
+ pageBuilder: _wrapInheritedTheme((context) => const TDSearchBarPage())),
ExamplePageModel(
- text: 'Slider 滑动选择器', name: 'slider', pageBuilder: _wrapInheritedTheme((context) => const TDSliderPage())),
+ text: 'Slider 滑动选择器',
+ name: 'slider',
+ pageBuilder: _wrapInheritedTheme((context) => const TDSliderPage())),
ExamplePageModel(
- text: 'Stepper 步进器', name: 'stepper', pageBuilder: _wrapInheritedTheme((context) => const TDStepperPage())),
+ text: 'Stepper 步进器',
+ name: 'stepper',
+ pageBuilder: _wrapInheritedTheme((context) => const TDStepperPage())),
ExamplePageModel(
- text: 'Switch 开关', name: 'switch', pageBuilder: _wrapInheritedTheme((context) => const TDSwitchPage())),
+ text: 'Switch 开关',
+ name: 'switch',
+ pageBuilder: _wrapInheritedTheme((context) => const TDSwitchPage())),
ExamplePageModel(
text: 'Textarea 多行文本框',
name: 'textarea',
@@ -159,7 +206,8 @@ Map> exampleMap = {
text: 'TreeSelect 树形选择器',
name: 'tree-select',
pageName: 'tree_select',
- pageBuilder: _wrapInheritedTheme((context) => const TDTreeSelectPage())),
+ pageBuilder:
+ _wrapInheritedTheme((context) => const TDTreeSelectPage())),
ExamplePageModel(
text: 'Upload 上传',
name: 'upload',
@@ -167,32 +215,49 @@ Map> exampleMap = {
],
'数据展示': [
ExamplePageModel(
- text: 'Avatar 头像', name: 'avatar', pageBuilder: _wrapInheritedTheme((context) => const TDAvatarPage())),
+ text: 'Avatar 头像',
+ name: 'avatar',
+ pageBuilder: _wrapInheritedTheme((context) => const TDAvatarPage())),
ExamplePageModel(
- text: 'Badge 徽标', name: 'badge', pageBuilder: _wrapInheritedTheme((context) => const TDBadgePage())),
+ text: 'Badge 徽标',
+ name: 'badge',
+ pageBuilder: _wrapInheritedTheme((context) => const TDBadgePage())),
ExamplePageModel(
- text: 'Cell 单元格', name: 'cell', pageBuilder: _wrapInheritedTheme((context) => const TDCellPage())),
+ text: 'Cell 单元格',
+ name: 'cell',
+ pageBuilder: _wrapInheritedTheme((context) => const TDCellPage())),
ExamplePageModel(
text: 'TimeCounter 计时器',
name: 'time-counter',
- pageBuilder: _wrapInheritedTheme((context) => const TDTimeCounterPage())),
+ pageBuilder:
+ _wrapInheritedTheme((context) => const TDTimeCounterPage())),
ExamplePageModel(
text: 'Collapse 折叠面板',
name: 'collapse',
pageBuilder: _wrapInheritedTheme((context) => const TDCollapsePage())),
ExamplePageModel(
- text: 'Empty 空状态', name: 'empty', pageBuilder: _wrapInheritedTheme((context) => const TDEmptyPage())),
+ text: 'Empty 空状态',
+ name: 'empty',
+ pageBuilder: _wrapInheritedTheme((context) => const TDEmptyPage())),
ExamplePageModel(
- text: 'Footer 页脚', name: 'footer', pageBuilder: _wrapInheritedTheme((context) => const TDFooterPage())),
+ text: 'Footer 页脚',
+ name: 'footer',
+ pageBuilder: _wrapInheritedTheme((context) => const TDFooterPage())),
ExamplePageModel(
- text: 'Grid 宫格', name: 'grid', isTodo: true, pageBuilder: _wrapInheritedTheme((context) => const TodoPage())),
+ text: 'Grid 宫格',
+ name: 'grid',
+ isTodo: true,
+ pageBuilder: _wrapInheritedTheme((context) => const TodoPage())),
ExamplePageModel(
- text: 'Image 图片', name: 'image', pageBuilder: _wrapInheritedTheme((context) => const TDImagePage())),
+ text: 'Image 图片',
+ name: 'image',
+ pageBuilder: _wrapInheritedTheme((context) => const TDImagePage())),
ExamplePageModel(
text: 'ImageViewer 图片预览',
name: 'image-viewer',
pageName: 'image_viewer',
- pageBuilder: _wrapInheritedTheme((context) => const TDImageViewerPage())),
+ pageBuilder:
+ _wrapInheritedTheme((context) => const TDImageViewerPage())),
ExamplePageModel(
text: 'Progress 进度条',
name: 'progress',
@@ -211,58 +276,94 @@ Map> exampleMap = {
isTodo: true,
pageBuilder: _wrapInheritedTheme((context) => const TodoPage())),
ExamplePageModel(
- text: 'Swiper 轮播图', name: 'swiper', pageBuilder: _wrapInheritedTheme((context) => const TDSwiperPage())),
- ExamplePageModel(text: 'Table 表格', name: 'table', pageBuilder: _wrapInheritedTheme((context) => const TDTablePage())),
- ExamplePageModel(text: 'Tag 标签', name: 'tag', pageBuilder: _wrapInheritedTheme((context) => const TDTagPage())),
+ text: 'Swiper 轮播图',
+ name: 'swiper',
+ pageBuilder: _wrapInheritedTheme((context) => const TDSwiperPage())),
+ ExamplePageModel(
+ text: 'Table 表格',
+ name: 'table',
+ pageBuilder: _wrapInheritedTheme((context) => const TDTablePage())),
+ ExamplePageModel(
+ text: 'Tag 标签',
+ name: 'tag',
+ pageBuilder: _wrapInheritedTheme((context) => const TDTagPage())),
],
'反馈': [
- ExamplePageModel(
+ ExamplePageModel(
text: 'ActionSheet 动作面板',
name: 'action-sheet',
pageName: 'action_sheet',
- pageBuilder: _wrapInheritedTheme((context) => const TDActionSheetPage())),
+ pageBuilder:
+ _wrapInheritedTheme((context) => const TDActionSheetPage())),
ExamplePageModel(
- text: 'Dialog 对话框', name: 'dialog', pageBuilder: _wrapInheritedTheme((context) => const TDDialogPage())),
+ text: 'Dialog 对话框',
+ name: 'dialog',
+ pageBuilder: _wrapInheritedTheme((context) => const TDDialogPage())),
ExamplePageModel(
text: 'DropdownMenu 下拉菜单',
name: 'dropdown-menu',
pageName: 'dropdown_menu',
- pageBuilder: _wrapInheritedTheme((context) => const TDDropdownMenuPage())),
+ pageBuilder:
+ _wrapInheritedTheme((context) => const TDDropdownMenuPage())),
ExamplePageModel(
- text: 'Loading 加载', name: 'loading', pageBuilder: _wrapInheritedTheme((context) => const TDLoadingPage())),
+ text: 'Loading 加载',
+ name: 'loading',
+ pageBuilder: _wrapInheritedTheme((context) => const TDLoadingPage())),
ExamplePageModel(
- text: 'Message 全局提示',
+ text: 'Message 消息通知',
name: 'message',
pageBuilder: _wrapInheritedTheme((context) => const TDMessagePage())),
ExamplePageModel(
- text: 'NoticeBar 消息提醒', name: 'notice-bar', pageBuilder: _wrapInheritedTheme((context) => const TDNoticeBarPage())),
+ text: 'NoticeBar 公告栏',
+ name: 'notice-bar',
+ pageBuilder: _wrapInheritedTheme((context) => const TDNoticeBarPage())),
ExamplePageModel(
text: 'Overlay 遮罩层',
name: 'overlay',
isTodo: true,
pageBuilder: _wrapInheritedTheme((context) => const TodoPage())),
- ExamplePageModel(text: 'Popover 弹出气泡', name: 'popover', pageBuilder: _wrapInheritedTheme((context) => const TDPopoverPage())),
ExamplePageModel(
- text: 'Popup 弹出层', name: 'popup', pageBuilder: _wrapInheritedTheme((context) => const TDPopupPage())),
+ text: 'Popover 弹出气泡',
+ name: 'popover',
+ pageBuilder: _wrapInheritedTheme((context) => const TDPopoverPage())),
+ ExamplePageModel(
+ text: 'Popup 弹出层',
+ name: 'popup',
+ pageBuilder: _wrapInheritedTheme((context) => const TDPopupPage())),
ExamplePageModel(
text: 'PullDownRefresh 下拉刷新',
name: 'pull-down-refresh',
pageName: 'refresh',
- pageBuilder: _wrapInheritedTheme((context) => const TdPullDownRefreshPage())),
+ pageBuilder:
+ _wrapInheritedTheme((context) => const TdPullDownRefreshPage())),
ExamplePageModel(
text: 'Swipecell 滑动操作',
name: 'swipe-cell',
pageName: 'swipe_cell',
pageBuilder: _wrapInheritedTheme((context) => const TDSwipeCellPage())),
ExamplePageModel(
- text: 'Toast 轻提示', name: 'toast', pageBuilder: _wrapInheritedTheme((context) => const TDToastPage())),
+ text: 'Toast 轻提示',
+ name: 'toast',
+ pageBuilder: _wrapInheritedTheme((context) => const TDToastPage())),
],
'主题': [
ExamplePageModel(
- text: '颜色', name: 'theme_colors', pageBuilder: _wrapInheritedTheme((context) => const TDThemeColorsPage())),
- ExamplePageModel(text: '字体', name: 'font', pageBuilder: _wrapInheritedTheme((context) => const TDFontPage())),
- ExamplePageModel(text: '圆角', name: 'radius', pageBuilder: _wrapInheritedTheme((context) => const TDRadiusPage())),
- ExamplePageModel(text: '阴影', name: 'shadows', pageBuilder: _wrapInheritedTheme((context) => const TDShadowsPage())),
+ text: '颜色',
+ name: 'theme_colors',
+ pageBuilder:
+ _wrapInheritedTheme((context) => const TDThemeColorsPage())),
+ ExamplePageModel(
+ text: '字体',
+ name: 'font',
+ pageBuilder: _wrapInheritedTheme((context) => const TDFontPage())),
+ ExamplePageModel(
+ text: '圆角',
+ name: 'radius',
+ pageBuilder: _wrapInheritedTheme((context) => const TDRadiusPage())),
+ ExamplePageModel(
+ text: '阴影',
+ name: 'shadows',
+ pageBuilder: _wrapInheritedTheme((context) => const TDShadowsPage())),
],
};
@@ -272,12 +373,14 @@ List sideBarExamplePage = [
name: 'SideBarPagination',
isTodo: false,
showAction: false,
- pageBuilder: _wrapInheritedTheme((context) => const TDSideBarPaginationPage())),
+ pageBuilder:
+ _wrapInheritedTheme((context) => const TDSideBarPaginationPage())),
ExamplePageModel(
text: 'SideBar 锚点',
name: 'SideBarAnchor',
isTodo: false,
- pageBuilder: _wrapInheritedTheme((context) => const TDSideBarAnchorPage())),
+ pageBuilder:
+ _wrapInheritedTheme((context) => const TDSideBarAnchorPage())),
ExamplePageModel(
text: 'SideBar 带图标',
name: 'SideBarIcon',
@@ -287,20 +390,24 @@ List sideBarExamplePage = [
text: 'SideBar 非通栏选项样式',
name: 'SideBarOutline',
isTodo: false,
- pageBuilder: _wrapInheritedTheme((context) => const TDSideBarOutlinePage())),
+ pageBuilder:
+ _wrapInheritedTheme((context) => const TDSideBarOutlinePage())),
ExamplePageModel(
text: 'SideBar 自定义样式',
name: 'SideBarCustom',
isTodo: false,
- pageBuilder: _wrapInheritedTheme((context) => const TDSideBarCustomPage())),
+ pageBuilder:
+ _wrapInheritedTheme((context) => const TDSideBarCustomPage())),
ExamplePageModel(
text: 'SideBar 延迟加载',
name: 'SideBarLoading',
isTodo: false,
- pageBuilder: _wrapInheritedTheme((context) => const TDSideBarLoadingPage())),
+ pageBuilder:
+ _wrapInheritedTheme((context) => const TDSideBarLoadingPage())),
ExamplePageModel(
text: 'SideBar 自定义未选中颜色',
name: 'SideBarUnselectedColor',
isTodo: false,
- pageBuilder: _wrapInheritedTheme((context) => const TDSideBarUnSelectedColorPage()))
+ pageBuilder: _wrapInheritedTheme(
+ (context) => const TDSideBarUnSelectedColorPage()))
];
diff --git a/tdesign-component/example/lib/home.dart b/tdesign-component/example/lib/home.dart
index 76003cfcb..40fb5e907 100644
--- a/tdesign-component/example/lib/home.dart
+++ b/tdesign-component/example/lib/home.dart
@@ -6,19 +6,25 @@ import 'base/example_base.dart';
import 'base/example_route.dart';
import 'base/web_md_tool.dart';
import 'config.dart';
-import 'localizations/app_localizations.dart';
+import 'l10n/app_localizations.dart';
var _kShowTodoComponent = false;
/// 切换主题的回调
-typedef OnThemeChange = Function(TDThemeData themeData);
+typedef OnThemeChange = Function(TDThemeData themeData, bool isDark);
/// 切换语言的回调
typedef OnLocaleChange = Function(Locale locale);
/// 示例首页
class MyHomePage extends StatefulWidget {
- const MyHomePage({Key? key, required this.title, this.onThemeChange, this.locale, this.onLocaleChange,}) : super(key: key);
+ const MyHomePage({
+ Key? key,
+ required this.title,
+ this.onThemeChange,
+ this.locale,
+ this.onLocaleChange,
+ }) : super(key: key);
final String title;
@@ -58,48 +64,49 @@ class _MyHomePageState extends State {
// Here we take the value from the MyHomePage object that was created by
// the App.build method, and use it to set our appbar title.
backgroundColor: TDTheme.of(context).brandNormalColor,
- titleTextStyle: TextStyle(color:TDTheme.of(context).whiteColor1, fontSize: TDTheme.of(context).fontTitleLarge?.size),
+ titleTextStyle: TextStyle(
+ color: TDTheme.of(context).whiteColor1,
+ fontSize: TDTheme.of(context).fontTitleLarge?.size),
title: Text(widget.title),
actions: ScreenUtil.isWebLargeScreen(context)
? null
: [
-
- GestureDetector(
- child: Container(
- alignment: Alignment.centerRight,
- padding: const EdgeInsets.only(
- right: 16,
- ),
- child: TDText(
- widget.locale?.languageCode == 'en' ? '中文' : 'English',
- textColor: TDTheme.of(context).whiteColor1,
- ),
- ),
- onTap: () {
- if(widget.locale?.languageCode == 'en') {
- widget.onLocaleChange?.call(const Locale('zh'));
- } else {
- widget.onLocaleChange?.call(const Locale('en'));
- }
- },
- ),
- GestureDetector(
- child: Container(
- alignment: Alignment.centerRight,
- padding: const EdgeInsets.only(
- right: 16,
- ),
- child: TDText(
- AppLocalizations.of(context)?.about,
- textColor: TDTheme.of(context).whiteColor1,
- ),
- ),
- onTap: () {
- focusNode.unfocus();
- Navigator.pushNamed(context, TDExampleRoute.aboutPath);
- },
- )
- ],
+ GestureDetector(
+ child: Container(
+ alignment: Alignment.centerRight,
+ padding: const EdgeInsets.only(
+ right: 16,
+ ),
+ child: TDText(
+ widget.locale?.languageCode == 'en' ? '中文' : 'English',
+ textColor: TDTheme.of(context).whiteColor1,
+ ),
+ ),
+ onTap: () {
+ if (widget.locale?.languageCode == 'en') {
+ widget.onLocaleChange?.call(const Locale('zh'));
+ } else {
+ widget.onLocaleChange?.call(const Locale('en'));
+ }
+ },
+ ),
+ GestureDetector(
+ child: Container(
+ alignment: Alignment.centerRight,
+ padding: const EdgeInsets.only(
+ right: 16,
+ ),
+ child: TDText(
+ AppLocalizations.of(context)?.about,
+ textColor: TDTheme.of(context).whiteColor1,
+ ),
+ ),
+ onTap: () {
+ focusNode.unfocus();
+ Navigator.pushNamed(context, TDExampleRoute.aboutPath);
+ },
+ )
+ ],
),
body: _buildBody(context),
);
@@ -108,14 +115,14 @@ class _MyHomePageState extends State {
Widget _buildBody(BuildContext context) {
return SafeArea(
child: Align(
- alignment: Alignment.topCenter,
- child: SingleChildScrollView(
- child: Column(
- mainAxisAlignment: MainAxisAlignment.center,
- children: _buildChildren(context),
- ),
- ),
- ));
+ alignment: Alignment.topCenter,
+ child: SingleChildScrollView(
+ child: Column(
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: _buildChildren(context),
+ ),
+ ),
+ ));
}
List _buildChildren(BuildContext context) {
@@ -127,39 +134,70 @@ class _MyHomePageState extends State {
child: SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: Container(
- constraints: BoxConstraints(minWidth: MediaQuery.of(context).size.width),
+ constraints:
+ BoxConstraints(minWidth: MediaQuery.of(context).size.width),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
- Padding(padding: const EdgeInsets.only(left: 8, right: 4),child: TDTheme(
- data: TDThemeData.defaultData(),
- child: TDButton(
- text: AppLocalizations.of(context)?.defaultTheme,
- theme: TDButtonTheme.primary,
- onTap: () {
- widget.onThemeChange?.call(TDTheme.defaultData());
- },
- )),),
- Padding(padding: const EdgeInsets.only(left: 4, right: 4),child: TDTheme(
- data: TDThemeData.fromJson('green', greenThemeConfig) ?? TDThemeData.defaultData(),
- child: TDButton(
- text: AppLocalizations.of(context)?.greenTheme,
+ Padding(
+ padding: const EdgeInsets.only(left: 8, right: 4),
+ child: TDTheme(
+ data: TDThemeData.defaultData(),
+ child: TDButton(
+ text: AppLocalizations.of(context)?.defaultTheme,
theme: TDButtonTheme.primary,
- onTap: () async {
- var jsonString = await rootBundle.loadString('assets/theme.json');
- var newData = TDThemeData.fromJson('green', jsonString);
- widget.onThemeChange?.call(newData ?? TDTheme.defaultData());
- }))),
- Padding(padding: const EdgeInsets.only(left: 4, right: 8),child: TDTheme(
- data: TDThemeData.fromJson('red', greenThemeConfig) ?? TDThemeData.defaultData(),
+ onTap: () {
+ widget.onThemeChange
+ ?.call(TDTheme.defaultData(), false);
+ },
+ )),
+ ),
+ Padding(
+ padding: const EdgeInsets.symmetric(vertical: 4),
+ child: TDTheme(
+ data: TDThemeData.fromJson('green', greenThemeConfig) ??
+ TDThemeData.defaultData(),
+ child: TDButton(
+ text: AppLocalizations.of(context)?.greenTheme,
+ theme: TDButtonTheme.primary,
+ onTap: () async {
+ var jsonString = await rootBundle
+ .loadString('assets/theme.json');
+ var newData =
+ TDThemeData.fromJson('green', jsonString);
+ widget.onThemeChange
+ ?.call(newData ?? TDTheme.defaultData(), false);
+ }))),
+ Padding(
+ padding: const EdgeInsets.symmetric(vertical: 4),
+ child: TDTheme(
+ data: TDThemeData.fromJson('red', greenThemeConfig) ??
+ TDThemeData.defaultData(),
+ child: TDButton(
+ text: AppLocalizations.of(context)?.redTheme,
+ theme: TDButtonTheme.danger,
+ onTap: () async {
+ var jsonString = await rootBundle
+ .loadString('assets/theme.json');
+ var newData =
+ TDThemeData.fromJson('red', jsonString);
+ widget.onThemeChange
+ ?.call(newData ?? TDTheme.defaultData(), false);
+ }))),
+ Padding(
+ padding: const EdgeInsets.only(left: 4, right: 8),
child: TDButton(
- text: AppLocalizations.of(context)?.redTheme,
- theme: TDButtonTheme.danger,
+ text: AppLocalizations.of(context)?.darkTheme,
+ style: TDButtonStyle(
+ backgroundColor: Colors.black,
+ textColor: Colors.white),
onTap: () async {
- var jsonString = await rootBundle.loadString('assets/theme.json');
- var newData = TDThemeData.fromJson('red', jsonString);
- widget.onThemeChange?.call(newData ?? TDTheme.defaultData());
- }))),
+ var jsonString =
+ await rootBundle.loadString('assets/theme.json');
+ var newData = TDThemeData.fromJson('dark', jsonString);
+ widget.onThemeChange
+ ?.call(newData ?? TDTheme.defaultData(), true);
+ })),
],
),
),
@@ -169,7 +207,7 @@ class _MyHomePageState extends State {
children.add(TDSearchBar(
placeHolder: '请输入组件名称',
focusNode: focusNode,
- onTextChanged: (value){
+ onTextChanged: (value) {
setState(() {
searchText = value;
});
@@ -179,7 +217,8 @@ class _MyHomePageState extends State {
exampleMap.forEach((key, value) {
var subList = [];
value.forEach((model) {
- if(searchText.isNotEmpty && !model.text.toLowerCase().contains(searchText.toLowerCase())){
+ if (searchText.isNotEmpty &&
+ !model.text.toLowerCase().contains(searchText.toLowerCase())) {
// 如果有搜索文案,不再搜索中的组件不展示
return;
}
@@ -187,7 +226,8 @@ class _MyHomePageState extends State {
if (model.isTodo) {
if (_kShowTodoComponent) {
children.add(Padding(
- padding: const EdgeInsets.only(left: 40, right: 40, top: 8, bottom: 8),
+ padding:
+ const EdgeInsets.only(left: 40, right: 40, top: 8, bottom: 8),
child: TDButton(
size: TDButtonSize.medium,
type: TDButtonType.outline,
@@ -202,7 +242,8 @@ class _MyHomePageState extends State {
}
} else {
subList.add(Padding(
- padding: const EdgeInsets.only(left: 40, right: 40, top: 8, bottom: 8),
+ padding:
+ const EdgeInsets.only(left: 40, right: 40, top: 8, bottom: 8),
child: TDButton(
size: TDButtonSize.medium,
type: TDButtonType.outline,
@@ -222,7 +263,8 @@ class _MyHomePageState extends State {
padding: const EdgeInsets.only(left: 12),
decoration: BoxDecoration(
color: TDTheme.of(context).brandHoverColor,
- borderRadius: BorderRadius.only(topRight: Radius.circular(TDTheme.of(context).radiusLarge))),
+ borderRadius: BorderRadius.only(
+ topRight: Radius.circular(TDTheme.of(context).radiusLarge))),
child: TDText(
'$key(${subList.length})',
textColor: TDTheme.of(context).whiteColor1,
@@ -234,7 +276,6 @@ class _MyHomePageState extends State {
}
}
-
String greenThemeConfig = '''
{
"green": {
diff --git a/tdesign-component/example/lib/l10n/app_en.arb b/tdesign-component/example/lib/l10n/app_en.arb
index c67879ea5..cae39ff55 100644
--- a/tdesign-component/example/lib/l10n/app_en.arb
+++ b/tdesign-component/example/lib/l10n/app_en.arb
@@ -4,6 +4,7 @@
"defaultTheme": "defaultTheme",
"greenTheme": "greenTheme",
"redTheme": "redTheme",
+ "darkTheme": "Dark Mode",
"cancel": "Cancel",
"confirm": "Confirm",
"switchClose": "C",
@@ -54,7 +55,8 @@
"yearLabel": "year",
"monthLabel": "month",
"dateLabel": "date",
- "weeks":"weeks",
- "back":"BACK",
- "top":"TOP"
+ "weeks": "weeks",
+ "back": "BACK",
+ "top": "TOP",
+ "emptyData": "No Data"
}
\ No newline at end of file
diff --git a/tdesign-component/example/lib/l10n/app_localizations.dart b/tdesign-component/example/lib/l10n/app_localizations.dart
index fb3b78236..0c487ecb9 100644
--- a/tdesign-component/example/lib/l10n/app_localizations.dart
+++ b/tdesign-component/example/lib/l10n/app_localizations.dart
@@ -128,6 +128,12 @@ abstract class AppLocalizations {
/// **'redTheme'**
String get redTheme;
+ /// No description provided for @darkTheme.
+ ///
+ /// In en, this message translates to:
+ /// **'Dark Mode'**
+ String get darkTheme;
+
/// No description provided for @cancel.
///
/// In en, this message translates to:
@@ -421,6 +427,12 @@ abstract class AppLocalizations {
/// In en, this message translates to:
/// **'TOP'**
String get top;
+
+ /// No description provided for @emptyData.
+ ///
+ /// In en, this message translates to:
+ /// **'No Data'**
+ String get emptyData;
}
class _AppLocalizationsDelegate
diff --git a/tdesign-component/example/lib/l10n/app_localizations_en.dart b/tdesign-component/example/lib/l10n/app_localizations_en.dart
index 28c285fc6..e6a4729ca 100644
--- a/tdesign-component/example/lib/l10n/app_localizations_en.dart
+++ b/tdesign-component/example/lib/l10n/app_localizations_en.dart
@@ -23,6 +23,9 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get redTheme => 'redTheme';
+ @override
+ String get darkTheme => 'Dark Mode';
+
@override
String get cancel => 'Cancel';
@@ -169,4 +172,7 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get top => 'TOP';
+
+ @override
+ String get emptyData => 'No Data';
}
diff --git a/tdesign-component/example/lib/l10n/app_localizations_zh.dart b/tdesign-component/example/lib/l10n/app_localizations_zh.dart
index ec680e409..4d2443382 100644
--- a/tdesign-component/example/lib/l10n/app_localizations_zh.dart
+++ b/tdesign-component/example/lib/l10n/app_localizations_zh.dart
@@ -23,6 +23,9 @@ class AppLocalizationsZh extends AppLocalizations {
@override
String get redTheme => '红色主题';
+ @override
+ String get darkTheme => '暗黑模式';
+
@override
String get cancel => '取消';
@@ -169,4 +172,7 @@ class AppLocalizationsZh extends AppLocalizations {
@override
String get top => '顶部';
+
+ @override
+ String get emptyData => '暂无数据';
}
diff --git a/tdesign-component/example/lib/l10n/app_zh.arb b/tdesign-component/example/lib/l10n/app_zh.arb
index 70291ef8c..9a645bda6 100644
--- a/tdesign-component/example/lib/l10n/app_zh.arb
+++ b/tdesign-component/example/lib/l10n/app_zh.arb
@@ -4,6 +4,7 @@
"defaultTheme": "默认主题",
"greenTheme": "绿色主题",
"redTheme": "红色主题",
+ "darkTheme": "暗黑模式",
"cancel": "取消",
"confirm": "确认",
"switchClose": "关",
@@ -54,7 +55,8 @@
"yearLabel":"年",
"monthLabel": "月",
"dateLabel": "日",
- "weeks":"周",
- "back":"返回",
- "top":"顶部"
+ "weeks": "周",
+ "back": "返回",
+ "top": "顶部",
+ "emptyData": "暂无数据"
}
\ No newline at end of file
diff --git a/tdesign-component/example/lib/localizations/app_localizations.dart b/tdesign-component/example/lib/localizations/app_localizations.dart
deleted file mode 100644
index 325ca5287..000000000
--- a/tdesign-component/example/lib/localizations/app_localizations.dart
+++ /dev/null
@@ -1,457 +0,0 @@
-import 'dart:async';
-
-import 'package:flutter/foundation.dart';
-import 'package:flutter/widgets.dart';
-import 'package:flutter_localizations/flutter_localizations.dart';
-import 'package:intl/intl.dart' as intl;
-
-import 'app_localizations_en.dart';
-import '../localizations/app_localizations_zh.dart';
-
-// ignore_for_file: type=lint
-
-/// Callers can lookup localized strings with an instance of AppLocalizations
-/// returned by `AppLocalizations.of(context)`.
-///
-/// Applications need to include `AppLocalizations.delegate()` in their app's
-/// `localizationDelegates` list, and the locales they support in the app's
-/// `supportedLocales` list. For example:
-///
-/// ```dart
-/// import 'l10n/app_localizations.dart';
-///
-/// return MaterialApp(
-/// localizationsDelegates: AppLocalizations.localizationsDelegates,
-/// supportedLocales: AppLocalizations.supportedLocales,
-/// home: MyApplicationHome(),
-/// );
-/// ```
-///
-/// ## Update pubspec.yaml
-///
-/// Please make sure to update your pubspec.yaml to include the following
-/// packages:
-///
-/// ```yaml
-/// dependencies:
-/// # Internationalization support.
-/// flutter_localizations:
-/// sdk: flutter
-/// intl: any # Use the pinned version from flutter_localizations
-///
-/// # Rest of dependencies
-/// ```
-///
-/// ## iOS Applications
-///
-/// iOS applications define key application metadata, including supported
-/// locales, in an Info.plist file that is built into the application bundle.
-/// To configure the locales supported by your app, you’ll need to edit this
-/// file.
-///
-/// First, open your project’s ios/Runner.xcworkspace Xcode workspace file.
-/// Then, in the Project Navigator, open the Info.plist file under the Runner
-/// project’s Runner folder.
-///
-/// Next, select the Information Property List item, select Add Item from the
-/// Editor menu, then select Localizations from the pop-up menu.
-///
-/// Select and expand the newly-created Localizations item then, for each
-/// locale your application supports, add a new item and select the locale
-/// you wish to add from the pop-up menu in the Value field. This list should
-/// be consistent with the languages listed in the AppLocalizations.supportedLocales
-/// property.
-abstract class AppLocalizations {
- AppLocalizations(String locale)
- : localeName = intl.Intl.canonicalizedLocale(locale.toString());
-
- final String localeName;
-
- static AppLocalizations? of(BuildContext context) {
- return Localizations.of(context, AppLocalizations);
- }
-
- static const LocalizationsDelegate delegate =
- _AppLocalizationsDelegate();
-
- /// A list of this localizations delegate along with the default localizations
- /// delegates.
- ///
- /// Returns a list of localizations delegates containing this delegate along with
- /// GlobalMaterialLocalizations.delegate, GlobalCupertinoLocalizations.delegate,
- /// and GlobalWidgetsLocalizations.delegate.
- ///
- /// Additional delegates can be added by appending to this list in
- /// MaterialApp. This list does not have to be used at all if a custom list
- /// of delegates is preferred or required.
- static const List> localizationsDelegates =
- >[
- delegate,
- GlobalMaterialLocalizations.delegate,
- GlobalCupertinoLocalizations.delegate,
- GlobalWidgetsLocalizations.delegate,
- ];
-
- /// A list of this localizations delegate's supported locales.
- static const List supportedLocales = [
- Locale('en'),
- Locale('zh')
- ];
-
- /// No description provided for @components.
- ///
- /// In en, this message translates to:
- /// **'TD Flutter Components'**
- String get components;
-
- /// No description provided for @about.
- ///
- /// In en, this message translates to:
- /// **'About'**
- String get about;
-
- /// No description provided for @defaultTheme.
- ///
- /// In en, this message translates to:
- /// **'defaultTheme'**
- String get defaultTheme;
-
- /// No description provided for @greenTheme.
- ///
- /// In en, this message translates to:
- /// **'greenTheme'**
- String get greenTheme;
-
- /// No description provided for @redTheme.
- ///
- /// In en, this message translates to:
- /// **'redTheme'**
- String get redTheme;
-
- /// No description provided for @cancel.
- ///
- /// In en, this message translates to:
- /// **'Cancel'**
- String get cancel;
-
- /// No description provided for @confirm.
- ///
- /// In en, this message translates to:
- /// **'Confirm'**
- String get confirm;
-
- /// No description provided for @switchClose.
- ///
- /// In en, this message translates to:
- /// **'C'**
- String get switchClose;
-
- /// No description provided for @switchOpen.
- ///
- /// In en, this message translates to:
- /// **'O'**
- String get switchOpen;
-
- /// No description provided for @knew.
- ///
- /// In en, this message translates to:
- /// **'Knew'**
- String get knew;
-
- /// No description provided for @loading.
- ///
- /// In en, this message translates to:
- /// **'Loading'**
- String get loading;
-
- /// No description provided for @loadingWithPoint.
- ///
- /// In en, this message translates to:
- /// **'Loading...'**
- String get loadingWithPoint;
-
- /// No description provided for @other.
- ///
- /// In en, this message translates to:
- /// **'Other'**
- String get other;
-
- /// No description provided for @refreshing.
- ///
- /// In en, this message translates to:
- /// **'Refreshing'**
- String get refreshing;
-
- /// No description provided for @releaseRefresh.
- ///
- /// In en, this message translates to:
- /// **'ReleaseRefresh'**
- String get releaseRefresh;
-
- /// No description provided for @pullToRefresh.
- ///
- /// In en, this message translates to:
- /// **'PullToRefresh'**
- String get pullToRefresh;
-
- /// No description provided for @completeRefresh.
- ///
- /// In en, this message translates to:
- /// **'CompleteRefresh'**
- String get completeRefresh;
-
- /// No description provided for @reset.
- ///
- /// In en, this message translates to:
- /// **'Reset'**
- String get reset;
-
- /// No description provided for @days.
- ///
- /// In en, this message translates to:
- /// **'days'**
- String get days;
-
- /// No description provided for @hours.
- ///
- /// In en, this message translates to:
- /// **'hours'**
- String get hours;
-
- /// No description provided for @minutes.
- ///
- /// In en, this message translates to:
- /// **'minutes'**
- String get minutes;
-
- /// No description provided for @seconds.
- ///
- /// In en, this message translates to:
- /// **'seconds'**
- String get seconds;
-
- /// No description provided for @milliseconds.
- ///
- /// In en, this message translates to:
- /// **'milliseconds'**
- String get milliseconds;
-
- /// No description provided for @yearLabel.
- ///
- /// In en, this message translates to:
- /// **'year'**
- String get yearLabel;
-
- /// No description provided for @monthLabel.
- ///
- /// In en, this message translates to:
- /// **'month'**
- String get monthLabel;
-
- /// No description provided for @dateLabel.
- ///
- /// In en, this message translates to:
- /// **'date'**
- String get dateLabel;
-
- /// No description provided for @weeks.
- ///
- /// In en, this message translates to:
- /// **'weeks'**
- String get weeks;
-
- /// No description provided for @sunday.
- ///
- /// In en, this message translates to:
- /// **'SUN'**
- String get sunday;
-
- /// No description provided for @monday.
- ///
- /// In en, this message translates to:
- /// **'MON'**
- String get monday;
-
- /// No description provided for @tuesday.
- ///
- /// In en, this message translates to:
- /// **'TUE'**
- String get tuesday;
-
- /// No description provided for @wednesday.
- ///
- /// In en, this message translates to:
- /// **'WED'**
- String get wednesday;
-
- /// No description provided for @thursday.
- ///
- /// In en, this message translates to:
- /// **'THU'**
- String get thursday;
-
- /// No description provided for @friday.
- ///
- /// In en, this message translates to:
- /// **'FRI'**
- String get friday;
-
- /// No description provided for @saturday.
- ///
- /// In en, this message translates to:
- /// **'SAT'**
- String get saturday;
-
- /// No description provided for @year.
- ///
- /// In en, this message translates to:
- /// **''**
- String get year;
-
- /// No description provided for @january.
- ///
- /// In en, this message translates to:
- /// **'January'**
- String get january;
-
- /// No description provided for @february.
- ///
- /// In en, this message translates to:
- /// **'February'**
- String get february;
-
- /// No description provided for @march.
- ///
- /// In en, this message translates to:
- /// **'March'**
- String get march;
-
- /// No description provided for @april.
- ///
- /// In en, this message translates to:
- /// **'April'**
- String get april;
-
- /// No description provided for @may.
- ///
- /// In en, this message translates to:
- /// **'May'**
- String get may;
-
- /// No description provided for @june.
- ///
- /// In en, this message translates to:
- /// **'June'**
- String get june;
-
- /// No description provided for @july.
- ///
- /// In en, this message translates to:
- /// **'July'**
- String get july;
-
- /// No description provided for @august.
- ///
- /// In en, this message translates to:
- /// **'August'**
- String get august;
-
- /// No description provided for @september.
- ///
- /// In en, this message translates to:
- /// **'September'**
- String get september;
-
- /// No description provided for @october.
- ///
- /// In en, this message translates to:
- /// **'October'**
- String get october;
-
- /// No description provided for @november.
- ///
- /// In en, this message translates to:
- /// **'November'**
- String get november;
-
- /// No description provided for @december.
- ///
- /// In en, this message translates to:
- /// **'December'**
- String get december;
-
- /// No description provided for @time.
- ///
- /// In en, this message translates to:
- /// **'Time'**
- String get time;
-
- /// No description provided for @start.
- ///
- /// In en, this message translates to:
- /// **'Start'**
- String get start;
-
- /// No description provided for @end.
- ///
- /// In en, this message translates to:
- /// **'End'**
- String get end;
-
- /// No description provided for @notRated.
- ///
- /// In en, this message translates to:
- /// **'Not rated'**
- String get notRated;
-
- /// No description provided for @cascadeLabel.
- ///
- /// In en, this message translates to:
- /// **'Select Item'**
- String get cascadeLabel;
-
- /// No description provided for @back.
- ///
- /// In en, this message translates to:
- /// **'BACK'**
- String get back;
-
- /// No description provided for @top.
- ///
- /// In en, this message translates to:
- /// **'TOP'**
- String get top;
-}
-
-class _AppLocalizationsDelegate
- extends LocalizationsDelegate {
- const _AppLocalizationsDelegate();
-
- @override
- Future load(Locale locale) {
- return SynchronousFuture(lookupAppLocalizations(locale));
- }
-
- @override
- bool isSupported(Locale locale) =>
- ['en', 'zh'].contains(locale.languageCode);
-
- @override
- bool shouldReload(_AppLocalizationsDelegate old) => false;
-}
-
-AppLocalizations lookupAppLocalizations(Locale locale) {
- // Lookup logic when only language code is specified.
- switch (locale.languageCode) {
- case 'en':
- return AppLocalizationsEn();
- case 'zh':
- return AppLocalizationsZh();
- }
-
- throw FlutterError(
- 'AppLocalizations.delegate failed to load unsupported locale "$locale". This is likely '
- 'an issue with the localizations generation tool. Please file an issue '
- 'on GitHub with a reproducible sample app and the gen-l10n configuration '
- 'that was used.');
-}
diff --git a/tdesign-component/example/lib/localizations/app_localizations_en.dart b/tdesign-component/example/lib/localizations/app_localizations_en.dart
deleted file mode 100644
index 28c285fc6..000000000
--- a/tdesign-component/example/lib/localizations/app_localizations_en.dart
+++ /dev/null
@@ -1,172 +0,0 @@
-// ignore: unused_import
-import 'package:intl/intl.dart' as intl;
-import 'app_localizations.dart';
-
-// ignore_for_file: type=lint
-
-/// The translations for English (`en`).
-class AppLocalizationsEn extends AppLocalizations {
- AppLocalizationsEn([String locale = 'en']) : super(locale);
-
- @override
- String get components => 'TD Flutter Components';
-
- @override
- String get about => 'About';
-
- @override
- String get defaultTheme => 'defaultTheme';
-
- @override
- String get greenTheme => 'greenTheme';
-
- @override
- String get redTheme => 'redTheme';
-
- @override
- String get cancel => 'Cancel';
-
- @override
- String get confirm => 'Confirm';
-
- @override
- String get switchClose => 'C';
-
- @override
- String get switchOpen => 'O';
-
- @override
- String get knew => 'Knew';
-
- @override
- String get loading => 'Loading';
-
- @override
- String get loadingWithPoint => 'Loading...';
-
- @override
- String get other => 'Other';
-
- @override
- String get refreshing => 'Refreshing';
-
- @override
- String get releaseRefresh => 'ReleaseRefresh';
-
- @override
- String get pullToRefresh => 'PullToRefresh';
-
- @override
- String get completeRefresh => 'CompleteRefresh';
-
- @override
- String get reset => 'Reset';
-
- @override
- String get days => 'days';
-
- @override
- String get hours => 'hours';
-
- @override
- String get minutes => 'minutes';
-
- @override
- String get seconds => 'seconds';
-
- @override
- String get milliseconds => 'milliseconds';
-
- @override
- String get yearLabel => 'year';
-
- @override
- String get monthLabel => 'month';
-
- @override
- String get dateLabel => 'date';
-
- @override
- String get weeks => 'weeks';
-
- @override
- String get sunday => 'SUN';
-
- @override
- String get monday => 'MON';
-
- @override
- String get tuesday => 'TUE';
-
- @override
- String get wednesday => 'WED';
-
- @override
- String get thursday => 'THU';
-
- @override
- String get friday => 'FRI';
-
- @override
- String get saturday => 'SAT';
-
- @override
- String get year => '';
-
- @override
- String get january => 'January';
-
- @override
- String get february => 'February';
-
- @override
- String get march => 'March';
-
- @override
- String get april => 'April';
-
- @override
- String get may => 'May';
-
- @override
- String get june => 'June';
-
- @override
- String get july => 'July';
-
- @override
- String get august => 'August';
-
- @override
- String get september => 'September';
-
- @override
- String get october => 'October';
-
- @override
- String get november => 'November';
-
- @override
- String get december => 'December';
-
- @override
- String get time => 'Time';
-
- @override
- String get start => 'Start';
-
- @override
- String get end => 'End';
-
- @override
- String get notRated => 'Not rated';
-
- @override
- String get cascadeLabel => 'Select Item';
-
- @override
- String get back => 'BACK';
-
- @override
- String get top => 'TOP';
-}
diff --git a/tdesign-component/example/lib/localizations/app_localizations_zh.dart b/tdesign-component/example/lib/localizations/app_localizations_zh.dart
deleted file mode 100644
index ec680e409..000000000
--- a/tdesign-component/example/lib/localizations/app_localizations_zh.dart
+++ /dev/null
@@ -1,172 +0,0 @@
-// ignore: unused_import
-import 'package:intl/intl.dart' as intl;
-import 'app_localizations.dart';
-
-// ignore_for_file: type=lint
-
-/// The translations for Chinese (`zh`).
-class AppLocalizationsZh extends AppLocalizations {
- AppLocalizationsZh([String locale = 'zh']) : super(locale);
-
- @override
- String get components => 'TDesign Flutter 组件库';
-
- @override
- String get about => '关于';
-
- @override
- String get defaultTheme => '默认主题';
-
- @override
- String get greenTheme => '绿色主题';
-
- @override
- String get redTheme => '红色主题';
-
- @override
- String get cancel => '取消';
-
- @override
- String get confirm => '确认';
-
- @override
- String get switchClose => '关';
-
- @override
- String get switchOpen => '开';
-
- @override
- String get knew => '知道了';
-
- @override
- String get loading => '加载中';
-
- @override
- String get loadingWithPoint => '加载中...';
-
- @override
- String get other => '其它';
-
- @override
- String get refreshing => '正在刷新';
-
- @override
- String get releaseRefresh => '松开刷新';
-
- @override
- String get pullToRefresh => '下拉刷新';
-
- @override
- String get completeRefresh => '刷新完成';
-
- @override
- String get reset => '重置';
-
- @override
- String get days => '天';
-
- @override
- String get hours => '时';
-
- @override
- String get minutes => '分';
-
- @override
- String get seconds => '秒';
-
- @override
- String get milliseconds => '毫秒';
-
- @override
- String get yearLabel => '年';
-
- @override
- String get monthLabel => '月';
-
- @override
- String get dateLabel => '日';
-
- @override
- String get weeks => '周';
-
- @override
- String get sunday => '日';
-
- @override
- String get monday => '一';
-
- @override
- String get tuesday => '二';
-
- @override
- String get wednesday => '三';
-
- @override
- String get thursday => '四';
-
- @override
- String get friday => '五';
-
- @override
- String get saturday => '六';
-
- @override
- String get year => ' 年';
-
- @override
- String get january => '1 月';
-
- @override
- String get february => '2 月';
-
- @override
- String get march => '3 月';
-
- @override
- String get april => '4 月';
-
- @override
- String get may => '5 月';
-
- @override
- String get june => '6 月';
-
- @override
- String get july => '7 月';
-
- @override
- String get august => '8 月';
-
- @override
- String get september => '9 月';
-
- @override
- String get october => '10 月';
-
- @override
- String get november => '11 月';
-
- @override
- String get december => '12 月';
-
- @override
- String get time => '时间';
-
- @override
- String get start => '开始';
-
- @override
- String get end => '结束';
-
- @override
- String get notRated => '未评分';
-
- @override
- String get cascadeLabel => '选择选项';
-
- @override
- String get back => '返回';
-
- @override
- String get top => '顶部';
-}
diff --git a/tdesign-component/example/lib/main.dart b/tdesign-component/example/lib/main.dart
index 3b3fad44f..9d58acbef 100644
--- a/tdesign-component/example/lib/main.dart
+++ b/tdesign-component/example/lib/main.dart
@@ -7,17 +7,17 @@ import 'base/example_route.dart';
import 'base/intl_resource_delegate.dart';
import 'config.dart';
import 'home.dart';
-import 'localizations/app_localizations.dart';
+import 'l10n/app_localizations.dart';
void main() {
Log.setCustomLogPrinter((level, tag, msg) => print('[$level] $tag ==> $msg'));
runApp(const MyApp());
- SystemChrome.setSystemUIOverlayStyle(const SystemUiOverlayStyle(
+ /*SystemChrome.setSystemUIOverlayStyle(const SystemUiOverlayStyle(
statusBarColor: Colors.transparent,
systemNavigationBarColor: Colors.transparent,
systemNavigationBarDividerColor: Colors.transparent,
- ));
+ ));*/
exampleMap.forEach((key, value) {
value.forEach((model) {
@@ -38,6 +38,8 @@ class _MyAppState extends State {
late TDThemeData _themeData;
Locale? locale = const Locale('zh');
+ ThemeMode _themeMode = ThemeMode.dark;
+
@override
void initState() {
super.initState();
@@ -53,27 +55,59 @@ class _MyAppState extends State {
var delegate = IntlResourceDelegate(context);
return MaterialApp(
title: 'TDesign Flutter Example',
- theme: ThemeData(extensions: [_themeData], colorScheme: ColorScheme.light(primary: _themeData.brandNormalColor)),
- home: PlatformUtil.isWeb ? null : Builder(
- builder: (context) {
- // 设置文案代理,国际化需要在MaterialApp初始化完成之后才生效,而且需要每次更新context
- TDTheme.setResourceBuilder((context) => delegate..updateContext(context), needAlwaysBuild: true);
- return MyHomePage(
- title: AppLocalizations.of(context)?.components ?? '',
- locale: locale,
- onLocaleChange: (locale){
- setState(() {
- this.locale = locale;
- });
- },
- onThemeChange: (themeData) {
- setState(() {
- _themeData = themeData;
- });
- },
- );
- },
+ theme: ThemeData(
+ extensions: [_themeData],
+ colorScheme: ColorScheme.light(
+ primary: _themeData.brandNormalColor,
+ ),
+ scaffoldBackgroundColor: _themeData.bgColorPage,
+ iconTheme: const IconThemeData().copyWith(
+ color: _themeData.brandNormalColor,
+ ),
+ ),
+ darkTheme: ThemeData(
+ extensions: [_themeData],
+ colorScheme: ColorScheme.dark(
+ primary: _themeData.brandNormalColor,
+ secondary: _themeData.brandNormalColor,
+ ),
+ scaffoldBackgroundColor: _themeData.bgColorPage,
+ bottomNavigationBarTheme: const BottomNavigationBarThemeData()
+ .copyWith(backgroundColor: _themeData.grayColor14),
+ appBarTheme: const AppBarTheme().copyWith(
+ backgroundColor: _themeData.grayColor13,
+ ),
+ iconTheme: const IconThemeData().copyWith(
+ color: _themeData.brandNormalColor,
+ ),
),
+ // themeMode: PlatformUtil.isWeb ? ThemeMode.dark : _themeMode,
+ themeMode: _themeMode,
+ home: PlatformUtil.isWeb
+ ? null
+ : Builder(
+ builder: (context) {
+ // 设置文案代理,国际化需要在MaterialApp初始化完成之后才生效,而且需要每次更新context
+ TDTheme.setResourceBuilder(
+ (context) => delegate..updateContext(context),
+ needAlwaysBuild: true);
+ return MyHomePage(
+ title: AppLocalizations.of(context)?.components ?? '',
+ locale: locale,
+ onLocaleChange: (locale) {
+ setState(() {
+ this.locale = locale;
+ });
+ },
+ onThemeChange: (themeData, isDark) {
+ setState(() {
+ _themeData = themeData;
+ _themeMode = isDark ? ThemeMode.dark : ThemeMode.light;
+ });
+ },
+ );
+ },
+ ),
// 设置国际化处理
locale: locale,
supportedLocales: AppLocalizations.supportedLocales,
@@ -85,8 +119,11 @@ class _MyAppState extends State {
Map _getRoutes() {
if (PlatformUtil.isWeb) {
- return {for (var model in examplePageList) model.name: (context) => model.pageBuilder.call(context, model)}
- ..putIfAbsent('/', () => (context) => const MyHomePage(title: 'TDesign Flutter 组件库'));
+ return {
+ for (var model in examplePageList)
+ model.name: (context) => model.pageBuilder.call(context, model)
+ }..putIfAbsent('/',
+ () => (context) => const MyHomePage(title: 'TDesign Flutter 组件库'));
} else {
return const {};
}
diff --git a/tdesign-component/example/lib/page/sidebar/td_sidebar_page.dart b/tdesign-component/example/lib/page/sidebar/td_sidebar_page.dart
index ab391f391..9b5456c86 100644
--- a/tdesign-component/example/lib/page/sidebar/td_sidebar_page.dart
+++ b/tdesign-component/example/lib/page/sidebar/td_sidebar_page.dart
@@ -26,126 +26,101 @@ class TDSideBarPageState extends State {
Widget buildWidget(BuildContext context) {
return ExamplePage(
- title: tdTitle(),
- exampleCodeGroup: 'sideBar',
- desc: '用于内容分类后的展示切换。',
- children: [
- ExampleModule(title: '组件类型', children: [
- ExampleItem(
- desc: '侧边导航用法',
- ignoreCode: true,
- builder: _buildNavigatorSideBar),
- ExampleItem(
- desc: '图标侧边导航',
- builder: _buildIconSideBar,
- methodName: '_buildIconSideBar')
- ]),
- ExampleModule(title: '组件样式', children: [
- ExampleItem(
- desc: '侧边导航样式', ignoreCode: true, builder: _buildStyleSideBar),
- ])
- ],
- test: [
+ title: tdTitle(),
+ exampleCodeGroup: 'sideBar',
+ desc: '用于内容分类后的展示切换。',
+ children: [
+ ExampleModule(title: '组件类型', children: [
ExampleItem(
- desc: '延迟加载', ignoreCode: true, builder: _loadingSideBar),
+ desc: '侧边导航用法',
+ ignoreCode: true,
+ builder: _buildNavigatorSideBar),
ExampleItem(
- desc: '自定义未选中颜色', ignoreCode: true, builder: _unSelectedColorSideBar),
- ],
+ desc: '图标侧边导航',
+ builder: _buildIconSideBar,
+ methodName: '_buildIconSideBar')
+ ]),
+ ExampleModule(title: '组件样式', children: [
+ ExampleItem(
+ desc: '侧边导航样式', ignoreCode: true, builder: _buildStyleSideBar),
+ ])
+ ],
+ test: [
+ ExampleItem(desc: '延迟加载', ignoreCode: true, builder: _loadingSideBar),
+ ExampleItem(
+ desc: '自定义未选中颜色',
+ ignoreCode: true,
+ builder: _unSelectedColorSideBar),
+ ],
);
}
Widget _buildNavigatorSideBar(BuildContext context) {
- return Padding(
- padding: const EdgeInsets.symmetric(horizontal: 16),
- child: Column(
- children: [
- CodeWrapper(
- builder: (_) => getCustomButton(context, '锚点用法', 'SideBarAnchor'),
- methodName: '_buildAnchorSideBar',
- ),
- const SizedBox(
- height: 16,
- ),
- CodeWrapper(
- builder: (_) =>
- getCustomButton(context, '切页用法', 'SideBarPagination'),
- methodName: '_buildPaginationSideBar',
- ),
- ],
- ));
+ return Column(
+ // spacing: 16,
+ children: [
+ CodeWrapper(
+ builder: (_) => getCustomButton(context, '锚点用法', 'SideBarAnchor'),
+ methodName: '_buildAnchorSideBar',
+ ),
+ const SizedBox(height: 16),
+ CodeWrapper(
+ builder: (_) => getCustomButton(context, '切页用法', 'SideBarPagination'),
+ methodName: '_buildPaginationSideBar',
+ ),
+ ],
+ );
}
Widget _buildIconSideBar(BuildContext context) {
- return Padding(
- padding: const EdgeInsets.symmetric(horizontal: 16),
- child: Column(
- children: [
- getCustomButton(context, '带图标侧边导航', 'SideBarIcon'),
- ],
- ));
+ return getCustomButton(context, '带图标侧边导航', 'SideBarIcon');
}
Widget _buildStyleSideBar(BuildContext context) {
- return Padding(
- padding: const EdgeInsets.symmetric(horizontal: 16),
- child: Column(
- children: [
- CodeWrapper(
- builder: (_) =>
- getCustomButton(context, '非通栏选项样式', 'SideBarOutline'),
- methodName: '_buildOutlineSideBar',
- ),
- const SizedBox(
- height: 16,
- ),
- CodeWrapper(
- builder: (_) =>
- getCustomButton(context, '自定义样式', 'SideBarCustom'),
- methodName: '_buildCustomSideBar',
- ),
- ],
- ));
+ return Column(
+ children: [
+ CodeWrapper(
+ builder: (_) => getCustomButton(context, '非通栏选项样式', 'SideBarOutline'),
+ methodName: '_buildOutlineSideBar',
+ ),
+ const SizedBox(height: 16),
+ CodeWrapper(
+ builder: (_) => getCustomButton(context, '自定义样式', 'SideBarCustom'),
+ methodName: '_buildCustomSideBar',
+ ),
+ ],
+ );
}
Widget _loadingSideBar(BuildContext context) {
- return Padding(
- padding: const EdgeInsets.symmetric(horizontal: 16),
- child: Column(
- children: [
- CodeWrapper(
- builder: (_) =>
- getCustomButton(context, '延迟加载', 'SideBarLoading'),
- methodName: '_buildLoadingSideBar',
- ),
- ],
- ));
+ return CodeWrapper(
+ builder: (_) => getCustomButton(context, '延迟加载', 'SideBarLoading'),
+ methodName: '_buildLoadingSideBar',
+ );
}
Widget _unSelectedColorSideBar(BuildContext context) {
- return Padding(
- padding: const EdgeInsets.symmetric(horizontal: 16),
- child: Column(
- children: [
- CodeWrapper(
- builder: (_) =>
- getCustomButton(context, '未选中颜色自定义', 'SideBarUnselectedColor'),
- methodName: '_buildUnselectedColorSideBar',
- ),
- ],
- ));
+ return CodeWrapper(
+ builder: (_) =>
+ getCustomButton(context, '未选中颜色自定义', 'SideBarUnselectedColor'),
+ methodName: '_buildUnselectedColorSideBar',
+ );
}
TDButton getCustomButton(
BuildContext context, String text, String routeName) {
return TDButton(
text: text,
- width: MediaQuery.of(context).size.width - 16 * 2,
+ isBlock: true,
size: TDButtonSize.large,
type: TDButtonType.outline,
shape: TDButtonShape.rectangle,
theme: TDButtonTheme.primary,
onTap: () {
- Navigator.pushNamed(context, PlatformUtil.isWeb ? routeName : '$routeName');
+ Navigator.pushNamed(
+ context,
+ PlatformUtil.isWeb ? routeName : '$routeName',
+ );
},
);
}
diff --git a/tdesign-component/example/lib/page/sidebar/td_sidebar_page_anchor.dart b/tdesign-component/example/lib/page/sidebar/td_sidebar_page_anchor.dart
index b9676c00e..70e97de2b 100644
--- a/tdesign-component/example/lib/page/sidebar/td_sidebar_page_anchor.dart
+++ b/tdesign-component/example/lib/page/sidebar/td_sidebar_page_anchor.dart
@@ -47,12 +47,10 @@ class TDSideBarAnchorPageState extends State {
}
});
- // 锚点用法
-
for (var i = 0; i < 20; i++) {
list.add(SideItemProps(
index: i,
- label: '选项',
+ label: '选项$i',
value: i,
));
pages.add(getAnchorDemo(i));
@@ -68,20 +66,24 @@ class TDSideBarAnchorPageState extends State {
}
Future onSelected(int value) async {
- if (currentValue != value) {
- setState(() {
- currentValue = value;
- });
-
- lock = true;
- await _demoScroller.animateTo(value.toDouble() * itemHeight,
- duration: const Duration(milliseconds: 500), curve: Curves.easeIn);
- lock = false;
+ if (currentValue == value) {
+ return;
}
+ setState(() {
+ currentValue = value;
+ });
+
+ lock = true;
+ await _demoScroller.animateTo(
+ value.toDouble() * itemHeight,
+ duration: const Duration(milliseconds: 500),
+ curve: Curves.easeIn,
+ );
+ lock = false;
}
void onChanged(int value) {
- if(mounted){
+ if (mounted) {
setState(() {
currentValue = value;
});
@@ -89,102 +91,104 @@ class TDSideBarAnchorPageState extends State {
}
@override
- Widget build(BuildContext context) {
- var current = buildWidget(context);
- return current;
+ void dispose() {
+ _demoScroller.dispose();
+ _sideBarController.dispose();
+ super.dispose();
}
- Widget buildWidget(BuildContext context) {
+ @override
+ Widget build(BuildContext context) {
return ExamplePage(
- title: 'SideBar 锚点用法',
- exampleCodeGroup: 'sideBar',
- showSingleChild: true,
- singleChild: CodeWrapper(
- isCenter: false,
- builder: _buildAnchorSideBar,
- ));
+ title: 'SideBar 锚点用法',
+ exampleCodeGroup: 'sideBar',
+ showSingleChild: true,
+ singleChild: CodeWrapper(
+ isCenter: false,
+ builder: _buildAnchorSideBar,
+ ),
+ );
}
@Demo(group: 'sideBar')
Widget _buildAnchorSideBar(BuildContext context) {
var demoHeight = MediaQuery.of(context).size.height -
MediaQuery.of(context).padding.top -
- titleBarHeight - testButtonHeight;
- pages.add(Container(
- height: demoHeight - itemHeight,
- decoration: const BoxDecoration(color: Colors.white),
- ));
+ titleBarHeight -
+ testButtonHeight;
+
return Column(
children: [
Container(
height: testButtonHeight,
padding: const EdgeInsets.all(16),
- child: TDButton(text: '更新children',
+ child: TDButton(
+ text: '更新children',
onTap: () {
setState(() {
var children = list
.map((e) => SideItemProps(
- index: e.index,
- label: '变更',
- badge: e.badge,
- value: e.value,
- icon: e.icon))
+ index: e.index,
+ label: '变更${e.index}',
+ badge: e.badge,
+ value: e.value,
+ icon: e.icon))
.toList();
_sideBarController.children = children;
- setState(() {
-
- });
+ setState(() {});
});
- },),
+ },
+ ),
),
- Row(
- children: [
- SizedBox(
- width: 110,
- child: TDSideBar(
- height: demoHeight,
- style: TDSideBarStyle.normal,
- value: currentValue,
- controller: _sideBarController,
- onChanged: onChanged,
- onSelected: onSelected,
+ Expanded(
+ child: Row(
+ children: [
+ SizedBox(
+ width: 110,
+ child: TDSideBar(
+ style: TDSideBarStyle.normal,
+ value: currentValue,
+ controller: _sideBarController,
+ onChanged: onChanged,
+ onSelected: onSelected,
+ ),
),
- ),
- Expanded(
- child: SizedBox(
- height: demoHeight,
- child: SingleChildScrollView(
+ Expanded(
+ child: SingleChildScrollView(
controller: _demoScroller,
- child: Column(
- children: pages,
- ),
- ),
- ))
- ],
+ child: Container(
+ color: TDTheme.of(context).bgColorContainer,
+ child: Column(
+ children: [
+ ...pages,
+ Container(height: demoHeight - itemHeight)
+ ],
+ ),
+ )),
+ )
+ ],
+ ),
)
],
);
}
Widget getAnchorDemo(int index) {
- return Container(
- decoration: const BoxDecoration(color: Colors.white),
- child: Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- Padding(
- padding: const EdgeInsets.only(left: 20, top: 15, right: 9),
- child: TDText('标题$index',
- style: const TextStyle(
- fontSize: 14,
- )),
- ),
- Padding(
- padding: const EdgeInsets.only(left: 20),
- child: displayImageList(),
- ),
- ],
- ),
+ return Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Padding(
+ padding: const EdgeInsets.only(left: 20, top: 15, right: 9),
+ child: TDText('标题$index',
+ style: const TextStyle(
+ fontSize: 14,
+ )),
+ ),
+ Padding(
+ padding: const EdgeInsets.only(left: 20),
+ child: displayImageList(),
+ ),
+ ],
);
}
@@ -202,26 +206,20 @@ class TDSideBarAnchorPageState extends State {
}
Widget displayImageItem() {
- return Padding(
- padding: const EdgeInsets.symmetric(vertical: 16),
+ return const Padding(
+ padding: EdgeInsets.symmetric(vertical: 16),
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
- children: const [
+ // spacing: 16,
+ children: [
TDImage(
assetUrl: 'assets/img/empty.png',
type: TDImageType.roundedSquare,
width: 48,
height: 48,
),
- SizedBox(
- width: 16,
- ),
- TDText(
- '标题',
- style: TextStyle(
- fontSize: 16,
- ),
- )
+ SizedBox(width: 16),
+ TDText('标题', style: TextStyle(fontSize: 16))
],
),
);
diff --git a/tdesign-component/example/lib/page/sidebar/td_sidebar_page_custom.dart b/tdesign-component/example/lib/page/sidebar/td_sidebar_page_custom.dart
index df01f0b8e..98f9d1d75 100644
--- a/tdesign-component/example/lib/page/sidebar/td_sidebar_page_custom.dart
+++ b/tdesign-component/example/lib/page/sidebar/td_sidebar_page_custom.dart
@@ -47,8 +47,9 @@ class TDSideBarCustomPageState extends State {
for (var i = 0; i < 100; i++) {
list.add(SideItemProps(
index: i,
- label: '选项',
+ label: '选项 $i',
value: i,
+ textStyle: TextStyle(color: TDTheme.of(context).brandLightColor),
));
pages.add(getPageDemo(i));
}
@@ -67,14 +68,11 @@ class TDSideBarCustomPageState extends State {
}
}
- var demoHeight = MediaQuery.of(context).size.height;
-
return Row(
children: [
SizedBox(
width: 110,
child: TDSideBar(
- height: demoHeight,
style: TDSideBarStyle.normal,
value: currentValue,
controller: _sideBarController,
@@ -86,39 +84,35 @@ class TDSideBarCustomPageState extends State {
textStyle: ele.textStyle,
icon: ele.icon))
.toList(),
- selectedTextStyle:TextStyle(color: Colors.red),
+ selectedTextStyle: const TextStyle(color: Colors.red),
onSelected: setCurrentValue,
- contentPadding:EdgeInsets.only(left: 16, top: 16,bottom: 16),
+ contentPadding:
+ const EdgeInsets.only(left: 16, top: 16, bottom: 16),
selectedBgColor: Colors.blue,
unSelectedBgColor: Colors.yellow,
),
),
Expanded(
- child: SizedBox(
- height: demoHeight,
child: PageView(
controller: _pageController,
scrollDirection: Axis.vertical,
children: pages,
physics: const NeverScrollableScrollPhysics(),
),
- ))
+ )
],
);
}
Widget getPageDemo(int index) {
return Container(
- decoration: const BoxDecoration(color: Colors.white),
+ decoration: const BoxDecoration(color: Colors.blue),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: const EdgeInsets.only(left: 20, top: 2, right: 9),
- child: TDText('标题$index',
- style: const TextStyle(
- fontSize: 14,
- )),
+ child: TDText('标题 $index', style: const TextStyle(fontSize: 14)),
),
const SizedBox(height: 16),
displayImageList()
@@ -128,72 +122,52 @@ class TDSideBarCustomPageState extends State {
}
Widget getAnchorDemo(int index) {
- return Container(
- decoration: const BoxDecoration(color: Colors.white),
- child: Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- Padding(
- padding: const EdgeInsets.only(left: 20, top: 2, right: 9),
- child: TDText('标题$index',
- style: const TextStyle(
- fontSize: 14,
- )),
- ),
- const SizedBox(height: 16),
- displayImageList()
- ],
- ),
+ return Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ // spacing: 16,
+ children: [
+ Padding(
+ padding: const EdgeInsets.only(left: 20, top: 2, right: 9),
+ child: TDText('标题$index', style: const TextStyle(fontSize: 14)),
+ ),
+ const SizedBox(height: 16),
+ displayImageList()
+ ],
);
}
Widget displayImageList() {
- return Column(
- children: [
- Row(mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [
- displayImageItem('标题文字'),
- displayImageItem('标题文字'),
- displayImageItem('最多六个文字'),
- ]),
- const SizedBox(height: 18),
- Row(
- mainAxisAlignment: MainAxisAlignment.spaceEvenly,
- children: [
- displayImageItem('标题文字'),
- displayImageItem('标题文字'),
- displayImageItem('最多六个文字'),
- ],
+ return Container(
+ padding: const EdgeInsets.symmetric(horizontal: 18),
+ width: double.infinity,
+ child: Wrap(
+ spacing: 18,
+ runSpacing: 18,
+ alignment: WrapAlignment.spaceEvenly,
+ children: List.generate(
+ 12,
+ (index) => displayImageItem('${index}最多六个字'),
),
- const SizedBox(height: 18),
- Row(
- mainAxisAlignment: MainAxisAlignment.spaceEvenly,
- children: [
- displayImageItem('标题文字'),
- displayImageItem('标题文字'),
- displayImageItem('最多六个文字'),
- ],
- )
- ],
+ ),
);
}
Widget displayImageItem(String title) {
return Expanded(
- child: Column(
- crossAxisAlignment: CrossAxisAlignment.center,
- children: [
- const TDImage(
- assetUrl: 'assets/img/empty.png',
- type: TDImageType.roundedSquare,
- width: 48,
- height: 48,
- ),
- const SizedBox(height: 8),
- TDText(
- '$title',
- style: const TextStyle(fontSize: 12),
- )
- ],
- ));
+ child: Column(
+ // spacing: 8,
+ crossAxisAlignment: CrossAxisAlignment.center,
+ children: [
+ const TDImage(
+ assetUrl: 'assets/img/empty.png',
+ type: TDImageType.roundedSquare,
+ width: 48,
+ height: 48,
+ ),
+ const SizedBox(height: 4),
+ TDText('$title', style: const TextStyle(fontSize: 12))
+ ],
+ ),
+ );
}
}
diff --git a/tdesign-component/example/lib/page/sidebar/td_sidebar_page_icon.dart b/tdesign-component/example/lib/page/sidebar/td_sidebar_page_icon.dart
index 2e75979c0..b4d13c0d5 100644
--- a/tdesign-component/example/lib/page/sidebar/td_sidebar_page_icon.dart
+++ b/tdesign-component/example/lib/page/sidebar/td_sidebar_page_icon.dart
@@ -86,14 +86,18 @@ class TDSideBarIconPageState extends State {
final pages = [];
for (var i = 0; i < 20; i++) {
- list.add(
- SideItemProps(index: i, label: '选项', value: i, icon: TDIcons.app));
+ list.add(SideItemProps(
+ index: i,
+ label: '选项${i}',
+ value: i,
+ icon: TDIcons.app,
+ ));
pages.add(getAnchorDemo(i));
}
pages.add(Container(
height: MediaQuery.of(context).size.height - itemHeight,
- decoration: const BoxDecoration(color: Colors.white),
+ decoration: BoxDecoration(color: TDTheme.of(context).bgColorContainer),
));
list[1].badge = const TDBadge(TDBadgeType.redPoint);
@@ -102,14 +106,11 @@ class TDSideBarIconPageState extends State {
count: '8',
);
- var demoHeight = MediaQuery.of(context).size.height;
-
return Row(
children: [
SizedBox(
width: 110,
child: TDSideBar(
- height: demoHeight,
style: TDSideBarStyle.normal,
value: currentValue,
controller: _sideBarController,
@@ -125,22 +126,20 @@ class TDSideBarIconPageState extends State {
),
),
Expanded(
- child: SizedBox(
- height: demoHeight,
child: SingleChildScrollView(
controller: _demoScroller,
child: Column(
children: pages,
),
),
- ))
+ )
],
);
}
Widget getAnchorDemo(int index) {
return Container(
- decoration: const BoxDecoration(color: Colors.white),
+ decoration: BoxDecoration(color: TDTheme.of(context).bgColorContainer),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
@@ -174,26 +173,20 @@ class TDSideBarIconPageState extends State {
}
Widget displayImageItem() {
- return Padding(
- padding: const EdgeInsets.symmetric(vertical: 16),
+ return const Padding(
+ padding: EdgeInsets.symmetric(vertical: 16),
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
- children: const [
+ // spacing: 16,
+ children: [
TDImage(
assetUrl: 'assets/img/empty.png',
type: TDImageType.roundedSquare,
width: 48,
height: 48,
),
- SizedBox(
- width: 16,
- ),
- TDText(
- '标题',
- style: TextStyle(
- fontSize: 16,
- ),
- )
+ SizedBox(width: 16),
+ TDText('标题', style: TextStyle(fontSize: 16))
],
),
);
diff --git a/tdesign-component/example/lib/page/sidebar/td_sidebar_page_loading.dart b/tdesign-component/example/lib/page/sidebar/td_sidebar_page_loading.dart
index 01dca141c..56a7290b5 100644
--- a/tdesign-component/example/lib/page/sidebar/td_sidebar_page_loading.dart
+++ b/tdesign-component/example/lib/page/sidebar/td_sidebar_page_loading.dart
@@ -91,7 +91,7 @@ class TDSideBarLoadingPageState extends State {
for (var i = 0; i < 20; i++) {
list.add(SideItemProps(
index: i,
- label: '选项',
+ label: '选项 $i',
value: i,
));
pages.add(getLoadingDemo(i));
@@ -99,7 +99,7 @@ class TDSideBarLoadingPageState extends State {
pages.add(Container(
height: MediaQuery.of(context).size.height - itemHeight,
- decoration: const BoxDecoration(color: Colors.white),
+ decoration: BoxDecoration(color: TDTheme.of(context).bgColorContainer),
));
list[1].badge = const TDBadge(TDBadgeType.redPoint);
@@ -107,7 +107,7 @@ class TDSideBarLoadingPageState extends State {
TDBadgeType.message,
count: '8',
);
- if(_sideBarController.loading) {
+ if (_sideBarController.loading) {
_sideBarController.init(list);
_sideBarController.selectTo(currentValue);
// 初始化时避免右侧内容与左侧item不匹配
@@ -121,14 +121,12 @@ class TDSideBarLoadingPageState extends State {
// 延迟加载
Future.delayed(const Duration(seconds: 3), _initData);
var size = MediaQuery.of(context).size;
- var demoHeight = size.height;
return Row(
children: [
SizedBox(
width: list.isEmpty ? size.width : 110,
child: TDSideBar(
- height: demoHeight,
style: TDSideBarStyle.normal,
value: currentValue,
controller: _sideBarController,
@@ -145,22 +143,20 @@ class TDSideBarLoadingPageState extends State {
),
),
Expanded(
- child: SizedBox(
- height: demoHeight,
child: SingleChildScrollView(
controller: _demoScroller,
child: Column(
children: pages,
),
),
- ))
+ )
],
);
}
Widget getLoadingDemo(int index) {
return Container(
- decoration: const BoxDecoration(color: Colors.white),
+ decoration: BoxDecoration(color: TDTheme.of(context).bgColorContainer),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
@@ -194,26 +190,20 @@ class TDSideBarLoadingPageState extends State {
}
Widget displayImageItem() {
- return Padding(
- padding: const EdgeInsets.symmetric(vertical: 16),
+ return const Padding(
+ padding: EdgeInsets.symmetric(vertical: 16),
child: Row(
+ // spacing: 16,
crossAxisAlignment: CrossAxisAlignment.center,
- children: const [
+ children: [
TDImage(
assetUrl: 'assets/img/empty.png',
type: TDImageType.roundedSquare,
width: 48,
height: 48,
),
- SizedBox(
- width: 16,
- ),
- TDText(
- '标题',
- style: TextStyle(
- fontSize: 16,
- ),
- )
+ SizedBox(width: 16),
+ TDText('标题', style: TextStyle(fontSize: 16))
],
),
);
diff --git a/tdesign-component/example/lib/page/sidebar/td_sidebar_page_outline.dart b/tdesign-component/example/lib/page/sidebar/td_sidebar_page_outline.dart
index e86d05a35..06a4df501 100644
--- a/tdesign-component/example/lib/page/sidebar/td_sidebar_page_outline.dart
+++ b/tdesign-component/example/lib/page/sidebar/td_sidebar_page_outline.dart
@@ -89,7 +89,7 @@ class TDSideBarOutlinePageState extends State {
for (var i = 0; i < 20; i++) {
list.add(SideItemProps(
index: i,
- label: '选项',
+ label: '选项${i}',
value: i,
));
pages.add(getAnchorDemo(i));
@@ -97,7 +97,7 @@ class TDSideBarOutlinePageState extends State {
pages.add(Container(
height: MediaQuery.of(context).size.height - itemHeight,
- decoration: const BoxDecoration(color: Colors.white),
+ decoration: BoxDecoration(color: TDTheme.of(context).bgColorContainer),
));
list[1].badge = const TDBadge(TDBadgeType.redPoint);
@@ -106,14 +106,11 @@ class TDSideBarOutlinePageState extends State {
count: '8',
);
- var demoHeight = MediaQuery.of(context).size.height;
-
return Row(
children: [
SizedBox(
width: 110,
child: TDSideBar(
- height: demoHeight,
style: TDSideBarStyle.outline,
value: currentValue,
controller: _sideBarController,
@@ -129,28 +126,26 @@ class TDSideBarOutlinePageState extends State {
),
),
Expanded(
- child: SizedBox(
- height: demoHeight,
child: SingleChildScrollView(
controller: _demoScroller,
child: Column(
children: pages,
),
),
- ))
+ )
],
);
}
Widget getAnchorDemo(int index) {
return Container(
- decoration: const BoxDecoration(color: Colors.white),
+ decoration: BoxDecoration(color: TDTheme.of(context).bgColorContainer),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: const EdgeInsets.only(left: 20, top: 15, right: 9),
- child: TDText('标题$index',
+ child: TDText('标题 $index',
style: const TextStyle(
fontSize: 14,
)),
@@ -178,26 +173,20 @@ class TDSideBarOutlinePageState extends State {
}
Widget displayImageItem() {
- return Padding(
- padding: const EdgeInsets.symmetric(vertical: 16),
+ return const Padding(
+ padding: EdgeInsets.symmetric(vertical: 16),
child: Row(
+ // spacing: 16,
crossAxisAlignment: CrossAxisAlignment.center,
- children: const [
+ children: [
TDImage(
assetUrl: 'assets/img/empty.png',
type: TDImageType.roundedSquare,
width: 48,
height: 48,
),
- SizedBox(
- width: 16,
- ),
- TDText(
- '标题',
- style: TextStyle(
- fontSize: 16,
- ),
- )
+ SizedBox(width: 16),
+ TDText('标题', style: TextStyle(fontSize: 16))
],
),
);
diff --git a/tdesign-component/example/lib/page/sidebar/td_sidebar_page_pagination.dart b/tdesign-component/example/lib/page/sidebar/td_sidebar_page_pagination.dart
index 970b4bb82..99cb2a2d7 100644
--- a/tdesign-component/example/lib/page/sidebar/td_sidebar_page_pagination.dart
+++ b/tdesign-component/example/lib/page/sidebar/td_sidebar_page_pagination.dart
@@ -47,7 +47,7 @@ class TDSideBarPaginationPageState extends State {
for (var i = 0; i < 100; i++) {
list.add(SideItemProps(
index: i,
- label: '选项',
+ label: '选项 ${i}',
value: i,
));
pages.add(getPageDemo(i));
@@ -66,14 +66,11 @@ class TDSideBarPaginationPageState extends State {
}
}
- var demoHeight = MediaQuery.of(context).size.height;
-
return Row(
children: [
SizedBox(
width: 110,
child: TDSideBar(
- height: demoHeight,
style: TDSideBarStyle.normal,
value: currentValue,
controller: _sideBarController,
@@ -88,51 +85,27 @@ class TDSideBarPaginationPageState extends State {
),
),
Expanded(
- child: SizedBox(
- height: demoHeight,
child: PageView(
controller: _pageController,
scrollDirection: Axis.vertical,
children: pages,
physics: const NeverScrollableScrollPhysics(),
),
- ))
+ )
],
);
}
Widget getPageDemo(int index) {
return Container(
- decoration: const BoxDecoration(color: Colors.white),
+ decoration: BoxDecoration(color: TDTheme.of(context).bgColorContainer),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
+ // spacing: 16,
children: [
Padding(
padding: const EdgeInsets.only(left: 20, top: 2, right: 9),
- child: TDText('标题$index',
- style: const TextStyle(
- fontSize: 14,
- )),
- ),
- const SizedBox(height: 16),
- displayImageList()
- ],
- ),
- );
- }
-
- Widget getAnchorDemo(int index) {
- return Container(
- decoration: const BoxDecoration(color: Colors.white),
- child: Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- Padding(
- padding: const EdgeInsets.only(left: 20, top: 2, right: 9),
- child: TDText('标题$index',
- style: const TextStyle(
- fontSize: 14,
- )),
+ child: TDText('标题 $index', style: const TextStyle(fontSize: 14)),
),
const SizedBox(height: 16),
displayImageList()
@@ -142,38 +115,24 @@ class TDSideBarPaginationPageState extends State {
}
Widget displayImageList() {
- return Column(
- children: [
- Row(mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [
- displayImageItem('标题文字'),
- displayImageItem('标题文字'),
- displayImageItem('最多六个文字'),
- ]),
- const SizedBox(height: 18),
- Row(
- mainAxisAlignment: MainAxisAlignment.spaceEvenly,
- children: [
- displayImageItem('标题文字'),
- displayImageItem('标题文字'),
- displayImageItem('最多六个文字'),
- ],
+ return Container(
+ padding: const EdgeInsets.symmetric(horizontal: 18),
+ width: double.infinity,
+ child: Wrap(
+ spacing: 18,
+ runSpacing: 18,
+ alignment: WrapAlignment.spaceEvenly,
+ children: List.generate(
+ 12,
+ (index) => displayImageItem('${index}最多六个字'),
),
- const SizedBox(height: 18),
- Row(
- mainAxisAlignment: MainAxisAlignment.spaceEvenly,
- children: [
- displayImageItem('标题文字'),
- displayImageItem('标题文字'),
- displayImageItem('最多六个文字'),
- ],
- )
- ],
+ ),
);
}
Widget displayImageItem(String title) {
- return Expanded(
- child: Column(
+ return Column(
+ // spacing: 8,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
const TDImage(
@@ -183,11 +142,8 @@ class TDSideBarPaginationPageState extends State {
height: 48,
),
const SizedBox(height: 8),
- TDText(
- '$title',
- style: const TextStyle(fontSize: 12),
- )
+ TDText('$title', style: const TextStyle(fontSize: 12))
],
- ));
+ );
}
}
diff --git a/tdesign-component/example/lib/page/sidebar/td_sidebar_page_unselected_color.dart b/tdesign-component/example/lib/page/sidebar/td_sidebar_page_unselected_color.dart
index 44539bc57..3b96bf610 100644
--- a/tdesign-component/example/lib/page/sidebar/td_sidebar_page_unselected_color.dart
+++ b/tdesign-component/example/lib/page/sidebar/td_sidebar_page_unselected_color.dart
@@ -16,7 +16,8 @@ class TDSideBarUnSelectedColorPage extends StatefulWidget {
}
}
-class TDSideBarUnSelectedColorPageState extends State {
+class TDSideBarUnSelectedColorPageState
+ extends State {
var currentValue = 1;
var itemHeight = 278.5;
var titleBarHeight = 44;
@@ -52,8 +53,9 @@ class TDSideBarUnSelectedColorPageState extends State SideItemProps(
- index: e.index,
- label: '变更',
- badge: e.badge,
- value: e.value,
- icon: e.icon))
+ index: e.index,
+ label: '变更${e.index}',
+ badge: e.badge,
+ value: e.value,
+ icon: e.icon))
.toList();
_sideBarController.children = children;
- setState(() {
-
- });
+ setState(() {});
});
- },),
+ },
+ ),
),
- Row(
+ Expanded(
+ child: Row(
children: [
SizedBox(
width: 110,
child: TDSideBar(
- height: demoHeight,
unSelectedColor: Colors.red,
style: TDSideBarStyle.normal,
value: currentValue,
@@ -152,40 +152,40 @@ class TDSideBarUnSelectedColorPageState extends State _gridItems = [
- TDActionSheetItem(label: '微信', icon: Image.asset('assets/img/td_action_sheet_1.png'), group: '分享至'),
- TDActionSheetItem(label: '朋友圈', icon: Image.asset('assets/img/td_action_sheet_2.png'), group: '分享至'),
- TDActionSheetItem(label: 'QQ', icon: Image.asset('assets/img/td_action_sheet_3.png'), group: '分享至'),
- TDActionSheetItem(label: '企业微信', icon: Image.asset('assets/img/td_action_sheet_4.png'), group: '分享至'),
- TDActionSheetItem(label: '收藏', icon: const IconWithBackground(icon: TDIcons.star), group: '分享至'),
- TDActionSheetItem(label: '刷新', icon: const IconWithBackground(icon: TDIcons.refresh), group: '分享至'),
- TDActionSheetItem(label: '下载', icon: const IconWithBackground(icon: TDIcons.download), group: '分享至'),
- TDActionSheetItem(label: '复制', icon: const IconWithBackground(icon: TDIcons.queue), group: '分享至'),
+ TDActionSheetItem(
+ label: '微信',
+ icon: Image.asset('assets/img/td_action_sheet_1.png'),
+ group: '分享至'),
+ TDActionSheetItem(
+ label: '朋友圈',
+ icon: Image.asset('assets/img/td_action_sheet_2.png'),
+ group: '分享至'),
+ TDActionSheetItem(
+ label: 'QQ',
+ icon: Image.asset('assets/img/td_action_sheet_3.png'),
+ group: '分享至'),
+ TDActionSheetItem(
+ label: '企业微信',
+ icon: Image.asset('assets/img/td_action_sheet_4.png'),
+ group: '分享至'),
+ TDActionSheetItem(
+ label: '收藏',
+ icon: const IconWithBackground(icon: TDIcons.star),
+ group: '分享至'),
+ TDActionSheetItem(
+ label: '刷新',
+ icon: const IconWithBackground(icon: TDIcons.refresh),
+ group: '分享至'),
+ TDActionSheetItem(
+ label: '下载',
+ icon: const IconWithBackground(icon: TDIcons.download),
+ group: '分享至'),
+ TDActionSheetItem(
+ label: '复制',
+ icon: const IconWithBackground(icon: TDIcons.queue),
+ group: '分享至'),
];
class TDActionSheetPage extends StatelessWidget {
@@ -47,89 +71,91 @@ class TDActionSheetPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
- return Container(
- color: TDTheme.of(context).grayColor2,
- child: ExamplePage(
- title: tdTitle(context),
- desc: '从底部弹出的模态框,提供和当前场景相关的操作动作,也支持提供信息输入和描述。',
- exampleCodeGroup: 'action_sheet',
- children: [
- ExampleModule(title: '组件类型', children: [
- ExampleItem(
- ignoreCode: true,
- desc: '列表型动作面板',
- builder: (BuildContext context) {
- return const Column(
- children: [
- CodeWrapper(builder: _buildBaseListActionSheet),
- SizedBox(height: 16),
- CodeWrapper(builder: _buildDescListActionSheet),
- SizedBox(height: 16),
- CodeWrapper(builder: _buildIconListActionSheet),
- SizedBox(height: 16),
- CodeWrapper(builder: _buildBadgeListActionSheet),
- ],
- );
- },
- ),
- ExampleItem(
- ignoreCode: true,
- desc: '宫格型动作面板',
- builder: (BuildContext context) {
- return const Column(
- children: [
- CodeWrapper(builder: _buildBaseGridActionSheet),
- SizedBox(height: 16),
- CodeWrapper(builder: _buildDescGridActionSheet),
- SizedBox(height: 16),
- CodeWrapper(builder: _buildPaginationGridActionSheet),
- SizedBox(height: 16),
- CodeWrapper(builder: _buildScrollGridActionSheet),
- SizedBox(height: 16),
- CodeWrapper(builder: _buildMultiScrollGridActionSheet),
- SizedBox(height: 16),
- CodeWrapper(builder: _buildBadgeGridActionSheet),
- ],
- );
- },
- ),
- ]),
- ExampleModule(title: '组件状态', children: [
- ExampleItem(
- ignoreCode: true,
- desc: '列表型选项状态',
- builder: (BuildContext context) {
- return const Column(
- children: [
- CodeWrapper(builder: _buildBaseListStateActionSheet),
- SizedBox(height: 16),
- CodeWrapper(builder: _buildIconListStateActionSheet),
- ],
- );
- },
- )
- ]),
- ExampleModule(title: '组件样式', children: [
- ExampleItem(
- ignoreCode: true,
- desc: '列表型对齐方式',
- builder: (BuildContext context) {
- return const Column(
- children: [
- CodeWrapper(builder: _buildBadgeListCenterActionSheet),
- SizedBox(height: 16),
- CodeWrapper(builder: _buildIconListCenterActionSheet),
- SizedBox(height: 16),
- CodeWrapper(builder: _buildBadgeListLeftActionSheet),
- SizedBox(height: 16),
- CodeWrapper(builder: _buildIconListLeftActionSheet),
- ],
- );
- })
- ])
- ],
- test: const [],
- ));
+ return ExamplePage(
+ title: tdTitle(context),
+ desc: '由用户操作后触发的一种特定的模态弹出框 ,呈现一组与当前情境相关的两个或多个选项。',
+ exampleCodeGroup: 'action_sheet',
+ children: [
+ ExampleModule(title: '组件类型', children: [
+ ExampleItem(
+ ignoreCode: true,
+ desc: '列表型动作面板',
+ builder: (BuildContext context) {
+ return const Column(
+ // spacing: 16,
+ children: [
+ CodeWrapper(builder: _buildBaseListActionSheet),
+ SizedBox(height: 16),
+ CodeWrapper(builder: _buildDescListActionSheet),
+ SizedBox(height: 16),
+ CodeWrapper(builder: _buildIconListActionSheet),
+ SizedBox(height: 16),
+ CodeWrapper(builder: _buildBadgeListActionSheet),
+ ],
+ );
+ },
+ ),
+ ExampleItem(
+ ignoreCode: true,
+ desc: '宫格型动作面板',
+ builder: (BuildContext context) {
+ return const Column(
+ // spacing: 16,
+ children: [
+ CodeWrapper(builder: _buildBaseGridActionSheet),
+ SizedBox(height: 16),
+ CodeWrapper(builder: _buildDescGridActionSheet),
+ SizedBox(height: 16),
+ CodeWrapper(builder: _buildPaginationGridActionSheet),
+ SizedBox(height: 16),
+ CodeWrapper(builder: _buildScrollGridActionSheet),
+ SizedBox(height: 16),
+ CodeWrapper(builder: _buildMultiScrollGridActionSheet),
+ SizedBox(height: 16),
+ CodeWrapper(builder: _buildBadgeGridActionSheet),
+ ],
+ );
+ },
+ ),
+ ]),
+ ExampleModule(title: '组件状态', children: [
+ ExampleItem(
+ ignoreCode: true,
+ desc: '列表型选项状态',
+ builder: (BuildContext context) {
+ return const Column(
+ // spacing: 16,
+ children: [
+ CodeWrapper(builder: _buildBaseListStateActionSheet),
+ SizedBox(height: 16),
+ CodeWrapper(builder: _buildIconListStateActionSheet),
+ ],
+ );
+ },
+ )
+ ]),
+ ExampleModule(title: '组件样式', children: [
+ ExampleItem(
+ ignoreCode: true,
+ desc: '列表型对齐方式',
+ builder: (BuildContext context) {
+ return const Column(
+ // spacing: 16,
+ children: [
+ CodeWrapper(builder: _buildBadgeListCenterActionSheet),
+ SizedBox(height: 16),
+ CodeWrapper(builder: _buildIconListCenterActionSheet),
+ SizedBox(height: 16),
+ CodeWrapper(builder: _buildBadgeListLeftActionSheet),
+ SizedBox(height: 16),
+ CodeWrapper(builder: _buildIconListLeftActionSheet),
+ ],
+ );
+ })
+ ])
+ ],
+ test: const [],
+ );
}
}
@@ -342,8 +368,8 @@ Widget _buildScrollGridActionSheet(BuildContext context) {
icon: const IconWithBackground(icon: TDIcons.logo_github),
),
TDActionSheetItem(
- label: 'Github',
- icon: const IconWithBackground(icon: TDIcons.logo_github),
+ label: 'Twitter',
+ icon: const IconWithBackground(icon: TDIcons.logo_twitter),
),
],
);
@@ -407,14 +433,30 @@ Widget _buildBadgeGridActionSheet(BuildContext context) {
size: TDButtonSize.large,
onTap: () {
TDActionSheet.showGridActionSheet(context, items: [
- TDActionSheetItem(label: '微信', icon: Image.asset('assets/img/td_action_sheet_1.png'), badge: const TDBadge(TDBadgeType.message, count: 'NEW')),
- TDActionSheetItem(label: '朋友圈', icon: Image.asset('assets/img/td_action_sheet_2.png')),
- TDActionSheetItem(label: 'QQ', icon: Image.asset('assets/img/td_action_sheet_3.png')),
- TDActionSheetItem(label: '企业微信', icon: Image.asset('assets/img/td_action_sheet_4.png')),
- TDActionSheetItem(label: '收藏', icon: const IconWithBackground(icon: TDIcons.star), badge: const TDBadge(TDBadgeType.redPoint)),
- TDActionSheetItem(label: '刷新', icon: const IconWithBackground(icon: TDIcons.refresh)),
- TDActionSheetItem(label: '下载', icon: const IconWithBackground(icon: TDIcons.download), badge: const TDBadge(TDBadgeType.message, count: '8')),
- TDActionSheetItem(label: '复制', icon: const IconWithBackground(icon: TDIcons.queue)),
+ TDActionSheetItem(
+ label: '微信',
+ icon: Image.asset('assets/img/td_action_sheet_1.png'),
+ badge: const TDBadge(TDBadgeType.message, count: 'NEW')),
+ TDActionSheetItem(
+ label: '朋友圈',
+ icon: Image.asset('assets/img/td_action_sheet_2.png')),
+ TDActionSheetItem(
+ label: 'QQ', icon: Image.asset('assets/img/td_action_sheet_3.png')),
+ TDActionSheetItem(
+ label: '企业微信',
+ icon: Image.asset('assets/img/td_action_sheet_4.png')),
+ TDActionSheetItem(
+ label: '收藏',
+ icon: const IconWithBackground(icon: TDIcons.star),
+ badge: const TDBadge(TDBadgeType.redPoint)),
+ TDActionSheetItem(
+ label: '刷新', icon: const IconWithBackground(icon: TDIcons.refresh)),
+ TDActionSheetItem(
+ label: '下载',
+ icon: const IconWithBackground(icon: TDIcons.download),
+ badge: const TDBadge(TDBadgeType.message, count: '8')),
+ TDActionSheetItem(
+ label: '复制', icon: const IconWithBackground(icon: TDIcons.queue)),
]);
},
);
@@ -526,11 +568,17 @@ Widget _buildBadgeListCenterActionSheet(BuildContext context) {
),
TDActionSheetItem(
label: '选项二',
- badge: const TDBadge(TDBadgeType.message, count: '8',),
+ badge: const TDBadge(
+ TDBadgeType.message,
+ count: '8',
+ ),
),
TDActionSheetItem(
label: '选项三',
- badge: const TDBadge(TDBadgeType.message, count: '99',),
+ badge: const TDBadge(
+ TDBadgeType.message,
+ count: '99',
+ ),
),
],
);
diff --git a/tdesign-component/example/lib/page/td_avatar_page.dart b/tdesign-component/example/lib/page/td_avatar_page.dart
index 003b41340..b576aa4b3 100644
--- a/tdesign-component/example/lib/page/td_avatar_page.dart
+++ b/tdesign-component/example/lib/page/td_avatar_page.dart
@@ -12,46 +12,40 @@ class TDAvatarPage extends StatefulWidget {
}
class _TDAvatarPageState extends State {
+ static const padding = EdgeInsets.symmetric(horizontal: 16);
+
@override
Widget build(BuildContext context) {
return ExamplePage(
- backgroundColor: TDTheme.of(context).whiteColor1,
title: tdTitle(),
exampleCodeGroup: 'avatar',
- desc: '用于告知用户,该区域的状态变化或者待处理任务的数量。',
+ desc: '用于展示用户头像信息,除了纯展示也可点击进入个人详情等操作。',
children: [
ExampleModule(title: '组件类型', children: [
ExampleItem(
- desc: '图片头像',
- builder: _buildImageAvatar),
+ desc: '图片头像', padding: padding, builder: _buildImageAvatar),
ExampleItem(
- desc: '字符头像',
- builder: _buildTextAvatar),
+ desc: '字符头像', padding: padding, builder: _buildTextAvatar),
ExampleItem(
- desc: '图标头像',
- builder: _buildIconAvatar),
+ desc: '图标头像', padding: padding, builder: _buildIconAvatar),
ExampleItem(
- desc: '带徽标头像',
- builder: _buildBadgeAvatar),
+ desc: '带徽标头像', padding: padding, builder: _buildBadgeAvatar),
]),
ExampleModule(title: '特殊类型', children: [
ExampleItem(
- desc: '纯展示的头像组',
- builder: _buildDisplayAvatar),
+ desc: '纯展示的头像组', padding: padding, builder: _buildDisplayAvatar),
ExampleItem(
desc: '带操作的头像组',
+ padding: padding,
builder: _buildOperationAvatar),
]),
ExampleModule(title: '组件尺寸', children: [
ExampleItem(
- desc: '大尺寸 :64px',
- builder: _buildLargeAvatar),
+ desc: '大尺寸:64px', padding: padding, builder: _buildLargeAvatar),
ExampleItem(
- desc: '中尺寸 :48px',
- builder: _buildMediumAvatar),
+ desc: '中尺寸:48px', padding: padding, builder: _buildMediumAvatar),
ExampleItem(
- desc: '小尺寸 :40px',
- builder: _buildSmallAvatar),
+ desc: '小尺寸:40px', padding: padding, builder: _buildSmallAvatar),
])
],
);
@@ -59,232 +53,234 @@ class _TDAvatarPageState extends State {
/// 图片头像
@Demo(group: 'avatar')
- Widget _buildImageAvatar(BuildContext context){
- return Padding(
- padding: const EdgeInsets.only(left: 16),
- child: Row(
- children: const [
- TDAvatar(
- size: TDAvatarSize.medium,
- type: TDAvatarType.normal,
- defaultUrl: 'assets/img/td_avatar_1.png',),
- SizedBox(width: 32,),
- TDAvatar(
- size: TDAvatarSize.medium,
- type: TDAvatarType.normal,
- shape: TDAvatarShape.square,
- defaultUrl: 'assets/img/td_avatar_1.png',),
- ],
- ),
+ Widget _buildImageAvatar(BuildContext context) {
+ return const Row(
+ // spacing: 32,
+ children: [
+ TDAvatar(
+ size: TDAvatarSize.medium,
+ type: TDAvatarType.normal,
+ defaultUrl: 'assets/img/td_avatar_1.png',
+ ),
+ SizedBox(width: 32),
+ TDAvatar(
+ size: TDAvatarSize.medium,
+ type: TDAvatarType.normal,
+ shape: TDAvatarShape.square,
+ defaultUrl: 'assets/img/td_avatar_1.png',
+ ),
+ ],
);
}
/// 字符头像
@Demo(group: 'avatar')
- Widget _buildTextAvatar(BuildContext context){
- return Padding(
- padding: const EdgeInsets.only(left: 16),
- child: Row(
- children: const [
- TDAvatar(
- size: TDAvatarSize.medium,
- type: TDAvatarType.customText,
- text: 'A'),
- SizedBox(width: 32,),
- TDAvatar(
- size: TDAvatarSize.medium,
- type: TDAvatarType.customText,
- shape: TDAvatarShape.square,
- text: 'A'),
- ],
- ),
+ Widget _buildTextAvatar(BuildContext context) {
+ return const Row(
+ // spacing: 32,
+ children: [
+ TDAvatar(
+ size: TDAvatarSize.medium,
+ type: TDAvatarType.customText,
+ text: 'A',
+ ),
+ SizedBox(width: 32),
+ TDAvatar(
+ size: TDAvatarSize.medium,
+ type: TDAvatarType.customText,
+ shape: TDAvatarShape.square,
+ text: 'A',
+ ),
+ ],
);
}
/// 图标头像
@Demo(group: 'avatar')
- Widget _buildIconAvatar(BuildContext context){
- return Padding(
- padding: const EdgeInsets.only(left: 16),
- child: Row(
- children: const [
- TDAvatar(
- size: TDAvatarSize.medium,
- type: TDAvatarType.icon,),
- SizedBox(width: 32,),
- TDAvatar(
- size: TDAvatarSize.medium,
- type: TDAvatarType.icon,
- shape: TDAvatarShape.square,
- ),
- ],
- ),
+ Widget _buildIconAvatar(BuildContext context) {
+ return const Row(
+ // spacing: 32,
+ children: [
+ TDAvatar(
+ size: TDAvatarSize.medium,
+ type: TDAvatarType.icon,
+ ),
+ SizedBox(width: 32),
+ TDAvatar(
+ size: TDAvatarSize.medium,
+ type: TDAvatarType.icon,
+ shape: TDAvatarShape.square,
+ ),
+ ],
);
}
/// 带徽标头像
@Demo(group: 'avatar')
- Widget _buildBadgeAvatar(BuildContext context){
- return Padding(
- padding: const EdgeInsets.only(left: 16),
- child: Row(
- children: [
- SizedBox(
- height: 51,
- width: 51,
- child: Stack(
- alignment:Alignment.bottomLeft,
- children: const [
- TDAvatar(
- size: TDAvatarSize.medium,
- type: TDAvatarType.normal,
- defaultUrl: 'assets/img/td_avatar_1.png',),
- Positioned(child: TDBadge(TDBadgeType.redPoint), right: 0, top: 0)
- ],
- ),
+ Widget _buildBadgeAvatar(BuildContext context) {
+ return const Row(
+ // spacing: 32,
+ children: [
+ SizedBox(
+ height: 51,
+ width: 51,
+ child: Stack(
+ alignment: Alignment.bottomLeft,
+ children: [
+ TDAvatar(
+ size: TDAvatarSize.medium,
+ type: TDAvatarType.normal,
+ defaultUrl: 'assets/img/td_avatar_1.png',
+ ),
+ Positioned(child: TDBadge(TDBadgeType.redPoint), right: 0, top: 0)
+ ],
),
- const SizedBox(width: 32,),
- SizedBox(
- height: 51,
- width: 51,
- child: Stack(
- alignment:Alignment.bottomLeft,
- children: const [
- TDAvatar(
- size: TDAvatarSize.medium,
- type: TDAvatarType.customText,
- text: 'A'),
- Positioned(child: TDBadge(TDBadgeType.message,count: '8',), right: 0, top: 0)
- ],
- ),
+ ),
+ SizedBox(width: 32),
+ SizedBox(
+ height: 51,
+ width: 51,
+ child: Stack(
+ alignment: Alignment.bottomLeft,
+ children: [
+ TDAvatar(
+ size: TDAvatarSize.medium,
+ type: TDAvatarType.customText,
+ text: 'A',
+ ),
+ Positioned(
+ child: TDBadge(TDBadgeType.message, count: '8'),
+ right: 0,
+ top: 0,
+ )
+ ],
),
- const SizedBox(width: 32,),
- SizedBox(
- width: 51,
- height: 51,
- child: Stack(
- alignment:Alignment.bottomLeft,
- children: const [
- TDAvatar(
- size: TDAvatarSize.medium,
- type: TDAvatarType.icon,),
- Positioned(child: TDBadge(TDBadgeType.message,count: '12',), right: 0, top: 0,)
- ],
- ),
+ ),
+ SizedBox(width: 32),
+ SizedBox(
+ width: 51,
+ height: 51,
+ child: Stack(
+ alignment: Alignment.bottomLeft,
+ children: [
+ TDAvatar(size: TDAvatarSize.medium, type: TDAvatarType.icon),
+ Positioned(
+ child: TDBadge(TDBadgeType.message, count: '12'),
+ right: 0,
+ top: 0,
+ )
+ ],
),
- ],
- ),
+ ),
+ ],
);
}
/// 纯展示的头像组
@Demo(group: 'avatar')
- Widget _buildDisplayAvatar(BuildContext context){
+ Widget _buildDisplayAvatar(BuildContext context) {
var assetUrl = 'assets/img/td_avatar_1.png';
var assetUrl2 = 'assets/img/td_avatar_2.png';
var avatarList = [assetUrl, assetUrl2, assetUrl, assetUrl2, assetUrl];
- return Container(
- alignment: Alignment.centerLeft,
- padding: const EdgeInsets.only(left: 16),
- child: TDAvatar(
- size: TDAvatarSize.medium,
- type: TDAvatarType.display,
- displayText: '+5',
- avatarDisplayListAsset: avatarList,),
+ return TDAvatar(
+ size: TDAvatarSize.medium,
+ type: TDAvatarType.display,
+ displayText: '+5',
+ avatarDisplayListAsset: avatarList,
);
}
/// 带操作的头像组
@Demo(group: 'avatar')
- Widget _buildOperationAvatar(BuildContext context){
+ Widget _buildOperationAvatar(BuildContext context) {
var assetUrl = 'assets/img/td_avatar_1.png';
var assetUrl2 = 'assets/img/td_avatar_2.png';
var avatarList = [assetUrl, assetUrl2, assetUrl, assetUrl2, assetUrl];
- return Container(
- alignment: Alignment.centerLeft,
- padding: const EdgeInsets.only(left: 16),
- child: TDAvatar(
- size: TDAvatarSize.medium,
- type: TDAvatarType.operation,
- avatarDisplayListAsset: avatarList,
- onTap: () {
- TDToast.showText('点击了操作', context: context);
- }),
+ return TDAvatar(
+ size: TDAvatarSize.medium,
+ type: TDAvatarType.operation,
+ avatarDisplayListAsset: avatarList,
+ onTap: () {
+ TDToast.showText('点击了操作', context: context);
+ },
);
}
/// 组件尺寸 大尺寸
@Demo(group: 'avatar')
- Widget _buildLargeAvatar(BuildContext context){
- return Padding(
- padding: const EdgeInsets.only(left: 16),
- child: Row(
- children: const [
- TDAvatar(
- size: TDAvatarSize.large,
- type: TDAvatarType.normal,
- defaultUrl: 'assets/img/td_avatar_1.png',),
- SizedBox(width: 32,),
- TDAvatar(
- size: TDAvatarSize.large,
- type: TDAvatarType.customText,
- text: 'A'),
- SizedBox(width: 32,),
- TDAvatar(
- size: TDAvatarSize.large,
- type: TDAvatarType.icon,),
- ],
- ),
+ Widget _buildLargeAvatar(BuildContext context) {
+ return const Row(
+ // spacing: 32,
+ children: [
+ TDAvatar(
+ size: TDAvatarSize.large,
+ type: TDAvatarType.normal,
+ defaultUrl: 'assets/img/td_avatar_1.png',
+ ),
+ SizedBox(width: 32),
+ TDAvatar(
+ size: TDAvatarSize.large,
+ type: TDAvatarType.customText,
+ text: 'A',
+ ),
+ SizedBox(width: 32),
+ TDAvatar(
+ size: TDAvatarSize.large,
+ type: TDAvatarType.icon,
+ ),
+ ],
);
}
/// 组件尺寸 中尺寸
@Demo(group: 'avatar')
- Widget _buildMediumAvatar(BuildContext context){
- return Padding(
- padding: const EdgeInsets.only(left: 16),
- child: Row(
- children: const [
- TDAvatar(
- size: TDAvatarSize.medium,
- type: TDAvatarType.normal,
- defaultUrl: 'assets/img/td_avatar_1.png',),
- SizedBox(width: 48,),
- TDAvatar(
- size: TDAvatarSize.medium,
- type: TDAvatarType.customText,
- text: 'A'),
- SizedBox(width: 48,),
- TDAvatar(
- size: TDAvatarSize.medium,
- type: TDAvatarType.icon,),
- ],
- ),
+ Widget _buildMediumAvatar(BuildContext context) {
+ return const Row(
+ // spacing: 48,
+ children: [
+ TDAvatar(
+ size: TDAvatarSize.medium,
+ type: TDAvatarType.normal,
+ defaultUrl: 'assets/img/td_avatar_1.png',
+ ),
+ SizedBox(width: 48),
+ TDAvatar(
+ size: TDAvatarSize.medium,
+ type: TDAvatarType.customText,
+ text: 'A',
+ ),
+ SizedBox(width: 48),
+ TDAvatar(
+ size: TDAvatarSize.medium,
+ type: TDAvatarType.icon,
+ ),
+ ],
);
}
/// 组件尺寸 小尺寸
@Demo(group: 'avatar')
- Widget _buildSmallAvatar(BuildContext context){
- return Padding(
- padding: const EdgeInsets.only(left: 16),
- child: Row(
- children: const [
- TDAvatar(
- size: TDAvatarSize.small,
- type: TDAvatarType.normal,
- defaultUrl: 'assets/img/td_avatar_1.png',),
- SizedBox(width: 56,),
- TDAvatar(
- size: TDAvatarSize.small,
- type: TDAvatarType.customText,
- text: 'A'),
- SizedBox(width: 56,),
- TDAvatar(
- size: TDAvatarSize.small,
- type: TDAvatarType.icon,),
- ],
- ),
+ Widget _buildSmallAvatar(BuildContext context) {
+ return const Row(
+ // spacing: 56,
+ children: [
+ TDAvatar(
+ size: TDAvatarSize.small,
+ type: TDAvatarType.normal,
+ defaultUrl: 'assets/img/td_avatar_1.png',
+ ),
+ SizedBox(width: 56),
+ TDAvatar(
+ size: TDAvatarSize.small,
+ type: TDAvatarType.customText,
+ text: 'A',
+ ),
+ SizedBox(width: 56),
+ TDAvatar(
+ size: TDAvatarSize.small,
+ type: TDAvatarType.icon,
+ ),
+ ],
);
}
}
diff --git a/tdesign-component/example/lib/page/td_backtop_page.dart b/tdesign-component/example/lib/page/td_backtop_page.dart
index cbad63642..5ffbc477c 100644
--- a/tdesign-component/example/lib/page/td_backtop_page.dart
+++ b/tdesign-component/example/lib/page/td_backtop_page.dart
@@ -4,7 +4,6 @@ import 'package:tdesign_flutter/tdesign_flutter.dart';
import '../annotation/demo.dart';
import '../base/example_widget.dart';
-
class TDBackTopPage extends StatefulWidget {
const TDBackTopPage({Key? key}) : super(key: key);
@@ -16,11 +15,20 @@ class _TDBackTopPageState extends State {
ScrollController controller = ScrollController();
bool showBackTop = false;
TDBackTopStyle style = TDBackTopStyle.circle;
+ TDBackTopTheme theme = TDBackTopTheme.light;
@override
void initState() {
super.initState();
controller.addListener(listenCallback);
+
+ WidgetsBinding.instance.addPostFrameCallback((_) {
+ setState(() {
+ theme = Theme.of(context).brightness == Brightness.dark
+ ? TDBackTopTheme.light
+ : TDBackTopTheme.dark;
+ });
+ });
}
@override
@@ -30,18 +38,11 @@ class _TDBackTopPageState extends State {
}
void listenCallback() {
- if (controller.offset >= 100) {
- if (!showBackTop) {
- setState(() {
- showBackTop = true;
- });
- }
- } else {
- if (showBackTop) {
- setState(() {
- showBackTop = false;
- });
- }
+ final shouldShow = controller.offset >= 100;
+ if (shouldShow != showBackTop) {
+ setState(() {
+ showBackTop = shouldShow;
+ });
}
}
@@ -63,16 +64,16 @@ class _TDBackTopPageState extends State {
bottom: 10,
child: TDBackTop(
controller: controller,
- theme: TDBackTopTheme.dark,
+ theme: theme,
showText: true,
style: style,
))
: TDBackTop(
controller: controller,
- theme: TDBackTopTheme.dark,
+ theme: theme,
showText: true,
style: style,
- ))
+ )),
],
),
children: [
@@ -114,14 +115,7 @@ class _TDBackTopPageState extends State {
child: Wrap(
spacing: 16,
runSpacing: 24,
- children: [
- getDemoBox(context),
- getDemoBox(context),
- getDemoBox(context),
- getDemoBox(context),
- getDemoBox(context),
- getDemoBox(context),
- ],
+ children: List.generate(6, (_) => getDemoBox(context)),
),
)
],
@@ -130,46 +124,49 @@ class _TDBackTopPageState extends State {
Widget getCustomButton(
BuildContext context, String text, void Function() onTap) {
- return Padding(
- padding: const EdgeInsets.symmetric(horizontal: 16),
- child: TDButton(
- text: text,
- width: MediaQuery.of(context).size.width - 16 * 2,
- size: TDButtonSize.large,
- type: TDButtonType.outline,
- shape: TDButtonShape.rectangle,
- theme: TDButtonTheme.primary,
- onTap: onTap,
- ));
+ return TDButton(
+ text: text,
+ isBlock: true,
+ size: TDButtonSize.large,
+ type: TDButtonType.outline,
+ shape: TDButtonShape.rectangle,
+ theme: TDButtonTheme.primary,
+ onTap: onTap,
+ );
}
Widget getDemoBox(BuildContext context) {
+ final theme = TDTheme.of(context);
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
+ // spacing: 10,
children: [
Container(
width: 163,
height: 163,
decoration: BoxDecoration(
- color: Colors.white, borderRadius: BorderRadius.circular(12)),
- ),
- const SizedBox(
- height: 10,
+ color: theme.bgColorContainer,
+ borderRadius: BorderRadius.circular(theme.radiusExtraLarge),
+ ),
),
+ const SizedBox(height: 10),
Container(
width: 163,
height: 16,
decoration: BoxDecoration(
- color: Colors.white, borderRadius: BorderRadius.circular(3)),
- ),
- const SizedBox(
- height: 10,
+ color: theme.bgColorContainer,
+ borderRadius: BorderRadius.circular(theme.radiusSmall),
+ ),
),
+ const SizedBox(height: 10),
Container(
- width: 100,
- height: 16,
- decoration: BoxDecoration(
- color: Colors.white, borderRadius: BorderRadius.circular(3))),
+ width: 100,
+ height: 16,
+ decoration: BoxDecoration(
+ color: theme.bgColorContainer,
+ borderRadius: BorderRadius.circular(theme.radiusSmall),
+ ),
+ ),
],
);
}
diff --git a/tdesign-component/example/lib/page/td_badge_page.dart b/tdesign-component/example/lib/page/td_badge_page.dart
index d81df2424..281aac1a9 100644
--- a/tdesign-component/example/lib/page/td_badge_page.dart
+++ b/tdesign-component/example/lib/page/td_badge_page.dart
@@ -11,8 +11,12 @@ class TDBadgePage extends StatefulWidget {
}
class _TDBadgePageState extends State {
+ int num = 8;
+
@override
Widget build(BuildContext context) {
+ var padding = const EdgeInsets.symmetric(horizontal: 16);
+
return ExamplePage(
title: tdTitle(),
desc: '用于告知用户,该区域的状态变化或者待处理任务的数量。',
@@ -24,58 +28,52 @@ class _TDBadgePageState extends State {
ExampleItem(
desc: '红点徽标',
ignoreCode: true,
+ padding: padding,
builder: (context) {
return Row(
+ // spacing: 32,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
- CodeWrapper(
- builder: _buildRedPointMessageBadge,
- ),
- CodeWrapper(
- builder: _buildRedPointIconBadge,
- ),
- CodeWrapper(
- builder: _buildRedPointButtonBadge,
- ),
+ CodeWrapper(builder: _buildRedPointMessageBadge),
+ const SizedBox(width: 32),
+ CodeWrapper(builder: _buildRedPointIconBadge),
+ const SizedBox(width: 32),
+ CodeWrapper(builder: _buildRedPointButtonBadge),
],
);
}),
-
ExampleItem(
desc: '数字徽标',
ignoreCode: true,
+ padding: padding,
builder: (context) {
return Row(
+ // spacing: 32,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
- CodeWrapper(
- builder: _buildMessageNumberBadge,
- ),
- CodeWrapper(
- builder: _buildIconNumberBadge,
- ),
- CodeWrapper(
- builder: _buildButtonNumberBadge,
- ),
+ CodeWrapper(builder: _buildMessageNumberBadge),
+ const SizedBox(width: 32),
+ CodeWrapper(builder: _buildIconNumberBadge),
+ const SizedBox(width: 32),
+ CodeWrapper(builder: _buildButtonNumberBadge),
],
);
}),
ExampleItem(
desc: '自定义徽标',
ignoreCode: true,
+ padding: padding,
builder: (context) {
return Row(
crossAxisAlignment: CrossAxisAlignment.center,
+ // spacing: 32,
children: [
+ CodeWrapper(builder: _buildCustomBadgeShowingNumber),
+ const SizedBox(width: 32),
+ CodeWrapper(builder: _buildCustomBadgeShowingNumberZero),
+ const SizedBox(width: 32),
CodeWrapper(
- builder: _buildCustomBadgeShowingNumberEight,
- ),
- CodeWrapper(
- builder: _buildCustomBadgeShowingNumberZero,
- ),
- CodeWrapper(
- builder: _buildCustomBadgeWithoutShowingNumberZero,
- ),
+ builder: _buildCustomBadgeWithoutShowingNumberZero),
],
);
}),
@@ -100,317 +98,250 @@ class _TDBadgePageState extends State {
],
test: [
ExampleItem(
- ignoreCode: true,
- desc: '未超过上限',
- builder: (context) {
- return Row(
- crossAxisAlignment: CrossAxisAlignment.center,
- children: [
- CodeWrapper(
- builder: _buildLessThanMaxCountBadge,
- ),
- ],
- );
- }),
+ ignoreCode: true,
+ desc: '未超过上限',
+ builder: _buildLessThanMaxCountBadge,
+ ),
ExampleItem(
- ignoreCode: true,
- desc: '超过上限',
- builder: (context) {
- return Row(
- crossAxisAlignment: CrossAxisAlignment.center,
- children: [
- CodeWrapper(
- builder: _buildMoreThanMaxCountBadge,
- ),
- ],
- );
- })
+ ignoreCode: true,
+ desc: '超过上限',
+ builder: _buildMoreThanMaxCountBadge,
+ )
],
+ floatingActionButton: TDFab(
+ theme: TDFabTheme.primary,
+ onClick: () {
+ setState(() {
+ num = num + 1;
+ });
+ }),
);
}
@Demo(group: 'badge')
Widget _buildRedPointMessageBadge(BuildContext context) {
- return Container(
+ return SizedBox(
+ width: 40,
+ height: 24,
+ child: Stack(
alignment: Alignment.bottomLeft,
- margin: const EdgeInsets.only(left: 16, right: 16),
- child: SizedBox(
- width: 40,
- height: 24,
- child: Stack(
- alignment: Alignment.bottomLeft,
- children: [
- TDText(
- '消息',
- font: TDTheme.of(context).fontBodyLarge,
- ),
- const Positioned(
- child: TDBadge(TDBadgeType.redPoint),
- right: 0,
- top: 0,
- )
- ],
+ children: [
+ TDText(
+ '消息',
+ font: TDTheme.of(context).fontBodyLarge,
),
- ));
+ const Positioned(
+ child: TDBadge(TDBadgeType.redPoint),
+ right: 0,
+ top: 0,
+ )
+ ],
+ ),
+ );
}
@Demo(group: 'badge')
Widget _buildRedPointIconBadge(BuildContext context) {
- return Container(
+ return const SizedBox(
+ width: 27,
+ height: 27,
+ child: Stack(
alignment: Alignment.bottomLeft,
- margin: const EdgeInsets.only(left: 16, right: 16),
- child: SizedBox(
- width: 27,
- height: 27,
- child: Stack(
- alignment: Alignment.bottomLeft,
- children: [
- Icon(TDIcons.notification),
- Positioned(
- child: TDBadge(TDBadgeType.redPoint),
- right: 0,
- top: 0,
- )
- ],
- ),
- ));
+ children: [
+ Icon(TDIcons.notification),
+ Positioned(
+ child: TDBadge(TDBadgeType.redPoint),
+ right: 0,
+ top: 0,
+ )
+ ],
+ ),
+ );
}
@Demo(group: 'badge')
Widget _buildRedPointButtonBadge(BuildContext context) {
- return Container(
+ return const SizedBox(
+ width: 83,
+ height: 48,
+ child: Stack(
alignment: Alignment.bottomLeft,
- margin: const EdgeInsets.only(left: 16, right: 16),
- child: SizedBox(
- width: 83,
- height: 48,
- child: Stack(
- alignment: Alignment.bottomLeft,
- children: [
- TDButton(
- width: 80,
- height: 48,
- text: '按钮',
- size: TDButtonSize.large,
- type: TDButtonType.fill,
- ),
- Positioned(
- child: TDBadge(TDBadgeType.redPoint),
- right: 0,
- top: 0,
- )
- ],
+ children: [
+ TDButton(
+ width: 80,
+ height: 48,
+ text: '按钮',
+ size: TDButtonSize.large,
+ type: TDButtonType.fill,
),
- ));
+ Positioned(
+ child: TDBadge(TDBadgeType.redPoint),
+ right: 0,
+ top: 0,
+ )
+ ],
+ ),
+ );
}
@Demo(group: 'badge')
Widget _buildMessageNumberBadge(BuildContext context) {
- return Container(
+ return SizedBox(
+ width: 56,
+ height: 36,
+ child: Stack(
alignment: Alignment.bottomLeft,
- margin: const EdgeInsets.only(left: 16),
- child: SizedBox(
- width: 54,
- height: 36,
- child: Stack(
- alignment: Alignment.bottomLeft,
- children: [
- TDText(
- '消息',
- font: TDTheme.of(context).fontBodyLarge,
- ),
- const Positioned(
- child: TDBadge(
- TDBadgeType.message,
- count: '8',
- ),
- left: 28,
- bottom: 18,
- )
- ],
- ),
- ));
+ children: [
+ TDText('消息', font: TDTheme.of(context).fontBodyLarge),
+ Positioned(
+ child: TDBadge(TDBadgeType.message, count: num.toString()),
+ left: 28,
+ bottom: 18,
+ )
+ ],
+ ),
+ );
}
@Demo(group: 'badge')
Widget _buildIconNumberBadge(BuildContext context) {
- return Container(
+ return SizedBox(
+ width: 46,
+ height: 36,
+ child: Stack(
alignment: Alignment.bottomLeft,
- margin: const EdgeInsets.only(left: 16),
- child: SizedBox(
- width: 42,
- height: 36,
- child: Stack(
- alignment: Alignment.bottomLeft,
- children: [
- Icon(TDIcons.notification),
- Positioned(
- child: TDBadge(
- TDBadgeType.message,
- count: '8',
- ),
- left: 18,
- bottom: 18,
- )
- ],
- ),
- ));
+ children: [
+ const Icon(TDIcons.notification),
+ Positioned(
+ child: TDBadge(TDBadgeType.message, count: num.toString()),
+ left: 18,
+ bottom: 18,
+ )
+ ],
+ ),
+ );
}
@Demo(group: 'badge')
Widget _buildButtonNumberBadge(BuildContext context) {
- return Container(
+ return SizedBox(
+ width: 86,
+ height: 54,
+ child: Stack(
alignment: Alignment.bottomLeft,
- margin: const EdgeInsets.only(left: 16),
- child: SizedBox(
- width: 86,
- height: 54,
- child: Stack(
- alignment: Alignment.bottomLeft,
- children: [
- TDButton(
- width: 80,
- height: 48,
- text: '按钮',
- size: TDButtonSize.large,
- ),
- Positioned(
- child: TDBadge(
- TDBadgeType.message,
- count: '8',
- ),
- right: 0,
- top: 0,
- )
- ],
+ children: [
+ const TDButton(
+ width: 80,
+ height: 48,
+ text: '按钮',
+ size: TDButtonSize.large,
),
- ));
+ Positioned(
+ child: TDBadge(TDBadgeType.message, count: num.toString()),
+ right: 0,
+ top: 0,
+ )
+ ],
+ ),
+ );
}
@Demo(group: 'badge')
- Widget _buildCustomBadgeShowingNumberEight(BuildContext context) {
- return Container(
+ Widget _buildCustomBadgeShowingNumber(BuildContext context) {
+ return SizedBox(
+ width: 64,
+ height: 56,
+ child: Stack(
alignment: Alignment.bottomLeft,
- margin: const EdgeInsets.only(top: 8, left: 16, right: 16, bottom: 8),
- child: SizedBox(
- width: 64,
- height: 56,
- child: Stack(
- alignment: Alignment.bottomLeft,
- children: [
- Container(
- child: const Icon(TDIcons.notification),
- decoration: BoxDecoration(
- color: TDTheme.of(context).grayColor2,
- borderRadius: BorderRadius.circular(
- TDTheme.of(context).radiusDefault)),
- height: 48,
- width: 48,
- ),
- const Positioned(
- child: TDBadge(
- TDBadgeType.message,
- count: '8',
- ),
- right: 0,
- top: 0,
- )
- ],
+ children: [
+ Container(
+ child: const Icon(TDIcons.notification),
+ decoration: BoxDecoration(
+ color: TDTheme.of(context).bgColorComponent,
+ borderRadius:
+ BorderRadius.circular(TDTheme.of(context).radiusDefault)),
+ height: 48,
+ width: 48,
),
- ));
+ Positioned(
+ child: TDBadge(TDBadgeType.message, count: num.toString()),
+ right: 0,
+ top: 0,
+ )
+ ],
+ ),
+ );
}
@Demo(group: 'badge')
Widget _buildCustomBadgeShowingNumberZero(BuildContext context) {
- return Container(
+ return SizedBox(
+ width: 64,
+ height: 56,
+ child: Stack(
alignment: Alignment.bottomLeft,
- margin: const EdgeInsets.only(top: 8, left: 16, right: 16, bottom: 8),
- child: SizedBox(
- width: 64,
- height: 56,
- child: Stack(
- alignment: Alignment.bottomLeft,
- children: [
- Container(
- child: const Icon(TDIcons.notification),
- decoration: BoxDecoration(
- color: TDTheme.of(context).grayColor2,
- borderRadius: BorderRadius.circular(
- TDTheme.of(context).radiusDefault)),
- height: 48,
- width: 48,
- ),
- const Positioned(
- child: TDBadge(
- TDBadgeType.message,
- count: '0',
- ),
- right: 0,
- top: 0,
- )
- ],
+ children: [
+ Container(
+ child: const Icon(TDIcons.notification),
+ decoration: BoxDecoration(
+ color: TDTheme.of(context).bgColorComponent,
+ borderRadius:
+ BorderRadius.circular(TDTheme.of(context).radiusDefault)),
+ height: 48,
+ width: 48,
),
- ));
+ const Positioned(
+ child: TDBadge(TDBadgeType.message, count: '0'),
+ right: 0,
+ top: 0,
+ )
+ ],
+ ),
+ );
}
@Demo(group: 'badge')
Widget _buildCustomBadgeWithoutShowingNumberZero(BuildContext context) {
- return Container(
+ return SizedBox(
+ width: 64,
+ height: 56,
+ child: Stack(
alignment: Alignment.bottomLeft,
- margin: const EdgeInsets.only(top: 8, left: 16, right: 16, bottom: 8),
- child: SizedBox(
- width: 64,
- height: 56,
- child: Stack(
- alignment: Alignment.bottomLeft,
- children: [
- Container(
- child: const Icon(TDIcons.notification),
- decoration: BoxDecoration(
- color: TDTheme.of(context).grayColor2,
- borderRadius: BorderRadius.circular(
- TDTheme.of(context).radiusDefault)),
- height: 48,
- width: 48,
- ),
- const Positioned(
- child: TDBadge(
- TDBadgeType.message,
- count: '0',
- showZero: false,
- ),
- right: 0,
- top: 0,
- )
- ],
+ children: [
+ Container(
+ child: const Icon(TDIcons.notification),
+ decoration: BoxDecoration(
+ color: TDTheme.of(context).bgColorComponent,
+ borderRadius:
+ BorderRadius.circular(TDTheme.of(context).radiusDefault)),
+ height: 48,
+ width: 48,
),
- ));
+ const Positioned(
+ // 不显示 0
+ child: TDBadge(TDBadgeType.message, count: '0', showZero: false),
+ right: 0,
+ top: 0,
+ )
+ ],
+ ),
+ );
}
@Demo(group: 'badge')
Widget _buildCircleBadge(BuildContext context) {
- return Padding(
- padding: EdgeInsets.only(left: 16),
- child: Row(
+ return SizedBox(
+ width: 48,
+ height: 34,
+ child: Stack(
+ alignment: Alignment.bottomLeft,
children: [
- SizedBox(
- width: 48,
- height: 34,
- child: Stack(
- alignment: Alignment.bottomLeft,
- children: [
- Icon(TDIcons.notification),
- Positioned(
- child: TDBadge(
- TDBadgeType.message,
- count: '16',
- ),
- left: 18,
- bottom: 18,
- )
- ],
- ),
- ),
+ const Icon(TDIcons.notification),
+ Positioned(
+ child: TDBadge(TDBadgeType.message, count: num.toString()),
+ left: 18,
+ bottom: 18,
+ )
],
),
);
@@ -418,29 +349,22 @@ class _TDBadgePageState extends State {
@Demo(group: 'badge')
Widget _buildSquareBadge(BuildContext context) {
- return Padding(
- padding: EdgeInsets.only(left: 16),
- child: Row(
+ return SizedBox(
+ width: 48,
+ height: 34,
+ child: Stack(
+ alignment: Alignment.bottomLeft,
children: [
- SizedBox(
- width: 48,
- height: 34,
- child: Stack(
- alignment: Alignment.bottomLeft,
- children: [
- Icon(TDIcons.notification),
- Positioned(
- child: TDBadge(
- TDBadgeType.square,
- border: TDBadgeBorder.small,
- count: '16',
- ),
- left: 20,
- bottom: 18,
- )
- ],
+ const Icon(TDIcons.notification),
+ Positioned(
+ child: TDBadge(
+ TDBadgeType.square,
+ border: TDBadgeBorder.small,
+ count: num.toString(),
),
- ),
+ left: 20,
+ bottom: 18,
+ )
],
),
);
@@ -448,36 +372,26 @@ class _TDBadgePageState extends State {
@Demo(group: 'badge')
Widget _buildBubbleBadge(BuildContext context) {
- return Padding(
- padding: const EdgeInsets.only(left: 16),
- child: Row(
+ return SizedBox(
+ width: 67,
+ height: 56,
+ child: Stack(
+ alignment: Alignment.bottomLeft,
children: [
- SizedBox(
- width: 67,
- height: 56,
- child: Stack(
- alignment: Alignment.bottomLeft,
- children: [
- Container(
- child: const Icon(TDIcons.shop),
- decoration: BoxDecoration(
- color: TDTheme.of(context).grayColor2,
- borderRadius: BorderRadius.circular(
- TDTheme.of(context).radiusDefault)),
- height: 48,
- width: 48,
- ),
- const Positioned(
- child: TDBadge(
- TDBadgeType.bubble,
- count: '领积分',
- ),
- right: 0,
- top: 0,
- )
- ],
- ),
+ Container(
+ child: const Icon(TDIcons.shop),
+ decoration: BoxDecoration(
+ color: TDTheme.of(context).bgColorComponent,
+ borderRadius:
+ BorderRadius.circular(TDTheme.of(context).radiusDefault)),
+ height: 48,
+ width: 48,
),
+ const Positioned(
+ child: TDBadge(TDBadgeType.bubble, count: '领积分'),
+ right: 0,
+ top: 0,
+ )
],
),
);
@@ -485,57 +399,30 @@ class _TDBadgePageState extends State {
@Demo(group: 'badge')
Widget _buildSubscriptBadge(BuildContext context) {
- return Stack(
+ return const Stack(
alignment: Alignment.topRight,
children: [
- Container(
- padding: const EdgeInsets.only(left: 16),
- alignment: Alignment.centerLeft,
- child: TDText(
- '单行标题',
- textColor: TDTheme.of(context).fontGyColor1,
- font: TDTheme.of(context).fontBodyLarge,
- ),
- color: Colors.white,
- height: 48,
- width: MediaQuery.of(context).size.width,
- ),
- const TDBadge(
- TDBadgeType.subscript,
- message: 'NEW',
- ),
+ TDCell(title: '单行标题'),
+ TDBadge(TDBadgeType.subscript, message: 'NEW'),
],
);
}
@Demo(group: 'badge')
Widget _buildLargeBadge(BuildContext context) {
- return Padding(
- padding: EdgeInsets.only(left: 16),
- child: Row(
+ return SizedBox(
+ width: 80,
+ height: 68,
+ child: Stack(
+ alignment: Alignment.bottomLeft,
children: [
- SizedBox(
- width: 68,
- height: 70,
- child: Stack(
- alignment: Alignment.bottomLeft,
- children: [
- TDAvatar(
- size: TDAvatarSize.large,
- type: TDAvatarType.icon,
- ),
- Positioned(
- child: TDBadge(
- TDBadgeType.message,
- size: TDBadgeSize.large,
- count: '8',
- ),
- left: 48,
- bottom: 48,
- )
- ],
- ),
- ),
+ const TDAvatar(size: TDAvatarSize.large, type: TDAvatarType.icon),
+ Positioned(
+ child: TDBadge(TDBadgeType.message,
+ size: TDBadgeSize.large, count: num.toString()),
+ left: 48,
+ bottom: 48,
+ )
],
),
);
@@ -543,31 +430,18 @@ class _TDBadgePageState extends State {
@Demo(group: 'badge')
Widget _buildMediumBadge(BuildContext context) {
- return Container(
- padding: const EdgeInsets.only(left: 16),
- child: Row(
+ return SizedBox(
+ width: 72,
+ height: 54,
+ child: Stack(
+ alignment: Alignment.bottomLeft,
children: [
- SizedBox(
- width: 120,
- height: 54,
- child: Stack(
- alignment: Alignment.bottomLeft,
- children: [
- TDAvatar(
- size: TDAvatarSize.medium,
- type: TDAvatarType.icon,
- ),
- Positioned(
- child: TDBadge(
- TDBadgeType.message,
- count: '8',
- ),
- left: 36,
- bottom: 36,
- )
- ],
- ),
- ),
+ const TDAvatar(size: TDAvatarSize.medium, type: TDAvatarType.icon),
+ Positioned(
+ child: TDBadge(TDBadgeType.message, count: num.toString()),
+ left: 36,
+ bottom: 36,
+ )
],
),
);
@@ -575,63 +449,53 @@ class _TDBadgePageState extends State {
@Demo(group: 'badge')
Widget _buildLessThanMaxCountBadge(BuildContext context) {
- return Container(
- alignment: Alignment.bottomLeft,
- margin: const EdgeInsets.only(left: 16, right: 16, bottom: 8),
- child: SizedBox(
- width: 60,
- height: 50,
- child: Stack(
- children: [
- Positioned(
- left: 0,
- bottom: 0,
- child: Icon(TDIcons.notification),
- ),
- Positioned(
- child: TDBadge(
- TDBadgeType.square,
- count: '8888',
- maxCount: '9000',
- size: TDBadgeSize.large,
- border: TDBadgeBorder.large,
- ),
- left: 18,
- bottom: 18,
- ),
- ],
+ return const SizedBox(
+ width: 60,
+ height: 50,
+ child: Stack(
+ children: [
+ Positioned(
+ left: 0,
+ bottom: 0,
+ child: Icon(TDIcons.notification),
),
- ));
+ Positioned(
+ child: TDBadge(
+ TDBadgeType.square,
+ count: '8888',
+ maxCount: '9000',
+ size: TDBadgeSize.large,
+ border: TDBadgeBorder.large,
+ ),
+ left: 18,
+ bottom: 18,
+ ),
+ ],
+ ),
+ );
}
@Demo(group: 'badge')
Widget _buildMoreThanMaxCountBadge(BuildContext context) {
- return Container(
- alignment: Alignment.bottomLeft,
- margin: const EdgeInsets.only(left: 16, right: 16, bottom: 8),
- child: SizedBox(
- width: 60,
- height: 50,
- child: Stack(
- children: [
- Positioned(
- left: 0,
- bottom: 0,
- child: Icon(TDIcons.notification),
- ),
- Positioned(
- child: TDBadge(
- TDBadgeType.square,
- count: '888',
- maxCount: '99',
- size: TDBadgeSize.large,
- border: TDBadgeBorder.large,
- ),
- left: 18,
- bottom: 18,
- ),
- ],
+ return const SizedBox(
+ width: 60,
+ height: 50,
+ child: Stack(
+ children: [
+ Positioned(left: 0, bottom: 0, child: Icon(TDIcons.notification)),
+ Positioned(
+ child: TDBadge(
+ TDBadgeType.square,
+ count: '888',
+ maxCount: '99',
+ size: TDBadgeSize.large,
+ border: TDBadgeBorder.large,
+ ),
+ left: 18,
+ bottom: 18,
),
- ));
+ ],
+ ),
+ );
}
}
diff --git a/tdesign-component/example/lib/page/td_bottom_tab_bar_page.dart b/tdesign-component/example/lib/page/td_bottom_tab_bar_page.dart
index 6b0191964..e436c4faf 100644
--- a/tdesign-component/example/lib/page/td_bottom_tab_bar_page.dart
+++ b/tdesign-component/example/lib/page/td_bottom_tab_bar_page.dart
@@ -33,180 +33,47 @@ class _TDBottomTabBarPageState extends State {
_unSelectedIcon = Icon(
TDIcons.app,
size: 20,
- color: TDTheme.of(context).brandNormalColor,
+ color: TDTheme.of(context).textColorPrimary,
);
return ExamplePage(
title: tdTitle(),
desc: '用于在不同功能模块之间进行快速切换,位于页面底部。',
exampleCodeGroup: 'bottomTabBar',
+ padding: const EdgeInsets.only(bottom: 16),
children: [
ExampleModule(
title: '组件类型',
children: [
- ExampleItem(
- ignoreCode: true,
- desc: '纯文本标签栏',
- builder: (context) {
- return Container(
- padding: const EdgeInsets.only(bottom: 16),
- child: CodeWrapper(builder: _textTypeTabBar),
- );
- }),
- ExampleItem(
- ignoreCode: true,
- builder: (context) {
- return Container(
- padding: const EdgeInsets.only(bottom: 16),
- child: CodeWrapper(builder: _textTypeTabBar3tabs),
- );
- }),
- ExampleItem(
- ignoreCode: true,
- builder: (context) {
- return Container(
- padding: const EdgeInsets.only(bottom: 16),
- child: CodeWrapper(builder: _textTypeTabBar4tabs),
- );
- }),
- ExampleItem(
- ignoreCode: true,
- builder: (context) {
- return Container(
- padding: const EdgeInsets.only(bottom: 16),
- child: CodeWrapper(builder: _textTypeTabBar5tabs),
- );
- }),
- ExampleItem(
- ignoreCode: true,
- desc: '图标加文本标签栏',
- builder: (context) {
- return Container(
- padding: const EdgeInsets.only(bottom: 16),
- child: CodeWrapper(builder: _iconTextTypeTabBar),
- );
- }),
- ExampleItem(
- ignoreCode: true,
- builder: (context) {
- return Container(
- padding: const EdgeInsets.only(bottom: 16),
- child: CodeWrapper(builder: _iconTextTypeTabBar3tabs),
- );
- }),
- ExampleItem(
- ignoreCode: true,
- builder: (context) {
- return Container(
- padding: const EdgeInsets.only(bottom: 16),
- child: CodeWrapper(builder: _iconTextTypeTabBar4tabs),
- );
- }),
- ExampleItem(
- ignoreCode: true,
- builder: (context) {
- return Container(
- padding: const EdgeInsets.only(bottom: 16),
- child: CodeWrapper(builder: _iconTextTypeTabBar5tabs),
- );
- }),
- ExampleItem(
- ignoreCode: true,
- desc: '纯图标标签栏',
- builder: (context) {
- return Container(
- padding: const EdgeInsets.only(bottom: 16),
- child: CodeWrapper(builder: _iconTypeTabBar),
- );
- }),
- ExampleItem(
- ignoreCode: true,
- builder: (context) {
- return Container(
- padding: const EdgeInsets.only(bottom: 16),
- child: CodeWrapper(builder: _iconTypeTabBar3tabs),
- );
- }),
- ExampleItem(
- ignoreCode: true,
- builder: (context) {
- return Container(
- padding: const EdgeInsets.only(bottom: 16),
- child: CodeWrapper(builder: _iconTypeTabBar4tabs),
- );
- }),
- ExampleItem(
- ignoreCode: true,
- builder: (context) {
- return Container(
- padding: const EdgeInsets.only(bottom: 16),
- child: CodeWrapper(builder: _iconTypeTabBar5tabs),
- );
- }),
- ExampleItem(
- desc: '双层级文本标签栏',
- builder: _expansionPanelTypeTabBar,
- ),
+ ExampleItem(desc: '纯文本标签栏', builder: _textTypeTabBar),
+ ExampleItem(builder: _textTypeTabBar3tabs),
+ ExampleItem(builder: _textTypeTabBar4tabs),
+ ExampleItem(builder: _textTypeTabBar5tabs),
+ ExampleItem(desc: '图标加文本标签栏', builder: _iconTextTypeTabBar),
+ ExampleItem(builder: _iconTextTypeTabBar3tabs),
+ ExampleItem(builder: _iconTextTypeTabBar4tabs),
+ ExampleItem(builder: _iconTextTypeTabBar5tabs),
+ ExampleItem(desc: '纯图标标签栏', builder: _iconTypeTabBar),
+ ExampleItem(builder: _iconTypeTabBar3tabs),
+ ExampleItem(builder: _iconTypeTabBar4tabs),
+ ExampleItem(builder: _iconTypeTabBar5tabs),
+ ExampleItem(desc: '双层级文本标签栏', builder: _expansionPanelTypeTabBar),
],
),
ExampleModule(title: '组件样式', children: [
- ExampleItem(
- ignoreCode: true,
- desc: '弱选中标签栏',
- builder: (context) {
- return Container(
- padding: const EdgeInsets.only(bottom: 16),
- child: CodeWrapper(builder: _weakSelectTextTabBar),
- );
- }),
- ExampleItem(
- ignoreCode: true,
- builder: (context) {
- return Container(
- padding: const EdgeInsets.only(bottom: 16),
- child: CodeWrapper(builder: _weakSelectIconTabBar),
- );
- }),
- ExampleItem(
- ignoreCode: true,
- builder: (context) {
- return Container(
- padding: const EdgeInsets.only(bottom: 16),
- child: CodeWrapper(builder: _weakSelectIconTextTabBar),
- );
- }),
- ExampleItem(
- desc: '悬浮胶囊标签栏',
- builder: _capsuleTabBar,
- ),
+ ExampleItem(desc: '弱选中标签栏', builder: _weakSelectTextTabBar),
+ ExampleItem(builder: _weakSelectIconTabBar),
+ ExampleItem(builder: _weakSelectIconTextTabBar),
+ ExampleItem(desc: '悬浮胶囊标签栏', builder: _capsuleTabBar),
]),
ExampleModule(title: '组件事件', children: [
- ExampleItem(
- desc: '长按触发',
- builder: _capsuleTabBarOnLongPress,
- ),
+ ExampleItem(desc: '长按触发', builder: _capsuleTabBarOnLongPress),
]),
],
test: [
ExampleItem(desc: '自定义上边线样式', builder: _buildCustomTopStyle),
ExampleItem(desc: '自定义选择的背景颜色', builder: _customBgColor),
- ExampleItem(
- ignoreCode: true,
- desc: '设置文本标签栏背景',
- builder: (context) {
- return CodeWrapper(builder: _customBgTypeTabBar);
- }),
- ExampleItem(
- ignoreCode: true,
- desc: '外部设置tabbar的选中项',
- builder: (context) {
- return CodeWrapper(builder: _setCurrentIndexToTabBar);
- }),
- ExampleItem(
- ignoreCode: true,
- desc: 'icon默认大小底部文字不溢出',
- builder: (context) {
- return CodeWrapper(builder: _iconTextTypeTabBarOverflow);
- }),
+ ExampleItem(desc: '设置文本标签栏背景', builder: _customBgTypeTabBar),
+ ExampleItem(desc: '外部设置tabbar的选中项', builder: _setCurrentIndexToTabBar),
ExampleItem(desc: 'onTap支持重复触发', builder: _allowMultipleTaps),
ExampleItem(desc: '支持水波纹效果', builder: _needInkWellTabBar),
],
@@ -215,432 +82,214 @@ class _TDBottomTabBarPageState extends State {
@Demo(group: 'bottomTabBar')
Widget _textTypeTabBar(BuildContext context) {
- var _currentIndex = 0;
- void _onTapTab(BuildContext context, String tabName, int currentIndex,
- int currentSelectIndex) {
- print('点击了 $tabName, 当前index: $currentIndex, 当前选择index: $currentSelectIndex');
- if (currentIndex == currentSelectIndex) {
- TDToast.showText('$tabName 已经被选中了', context: context);
- return;
- }
- TDToast.showText('点击了 $tabName', context: context);
- }
-
- return TDBottomTabBar(TDBottomTabBarBasicType.text,
- currentIndex: _currentIndex,
- useVerticalDivider: false,
- navigationTabs: [
- TDBottomTabBarTabConfig(
- tabText: '标签',
- onTap: () {
- _onTapTab(context, '标签1', 0, _currentIndex);
- _currentIndex = 0;
- },
- ),
- TDBottomTabBarTabConfig(
- tabText: '标签',
- onTap: () {
- _onTapTab(context, '标签2', 1, _currentIndex);
- _currentIndex = 1;
- },
- ),
- ]);
+ return TDBottomTabBar(
+ TDBottomTabBarBasicType.text,
+ useVerticalDivider: false,
+ navigationTabs: List.generate(2, (index) {
+ final label = '标签${index + 1}';
+ return TDBottomTabBarTabConfig(
+ tabText: label,
+ onTap: () {
+ onTapTab(context, label);
+ },
+ );
+ }),
+ );
}
@Demo(group: 'bottomTabBar')
Widget _textTypeTabBar3tabs(BuildContext context) {
- return TDBottomTabBar(TDBottomTabBarBasicType.text,
- useVerticalDivider: false,
- navigationTabs: [
- TDBottomTabBarTabConfig(
- tabText: '标签',
- onTap: () {
- onTapTab(context, '标签1');
- },
- ),
- TDBottomTabBarTabConfig(
- tabText: '标签',
- onTap: () {
- onTapTab(context, '标签1');
- },
- ),
- TDBottomTabBarTabConfig(
- tabText: '标签',
- onTap: () {
- onTapTab(context, '标签1');
- },
- ),
- ]);
+ return TDBottomTabBar(
+ TDBottomTabBarBasicType.text,
+ useVerticalDivider: false,
+ navigationTabs: List.generate(3, (index) {
+ final label = '标签${index + 1}';
+ return TDBottomTabBarTabConfig(
+ tabText: label,
+ onTap: () {
+ onTapTab(context, label);
+ },
+ );
+ }),
+ );
}
@Demo(group: 'bottomTabBar')
Widget _textTypeTabBar4tabs(BuildContext context) {
- return TDBottomTabBar(TDBottomTabBarBasicType.text,
- useVerticalDivider: false,
- navigationTabs: [
- TDBottomTabBarTabConfig(
- tabText: '标签',
- onTap: () {
- onTapTab(context, '标签1');
- },
- ),
- TDBottomTabBarTabConfig(
- tabText: '标签',
- onTap: () {
- onTapTab(context, '标签1');
- },
- ),
- TDBottomTabBarTabConfig(
- tabText: '标签',
- onTap: () {
- onTapTab(context, '标签1');
- },
- ),
- TDBottomTabBarTabConfig(
- tabText: '标签',
- onTap: () {
- onTapTab(context, '标签1');
- },
- ),
- ]);
+ return TDBottomTabBar(
+ TDBottomTabBarBasicType.text,
+ useVerticalDivider: false,
+ navigationTabs: List.generate(4, (index) {
+ final label = '标签${index + 1}';
+ return TDBottomTabBarTabConfig(
+ tabText: label,
+ onTap: () {
+ onTapTab(context, label);
+ },
+ );
+ }),
+ );
}
@Demo(group: 'bottomTabBar')
Widget _textTypeTabBar5tabs(BuildContext context) {
- return TDBottomTabBar(TDBottomTabBarBasicType.text,
- useVerticalDivider: false,
- navigationTabs: [
- TDBottomTabBarTabConfig(
- tabText: '标签',
- onTap: () {
- onTapTab(context, '标签1');
- },
- ),
- TDBottomTabBarTabConfig(
- tabText: '标签',
- onTap: () {
- onTapTab(context, '标签1');
- },
- ),
- TDBottomTabBarTabConfig(
- tabText: '标签',
- onTap: () {
- onTapTab(context, '标签1');
- },
- ),
- TDBottomTabBarTabConfig(
- tabText: '标签',
- onTap: () {
- onTapTab(context, '标签1');
- },
- ),
- TDBottomTabBarTabConfig(
- tabText: '标签',
- onTap: () {
- onTapTab(context, '标签1');
- },
- ),
- ]);
+ return TDBottomTabBar(
+ TDBottomTabBarBasicType.text,
+ useVerticalDivider: false,
+ navigationTabs: List.generate(5, (index) {
+ final label = '标签${index + 1}';
+ return TDBottomTabBarTabConfig(
+ tabText: label,
+ onTap: () {
+ onTapTab(context, label);
+ },
+ );
+ }),
+ );
}
@Demo(group: 'bottomTabBar')
Widget _iconTextTypeTabBar(BuildContext context) {
- return TDBottomTabBar(TDBottomTabBarBasicType.iconText,
- useVerticalDivider: false,
- navigationTabs: [
- TDBottomTabBarTabConfig(
- tabText: '标签',
- selectedIcon: _selectedIcon,
- unselectedIcon: _unSelectedIcon,
- onTap: () {
- onTapTab(context, '标签1');
- },
- ),
- TDBottomTabBarTabConfig(
- tabText: '标签',
- selectedIcon: _selectedIcon,
- unselectedIcon: _unSelectedIcon,
- onTap: () {
- onTapTab(context, '标签2');
- },
- ),
- ]);
+ return TDBottomTabBar(
+ TDBottomTabBarBasicType.iconText,
+ useVerticalDivider: false,
+ navigationTabs: List.generate(2, (index) {
+ final label = '标签${index + 1}';
+ return TDBottomTabBarTabConfig(
+ tabText: label,
+ selectedIcon: _selectedIcon,
+ unselectedIcon: _unSelectedIcon,
+ onTap: () {
+ onTapTab(context, label);
+ },
+ );
+ }),
+ );
}
@Demo(group: 'bottomTabBar')
Widget _iconTextTypeTabBar3tabs(BuildContext context) {
- return TDBottomTabBar(TDBottomTabBarBasicType.iconText,
- useVerticalDivider: false,
- navigationTabs: [
- TDBottomTabBarTabConfig(
- tabText: '标签',
- selectedIcon: _selectedIcon,
- unselectedIcon: _unSelectedIcon,
- onTap: () {
- onTapTab(context, '标签1');
- },
- ),
- TDBottomTabBarTabConfig(
- tabText: '',
- selectedIcon: _selectedIcon,
- unselectedIcon: _unSelectedIcon,
- onTap: () {
- onTapTab(context, '标签2');
- },
- ),
- TDBottomTabBarTabConfig(
- tabText: '标签',
- selectedIcon: _selectedIcon,
- unselectedIcon: _unSelectedIcon,
- onTap: () {
- onTapTab(context, '标签2');
- },
- ),
- ]);
+ return TDBottomTabBar(
+ TDBottomTabBarBasicType.iconText,
+ useVerticalDivider: false,
+ navigationTabs: List.generate(3, (index) {
+ final label = '标签${index + 1}';
+ return TDBottomTabBarTabConfig(
+ tabText: label,
+ selectedIcon: _selectedIcon,
+ unselectedIcon: _unSelectedIcon,
+ onTap: () {
+ onTapTab(context, label);
+ },
+ );
+ }),
+ );
}
@Demo(group: 'bottomTabBar')
Widget _iconTextTypeTabBar4tabs(BuildContext context) {
- return TDBottomTabBar(TDBottomTabBarBasicType.iconText,
- useVerticalDivider: false,
- navigationTabs: [
- TDBottomTabBarTabConfig(
- tabText: '标签',
- selectedIcon: _selectedIcon,
- unselectedIcon: _unSelectedIcon,
- onTap: () {
- onTapTab(context, '标签1');
- },
- ),
- TDBottomTabBarTabConfig(
- tabText: '标签',
- selectedIcon: _selectedIcon,
- unselectedIcon: _unSelectedIcon,
- onTap: () {
- onTapTab(context, '标签2');
- },
- ),
- TDBottomTabBarTabConfig(
- tabText: '标签',
- selectedIcon: _selectedIcon,
- unselectedIcon: _unSelectedIcon,
- onTap: () {
- onTapTab(context, '标签2');
- },
- ),
- TDBottomTabBarTabConfig(
- tabText: '标签',
- selectedIcon: _selectedIcon,
- unselectedIcon: _unSelectedIcon,
- onTap: () {
- onTapTab(context, '标签2');
- },
- ),
- ]);
+ return TDBottomTabBar(
+ TDBottomTabBarBasicType.iconText,
+ useVerticalDivider: false,
+ navigationTabs: List.generate(4, (index) {
+ final label = '标签${index + 1}';
+ return TDBottomTabBarTabConfig(
+ tabText: label,
+ selectedIcon: _selectedIcon,
+ unselectedIcon: _unSelectedIcon,
+ onTap: () {
+ onTapTab(context, label);
+ },
+ );
+ }),
+ );
}
@Demo(group: 'bottomTabBar')
Widget _iconTextTypeTabBar5tabs(BuildContext context) {
- return TDBottomTabBar(TDBottomTabBarBasicType.iconText,
- useVerticalDivider: false,
- navigationTabs: [
- TDBottomTabBarTabConfig(
- tabText: '标签',
- selectedIcon: _selectedIcon,
- unselectedIcon: _unSelectedIcon,
- onTap: () {
- onTapTab(context, '标签1');
- },
- ),
- TDBottomTabBarTabConfig(
- tabText: '标签',
- selectedIcon: _selectedIcon,
- unselectedIcon: _unSelectedIcon,
- onTap: () {
- onTapTab(context, '标签2');
- },
- ),
- TDBottomTabBarTabConfig(
- tabText: '标签',
- selectedIcon: _selectedIcon,
- unselectedIcon: _unSelectedIcon,
- onTap: () {
- onTapTab(context, '标签2');
- },
- ),
- TDBottomTabBarTabConfig(
- tabText: '标签',
- selectedIcon: _selectedIcon,
- unselectedIcon: _unSelectedIcon,
- onTap: () {
- onTapTab(context, '标签2');
- },
- ),
- TDBottomTabBarTabConfig(
- tabText: '标签',
- selectedIcon: _selectedIcon,
- unselectedIcon: _unSelectedIcon,
- onTap: () {
- onTapTab(context, '标签2');
- },
- ),
- ]);
- }
-
- @Demo(group: 'bottomTabBar')
- Widget _iconTextTypeTabBarOverflow(BuildContext context) {
- final selectedIcon = Icon(
- TDIcons.app,
- color: TDTheme.of(context).brandNormalColor,
- );
- final unSelectedIcon = Icon(
- TDIcons.app,
- color: TDTheme.of(context).brandNormalColor,
+ return TDBottomTabBar(
+ TDBottomTabBarBasicType.iconText,
+ useVerticalDivider: false,
+ navigationTabs: List.generate(5, (index) {
+ final label = '标签${index + 1}';
+ return TDBottomTabBarTabConfig(
+ tabText: label,
+ selectedIcon: _selectedIcon,
+ unselectedIcon: _unSelectedIcon,
+ onTap: () {
+ onTapTab(context, label);
+ },
+ );
+ }),
);
- return TDBottomTabBar(TDBottomTabBarBasicType.iconText,
- useVerticalDivider: false,
- navigationTabs: [
- TDBottomTabBarTabConfig(
- tabText: '标签',
- selectedIcon: selectedIcon,
- unselectedIcon: unSelectedIcon,
- onTap: () {
- onTapTab(context, '标签1');
- },
- ),
- TDBottomTabBarTabConfig(
- tabText: '标签',
- selectedIcon: selectedIcon,
- unselectedIcon: unSelectedIcon,
- onTap: () {
- onTapTab(context, '标签2');
- },
- ),
- TDBottomTabBarTabConfig(
- tabText: '标签',
- selectedIcon: selectedIcon,
- unselectedIcon: unSelectedIcon,
- onTap: () {
- onTapTab(context, '标签3');
- },
- ),
- ]);
}
@Demo(group: 'bottomTabBar')
Widget _iconTypeTabBar(BuildContext context) {
- return TDBottomTabBar(TDBottomTabBarBasicType.icon,
- useVerticalDivider: true,
- navigationTabs: [
- TDBottomTabBarTabConfig(
- selectedIcon: _selectedIcon,
- unselectedIcon: _unSelectedIcon,
- onTap: () {
- onTapTab(context, '标签1');
- }),
- TDBottomTabBarTabConfig(
- selectedIcon: _selectedIcon,
- unselectedIcon: _unSelectedIcon,
- onTap: () {
- onTapTab(context, '标签2');
- })
- ]);
+ return TDBottomTabBar(
+ TDBottomTabBarBasicType.icon,
+ useVerticalDivider: true,
+ navigationTabs: List.generate(2, (index) {
+ final label = '标签${index + 1}';
+ return TDBottomTabBarTabConfig(
+ selectedIcon: _selectedIcon,
+ unselectedIcon: _unSelectedIcon,
+ onTap: () {
+ onTapTab(context, label);
+ });
+ }),
+ );
}
@Demo(group: 'bottomTabBar')
Widget _iconTypeTabBar3tabs(BuildContext context) {
- return TDBottomTabBar(TDBottomTabBarBasicType.icon,
- useVerticalDivider: true,
- navigationTabs: [
- TDBottomTabBarTabConfig(
- selectedIcon: _selectedIcon,
- unselectedIcon: _unSelectedIcon,
- onTap: () {
- onTapTab(context, '标签1');
- }),
- TDBottomTabBarTabConfig(
- selectedIcon: _selectedIcon,
- unselectedIcon: _unSelectedIcon,
- onTap: () {
- onTapTab(context, '标签2');
- }),
- TDBottomTabBarTabConfig(
- selectedIcon: _selectedIcon,
- unselectedIcon: _unSelectedIcon,
- onTap: () {
- onTapTab(context, '标签2');
- }),
- ]);
+ return TDBottomTabBar(
+ TDBottomTabBarBasicType.icon,
+ useVerticalDivider: true,
+ navigationTabs: List.generate(3, (index) {
+ final label = '标签${index + 1}';
+ return TDBottomTabBarTabConfig(
+ selectedIcon: _selectedIcon,
+ unselectedIcon: _unSelectedIcon,
+ onTap: () {
+ onTapTab(context, label);
+ });
+ }),
+ );
}
@Demo(group: 'bottomTabBar')
Widget _iconTypeTabBar4tabs(BuildContext context) {
- return TDBottomTabBar(TDBottomTabBarBasicType.icon,
- useVerticalDivider: true,
- navigationTabs: [
- TDBottomTabBarTabConfig(
- selectedIcon: _selectedIcon,
- unselectedIcon: _unSelectedIcon,
- onTap: () {
- onTapTab(context, '标签1');
- }),
- TDBottomTabBarTabConfig(
- selectedIcon: _selectedIcon,
- unselectedIcon: _unSelectedIcon,
- onTap: () {
- onTapTab(context, '标签2');
- }),
- TDBottomTabBarTabConfig(
- selectedIcon: _selectedIcon,
- unselectedIcon: _unSelectedIcon,
- onTap: () {
- onTapTab(context, '标签2');
- }),
- TDBottomTabBarTabConfig(
- selectedIcon: _selectedIcon,
- unselectedIcon: _unSelectedIcon,
- onTap: () {
- onTapTab(context, '标签2');
- }),
- ]);
+ return TDBottomTabBar(
+ TDBottomTabBarBasicType.icon,
+ useVerticalDivider: true,
+ navigationTabs: List.generate(4, (index) {
+ final label = '标签${index + 1}';
+ return TDBottomTabBarTabConfig(
+ selectedIcon: _selectedIcon,
+ unselectedIcon: _unSelectedIcon,
+ onTap: () {
+ onTapTab(context, label);
+ });
+ }),
+ );
}
@Demo(group: 'bottomTabBar')
Widget _iconTypeTabBar5tabs(BuildContext context) {
- return TDBottomTabBar(TDBottomTabBarBasicType.icon,
- useVerticalDivider: true,
- navigationTabs: [
- TDBottomTabBarTabConfig(
- selectedIcon: _selectedIcon,
- unselectedIcon: _unSelectedIcon,
- onTap: () {
- onTapTab(context, '标签1');
- }),
- TDBottomTabBarTabConfig(
- selectedIcon: _selectedIcon,
- unselectedIcon: _unSelectedIcon,
- onTap: () {
- onTapTab(context, '标签2');
- }),
- TDBottomTabBarTabConfig(
- selectedIcon: _selectedIcon,
- unselectedIcon: _unSelectedIcon,
- onTap: () {
- onTapTab(context, '标签2');
- }),
- TDBottomTabBarTabConfig(
- selectedIcon: _selectedIcon,
- unselectedIcon: _unSelectedIcon,
- onTap: () {
- onTapTab(context, '标签2');
- }),
- TDBottomTabBarTabConfig(
- selectedIcon: _selectedIcon,
- unselectedIcon: _unSelectedIcon,
- onTap: () {
- onTapTab(context, '标签2');
- }),
- ]);
+ return TDBottomTabBar(
+ TDBottomTabBarBasicType.icon,
+ useVerticalDivider: true,
+ navigationTabs: List.generate(5, (index) {
+ final label = '标签${index + 1}';
+ return TDBottomTabBarTabConfig(
+ selectedIcon: _selectedIcon,
+ unselectedIcon: _unSelectedIcon,
+ onTap: () {
+ onTapTab(context, label);
+ });
+ }),
+ );
}
@Demo(group: 'bottomTabBar')
@@ -664,6 +313,7 @@ class _TDBottomTabBarPageState extends State {
TDBottomTabBarTabConfig(
tabText: '展开项',
onTap: () {
+ // 不触发点击事件
onTapTab(context, '展开项');
},
popUpButtonConfig: TDBottomTabBarPopUpBtnConfig(
@@ -672,22 +322,15 @@ class _TDBottomTabBarPageState extends State {
arrowWidth: 16,
arrowHeight: 8,
),
- items: [
- '展开项一',
- '展开项二',
- '展开项三',
- ]
+ items: ['展开项一', '展开项二', '展开项三']
.reversed
.map((e) => PopUpMenuItem(
value: e,
- itemWidget: SizedBox(
- //height: 30,
- child: Text(
- e,
- style: TextStyle(
- color: TDTheme.of(context).fontGyColor1,
- fontSize: 16),
- ),
+ itemWidget: Text(
+ e,
+ style: TextStyle(
+ color: TDTheme.of(context).textColorPrimary,
+ fontSize: 16),
),
))
.toList(),
@@ -817,84 +460,44 @@ class _TDBottomTabBarPageState extends State {
@Demo(group: 'bottomTabBar')
Widget _capsuleTabBar(BuildContext context) {
- return TDBottomTabBar(
- TDBottomTabBarBasicType.iconText,
- componentType: TDBottomTabBarComponentType.label,
- outlineType: TDBottomTabBarOutlineType.capsule,
- useVerticalDivider: true,
- navigationTabs: [
- TDBottomTabBarTabConfig(
- selectedIcon: _selectedIcon,
- unselectedIcon: _unSelectedIcon,
- tabText: '标签',
- onTap: () {
- onTapTab(context, '标签1');
- },
- ),
- TDBottomTabBarTabConfig(
- selectedIcon: _selectedIcon,
- unselectedIcon: _unSelectedIcon,
- tabText: '标签',
- onTap: () {
- onTapTab(context, '标签2');
- },
- ),
- TDBottomTabBarTabConfig(
- selectedIcon: _selectedIcon,
- unselectedIcon: _unSelectedIcon,
- tabText: '标签',
- onTap: () {
- onTapTab(context, '标签3');
- },
- ),
- ],
- );
+ return TDBottomTabBar(TDBottomTabBarBasicType.iconText,
+ componentType: TDBottomTabBarComponentType.label,
+ outlineType: TDBottomTabBarOutlineType.capsule,
+ useVerticalDivider: true,
+ navigationTabs: List.generate(3, (index) {
+ final label = '标签${index + 1}';
+ return TDBottomTabBarTabConfig(
+ selectedIcon: _selectedIcon,
+ unselectedIcon: _unSelectedIcon,
+ tabText: label,
+ onTap: () {
+ onTapTab(context, label);
+ },
+ );
+ }));
}
@Demo(group: 'bottomTabBar')
Widget _capsuleTabBarOnLongPress(BuildContext context) {
- return TDBottomTabBar(
- TDBottomTabBarBasicType.iconText,
- componentType: TDBottomTabBarComponentType.label,
- outlineType: TDBottomTabBarOutlineType.capsule,
- useVerticalDivider: true,
- navigationTabs: [
- TDBottomTabBarTabConfig(
- selectedIcon: _selectedIcon,
- unselectedIcon: _unSelectedIcon,
- tabText: '标签',
- onTap: () {
- onTapTab(context, '标签1');
- },
- onLongPress: () {
- print('长按了标签1');
- TDToast.showText('长按了标签1', context: context);
- },
- ),
- TDBottomTabBarTabConfig(
- selectedIcon: _selectedIcon,
- unselectedIcon: _unSelectedIcon,
- tabText: '标签',
- onTap: () {
- onTapTab(context, '标签2');
- },
- onLongPress: () {
- TDToast.showText('长按了标签2', context: context);
- },
- ),
- TDBottomTabBarTabConfig(
- selectedIcon: _selectedIcon,
- unselectedIcon: _unSelectedIcon,
- tabText: '标签',
- onTap: () {
- onTapTab(context, '标签3');
- },
- onLongPress: () {
- TDToast.showText('长按了标签3', context: context);
- },
- ),
- ],
- );
+ return TDBottomTabBar(TDBottomTabBarBasicType.iconText,
+ componentType: TDBottomTabBarComponentType.label,
+ outlineType: TDBottomTabBarOutlineType.capsule,
+ useVerticalDivider: true,
+ navigationTabs: List.generate(3, (index) {
+ final label = '标签${index + 1}';
+ return TDBottomTabBarTabConfig(
+ selectedIcon: _selectedIcon,
+ unselectedIcon: _unSelectedIcon,
+ tabText: label,
+ onTap: () {
+ onTapTab(context, label);
+ },
+ onLongPress: () {
+ print('长按了${label}');
+ TDToast.showText('长按了 $label', context: context);
+ },
+ );
+ }));
}
@Demo(group: 'bottomTabBar')
@@ -945,77 +548,47 @@ class _TDBottomTabBarPageState extends State {
return TDBottomTabBar(TDBottomTabBarBasicType.iconText,
useVerticalDivider: false,
selectedBgColor: TDTheme.of(context).errorColor3,
- unselectedBgColor: TDTheme.of(context).grayColor3,
- navigationTabs: [
- TDBottomTabBarTabConfig(
- tabText: '标签',
- selectedIcon: _selectedIcon,
- unselectedIcon: _unSelectedIcon,
- onTap: () {
- onTapTab(context, '标签1');
- },
- ),
- TDBottomTabBarTabConfig(
- tabText: '标签',
- selectedIcon: _selectedIcon,
- unselectedIcon: _unSelectedIcon,
- onTap: () {
- onTapTab(context, '标签2');
- },
- ),
- TDBottomTabBarTabConfig(
- tabText: '标签',
- selectedIcon: _selectedIcon,
- unselectedIcon: _unSelectedIcon,
- onTap: () {
- onTapTab(context, '标签2');
- },
- ),
- TDBottomTabBarTabConfig(
- tabText: '标签',
+ unselectedBgColor: TDTheme.of(context).bgColorSecondaryContainer,
+ navigationTabs: List.generate(5, (index) {
+ final label = '标签${index + 1}';
+ return TDBottomTabBarTabConfig(
+ tabText: label,
selectedIcon: _selectedIcon,
unselectedIcon: _unSelectedIcon,
onTap: () {
- onTapTab(context, '标签2');
+ onTapTab(context, label);
},
- ),
- TDBottomTabBarTabConfig(
- tabText: '标签',
- selectedIcon: _selectedIcon,
- unselectedIcon: _unSelectedIcon,
- onTap: () {
- onTapTab(context, '标签2');
- },
- ),
- ]);
+ );
+ }));
}
@Demo(group: 'bottomTabBar')
Widget _customBgTypeTabBar(BuildContext context) {
return TDBottomTabBar(TDBottomTabBarBasicType.text,
- backgroundColor: TDTheme.of(context).successColor6,
- selectedBgColor: TDTheme.of(context).errorColor1,
- unselectedBgColor: TDTheme.of(context).brandColor1,
+ backgroundColor: TDTheme.of(context).successNormalColor,
+ selectedBgColor: TDTheme.of(context).errorLightColor,
+ unselectedBgColor: TDTheme.of(context).brandLightColor,
useVerticalDivider: false,
navigationTabs: [
TDBottomTabBarTabConfig(
- tabText: '标签',
+ tabText: '标签1',
onTap: () {
onTapTab(context, '标签1');
},
),
TDBottomTabBarTabConfig(
- tabText: '标签',
+ tabText: '标签2',
unselectTabTextStyle:
- TextStyle(color: TDTheme.of(context).fontGyColor1),
+ TextStyle(color: TDTheme.of(context).textColorBrand),
onTap: () {
- onTapTab(context, '标签1');
+ onTapTab(context, '标签2');
},
),
]);
}
var currentIndex = 0;
+
@Demo(group: 'bottomTabBar')
Widget _setCurrentIndexToTabBar(BuildContext context) {
return SizedBox(
@@ -1026,16 +599,11 @@ class _TDBottomTabBarPageState extends State {
Expanded(
child: PageView(
children: const [
- Center(
- child: TDText('页面1,手指左滑查看页面2'),
- ),
- Center(
- child: TDText('页面2,手指右滑查看页面1'),
- ),
+ Center(child: TDText('页面1,手指左滑查看页面2')),
+ Center(child: TDText('页面2,手指右滑查看页面1')),
],
onPageChanged: (index) {
setState(() {
- // 修改选择index
currentIndex = index;
});
},
@@ -1045,20 +613,15 @@ class _TDBottomTabBarPageState extends State {
currentIndex: currentIndex,
TDBottomTabBarBasicType.icon,
useVerticalDivider: true,
- navigationTabs: [
- TDBottomTabBarTabConfig(
+ navigationTabs: List.generate(2, (index) {
+ final label = '标签${index + 1}';
+ return TDBottomTabBarTabConfig(
selectedIcon: _selectedIcon,
unselectedIcon: _unSelectedIcon,
onTap: () {
- onTapTab(context, '标签1');
- }),
- TDBottomTabBarTabConfig(
- selectedIcon: _selectedIcon,
- unselectedIcon: _unSelectedIcon,
- onTap: () {
- onTapTab(context, '标签2');
- })
- ])
+ onTapTab(context, label);
+ });
+ }))
],
),
);
@@ -1066,21 +629,23 @@ class _TDBottomTabBarPageState extends State {
@Demo(group: 'bottomTabBar')
Widget _allowMultipleTaps(BuildContext context) {
- return TDBottomTabBar(TDBottomTabBarBasicType.text, useVerticalDivider: false, navigationTabs: [
- TDBottomTabBarTabConfig(
- allowMultipleTaps: true,
- tabText: '支持重复点击',
- onTap: () {
- onTapTab(context, '标签1');
- },
- ),
- TDBottomTabBarTabConfig(
- tabText: '不支持重复点击',
- onTap: () {
- onTapTab(context, '标签2');
- },
- ),
- ]);
+ return TDBottomTabBar(TDBottomTabBarBasicType.text,
+ useVerticalDivider: false,
+ navigationTabs: [
+ TDBottomTabBarTabConfig(
+ allowMultipleTaps: true,
+ tabText: '支持重复点击',
+ onTap: () {
+ onTapTab(context, '标签1');
+ },
+ ),
+ TDBottomTabBarTabConfig(
+ tabText: '不支持重复点击',
+ onTap: () {
+ onTapTab(context, '标签2');
+ },
+ ),
+ ]);
}
@Demo(group: 'bottomTabBar')
diff --git a/tdesign-component/example/lib/page/td_button_page.dart b/tdesign-component/example/lib/page/td_button_page.dart
index e38f41e5d..4d5f25ac8 100644
--- a/tdesign-component/example/lib/page/td_button_page.dart
+++ b/tdesign-component/example/lib/page/td_button_page.dart
@@ -21,390 +21,248 @@ class _TDButtonPageState extends State {
@override
Widget build(BuildContext context) {
- return Container(
- color: TDTheme.of(context).grayColor2,
- child: ExamplePage(
- title: tdTitle(),
- desc: '用于开启一个闭环的操作任务,如“删除”对象、“购买”商品等。',
- exampleCodeGroup: 'button',
- // padding: const EdgeInsets.only(top: 8, bottom: 8, ),
- children: [
- ExampleModule(title: '组件类型', children: [
- ExampleItem(
- ignoreCode: true,
- desc: '基础按钮',
- builder: (context) {
- return Container(
- alignment: Alignment.topLeft,
- padding: const EdgeInsets.only(left: 8),
- child: Wrap(
- children: [
- Container(
- margin: const EdgeInsets.all(8),
- child: CodeWrapper(
- builder: _buildPrimaryFillButton,
- methodName: '_buildPrimaryFillButton',
- ),
- ),
- Container(
- margin: const EdgeInsets.all(8),
- child: CodeWrapper(
- builder: _buildLightFillButton,
- methodName: '_buildLightFillButton',
- ),
- ),
- Container(
- margin: const EdgeInsets.all(8),
- child:
- CodeWrapper(builder: _buildDefaultFillButton),
- ),
- Container(
- margin: const EdgeInsets.all(8),
- child:
- CodeWrapper(builder: _buildPrimaryStrokeButton),
- ),
- Container(
- margin: const EdgeInsets.all(8),
- child:
- CodeWrapper(builder: _buildPrimaryTextButton),
- ),
- ],
- ),
- );
- }),
- ExampleItem(
- ignoreCode: true,
- desc: '图标按钮',
- center: false,
- builder: (context) {
- return Container(
- padding: const EdgeInsets.only(left: 8, right: 8),
- child: Wrap(
- children: [
- Container(
- margin: const EdgeInsets.all(8),
- child:
- CodeWrapper(builder: _buildRectangleIconButton),
- ),
- Container(
- margin: const EdgeInsets.all(8),
- child: CodeWrapper(builder: _buildSquareIconButton),
- ),
- Container(
- margin: const EdgeInsets.all(8),
- child:
- CodeWrapper(builder: _buildLoadingIconButton),
- )
- ],
- ),
- );
- }),
- ExampleItem(
- ignoreCode: true,
- desc: '幽灵按钮',
- builder: (context) {
- return Container(
- alignment: Alignment.topLeft,
- color: TDTheme.of(context).grayColor14,
- padding: const EdgeInsets.only(left: 8, right: 8),
- child: Wrap(
- children: [
- Container(
- margin: const EdgeInsets.all(8),
- child:
- CodeWrapper(builder: _buildPrimaryGhostButton),
- ),
- Container(
- margin: const EdgeInsets.all(8),
- child:
- CodeWrapper(builder: _buildDangerGhostButton),
- ),
- Container(
- margin: const EdgeInsets.all(8),
- child:
- CodeWrapper(builder: _buildDefaultGhostButton),
- ),
- ],
- ),
- );
- }),
- ExampleItem(
- ignoreCode: true,
- desc: '组合按钮',
- builder: (_) =>
- CodeWrapper(builder: _buildCombinationButtons)),
- ExampleItem(desc: '通栏按钮', builder: _buildFilledFillButton),
- ]),
- ExampleModule(title: '组件状态', children: [
- ExampleItem(
- ignoreCode: true,
- desc: '按钮禁用状态',
- builder: (context) {
- return Container(
- alignment: Alignment.topLeft,
- padding: const EdgeInsets.only(left: 8),
- child: Wrap(
- children: [
- Container(
- margin: const EdgeInsets.all(8),
- child: CodeWrapper(
- builder: _buildDisablePrimaryFillButton),
- ),
- Container(
- margin: const EdgeInsets.all(8),
- child: CodeWrapper(
- builder: _buildDisableLightFillButton),
- ),
- Container(
- margin: const EdgeInsets.all(8),
- child: CodeWrapper(
- builder: _buildDisableDefaultFillButton),
- ),
- Container(
- margin: const EdgeInsets.all(8),
- child: CodeWrapper(
- builder: _buildDisablePrimaryStrokeButton),
- ),
- Container(
- margin: const EdgeInsets.all(8),
- child: CodeWrapper(
- builder: _buildDisablePrimaryTextButton),
- ),
- ],
- ),
- );
- }),
- ]),
- ExampleModule(title: '组件主题', children: [
- ExampleItem(
- ignoreCode: true,
- desc: '按钮尺寸',
- builder: (context) {
- return Container(
- alignment: Alignment.topLeft,
- padding: const EdgeInsets.only(left: 10),
- child: Wrap(
- children: [
- Container(
- margin: const EdgeInsets.all(6),
- child: CodeWrapper(builder: _buildLargeButton),
- ),
- Container(
- margin: const EdgeInsets.all(6),
- child: CodeWrapper(builder: _buildMediumButton),
- ),
- Container(
- margin: const EdgeInsets.all(6),
- child: CodeWrapper(builder: _buildSmallButton),
- ),
- Container(
- margin: const EdgeInsets.all(6),
- child: CodeWrapper(builder: _buildExtraSmallButton),
- ),
- ],
+ return ExamplePage(
+ title: tdTitle(),
+ desc: '用于开启一个闭环的操作任务,如“删除”对象、“购买”商品等。',
+ exampleCodeGroup: 'button',
+ children: [
+ ExampleModule(title: '组件类型', children: [
+ ExampleItem(
+ ignoreCode: true,
+ desc: '基础按钮',
+ builder: (context) {
+ return Container(
+ alignment: Alignment.topLeft,
+ padding: const EdgeInsets.only(left: 16),
+ child: Wrap(
+ spacing: 16, // 主轴方向间距
+ runSpacing: 16, // 交叉轴方向间距
+ children: [
+ CodeWrapper(
+ builder: _buildPrimaryFillButton,
+ methodName: '_buildPrimaryFillButton',
),
- );
- }),
- ExampleItem(
- ignoreCode: true,
- desc: '按钮形状',
- builder: (context) {
- return Container(
- alignment: Alignment.topLeft,
- child: Wrap(
- children: [
- Container(
- margin: const EdgeInsets.only(
- left: 16, right: 6, top: 6),
- child: CodeWrapper(
- builder: _buildPrimaryFillButton,
- ),
- ),
- Container(
- margin: const EdgeInsets.all(6),
- child: CodeWrapper(builder: _buildSquareIconButton),
- ),
- Container(
- margin: const EdgeInsets.all(6),
- child: CodeWrapper(builder: _buildRoundButton),
- ),
- Container(
- margin: const EdgeInsets.only(
- right: 16, left: 6, top: 6),
- child: CodeWrapper(builder: _buildCircleButton),
- ),
- Container(
- margin: const EdgeInsets.only(top: 10),
- child: CodeWrapper(builder: _buildFilledButton),
- )
- ],
+ CodeWrapper(
+ builder: _buildLightFillButton,
+ methodName: '_buildLightFillButton',
),
- );
- }),
- ExampleItem(
- ignoreCode: true,
- desc: '按钮主题',
- builder: (context) {
- return Container(
- alignment: Alignment.topLeft,
- padding: const EdgeInsets.only(left: 8),
- child: Wrap(
- children: [
- /// 默认主题
- Container(
- margin: const EdgeInsets.all(8),
- child:
- CodeWrapper(builder: _buildDefaultFillButton),
- ),
- Container(
- margin: const EdgeInsets.all(8),
- child:
- CodeWrapper(builder: _buildDefaultStrokeButton),
- ),
- Container(
- margin: const EdgeInsets.all(8),
- child:
- CodeWrapper(builder: _buildDefaultTextButton),
- ),
+ CodeWrapper(builder: _buildDefaultFillButton),
+ CodeWrapper(builder: _buildPrimaryStrokeButton),
+ CodeWrapper(builder: _buildPrimaryTextButton),
+ ],
+ ),
+ );
+ }),
+ ExampleItem(
+ ignoreCode: true,
+ desc: '图标按钮',
+ center: false,
+ builder: (context) {
+ return Container(
+ padding: const EdgeInsets.only(left: 16),
+ child: Wrap(
+ spacing: 16, // 主轴方向间距
+ runSpacing: 16, // 交叉轴方向间距
+ children: [
+ CodeWrapper(builder: _buildRectangleIconButton),
+ CodeWrapper(builder: _buildSquareIconButton),
+ CodeWrapper(builder: _buildLoadingIconButton)
+ ],
+ ),
+ );
+ }),
+ ExampleItem(
+ ignoreCode: true,
+ desc: '幽灵按钮',
+ builder: (context) {
+ return Container(
+ padding: const EdgeInsets.symmetric(vertical: 16),
+ alignment: Alignment.center,
+ color: TDTheme.of(context).grayColor14,
+ child: Wrap(
+ spacing: 16, // 主轴方向间距
+ runSpacing: 16, // 交叉轴方向间距
+ children: [
+ CodeWrapper(builder: _buildPrimaryGhostButton),
+ CodeWrapper(builder: _buildDangerGhostButton),
+ CodeWrapper(builder: _buildDefaultGhostButton),
+ ],
+ ),
+ );
+ }),
+ ExampleItem(
+ ignoreCode: true,
+ desc: '组合按钮',
+ builder: (_) => CodeWrapper(builder: _buildCombinationButtons)),
+ ExampleItem(desc: '通栏按钮', builder: _buildFilledFillButton),
+ ]),
+ ExampleModule(title: '组件状态', children: [
+ ExampleItem(
+ ignoreCode: true,
+ desc: '按钮禁用状态',
+ builder: (context) {
+ return Wrap(
+ alignment: WrapAlignment.center,
+ spacing: 16, // 主轴方向间距
+ runSpacing: 16, // 交叉轴方向间距
+ children: [
+ CodeWrapper(builder: _buildDisablePrimaryFillButton),
+ CodeWrapper(builder: _buildDisableLightFillButton),
+ CodeWrapper(builder: _buildDisableDefaultFillButton),
+ CodeWrapper(builder: _buildDisablePrimaryStrokeButton),
+ CodeWrapper(builder: _buildDisablePrimaryTextButton),
+ ],
+ );
+ }),
+ ]),
+ ExampleModule(title: '组件主题', children: [
+ ExampleItem(
+ ignoreCode: true,
+ desc: '按钮尺寸',
+ builder: (context) {
+ return Wrap(
+ alignment: WrapAlignment.center,
+ spacing: 16, // 主轴方向间距
+ runSpacing: 16, // 交叉轴方向间距
+ children: [
+ CodeWrapper(builder: _buildLargeButton),
+ CodeWrapper(builder: _buildMediumButton),
+ CodeWrapper(builder: _buildSmallButton),
+ CodeWrapper(builder: _buildExtraSmallButton),
+ ],
+ );
+ }),
+ ExampleItem(
+ ignoreCode: true,
+ desc: '按钮形状',
+ builder: (context) {
+ return Wrap(
+ alignment: WrapAlignment.center,
+ spacing: 16, // 主轴方向间距
+ runSpacing: 16, // 交叉轴方向间距
+ children: [
+ CodeWrapper(
+ builder: _buildPrimaryFillButton,
+ ),
+ CodeWrapper(builder: _buildSquareIconButton),
+ CodeWrapper(builder: _buildRoundButton),
+ CodeWrapper(builder: _buildCircleButton),
+ CodeWrapper(builder: _buildFilledButton)
+ ],
+ );
+ }),
+ ExampleItem(
+ ignoreCode: true,
+ desc: '按钮主题',
+ builder: (context) {
+ return Wrap(
+ alignment: WrapAlignment.center,
+ spacing: 16, // 主轴方向间距
+ runSpacing: 16, // 交叉轴方向间距
+ children: [
+ /// 默认主题
+ CodeWrapper(builder: _buildDefaultFillButton),
+ CodeWrapper(builder: _buildDefaultStrokeButton),
+ CodeWrapper(builder: _buildDefaultTextButton),
- /// primary主题
- Container(
- margin: const EdgeInsets.all(8),
- child: CodeWrapper(
- builder: _buildPrimaryFillButton,
- ),
- ),
- Container(
- margin: const EdgeInsets.all(8),
- child:
- CodeWrapper(builder: _buildPrimaryStrokeButton),
- ),
- Container(
- margin: const EdgeInsets.all(8),
- child:
- CodeWrapper(builder: _buildPrimaryTextButton),
- ),
+ /// primary主题
+ CodeWrapper(
+ builder: _buildPrimaryFillButton,
+ ),
+ CodeWrapper(builder: _buildPrimaryStrokeButton),
+ CodeWrapper(builder: _buildPrimaryTextButton),
- /// danger主题
- Container(
- margin: const EdgeInsets.all(8),
- child: CodeWrapper(builder: _buildDangerFillButton),
- ),
- Container(
- margin: const EdgeInsets.all(8),
- child:
- CodeWrapper(builder: _buildDangerStrokeButton),
- ),
- Container(
- margin: const EdgeInsets.all(8),
- child: CodeWrapper(builder: _buildDangerTextButton),
- ),
+ /// danger主题
+ CodeWrapper(builder: _buildDangerFillButton),
+ CodeWrapper(builder: _buildDangerStrokeButton),
+ CodeWrapper(builder: _buildDangerTextButton),
- /// light主题
- Container(
- margin: const EdgeInsets.all(8),
- child: CodeWrapper(builder: _buildLightFillButton),
- ),
- Container(
- margin: const EdgeInsets.all(8),
- child:
- CodeWrapper(builder: _buildLightStrokeButton),
- ),
- Container(
- margin: const EdgeInsets.all(8),
- child: CodeWrapper(
- builder: _buildLightTextButton,
- ),
- ),
- ],
- ),
- );
- }),
- ]),
- ],
- test: [
- ExampleItem(
- ignoreCode: true,
- desc: '测试child',
- builder: (context) {
- return CodeWrapper(builder: _buildChildTestButton);
- }),
- ExampleItem(
- ignoreCode: true,
- desc: '通栏按钮测试',
- builder: (context) {
- return Container(
- color: Colors.grey,
- padding: const EdgeInsets.only(top: 16, bottom: 16),
- child: Column(
- mainAxisSize: MainAxisSize.min,
- children: const [
- TDButton(
- isBlock: true,
- text: '填充block按钮',
- theme: TDButtonTheme.primary,
- ),
- SizedBox(
- height: 16,
- ),
- TDButton(
- isBlock: true,
- text: '描边block按钮',
- type: TDButtonType.outline,
- theme: TDButtonTheme.primary,
- ),
- SizedBox(
- height: 16,
- ),
- TDButton(
- isBlock: true,
- text: '文字block按钮',
- type: TDButtonType.text,
- theme: TDButtonTheme.primary,
- ),
- SizedBox(
- height: 16,
- ),
- TDButton(
- isBlock: true,
- text: '幽灵block按钮',
- type: TDButtonType.ghost,
- theme: TDButtonTheme.primary,
- ),
- ],
+ /// light主题
+ CodeWrapper(builder: _buildLightFillButton),
+ CodeWrapper(builder: _buildLightStrokeButton),
+ CodeWrapper(
+ builder: _buildLightTextButton,
),
- );
- }),
- ExampleItem(
- ignoreCode: true,
- desc: '各种按钮状态测试',
- builder: _buildStatusDisplay),
- ExampleItem(
- ignoreCode: true,
- desc: '按钮中路由跳转',
- builder: (context) {
- return TDButton(
- text: '点击跳转',
- size: TDButtonSize.large,
- // type: TDButtonType.text,
- shape: TDButtonShape.rectangle,
- onTap: () async {
- var result = await Navigator.of(context)
- .pushNamedAndRemoveUntil('divider', (router) {
- return true;
- });
- print('pushNamedAndRemoveUntil result: $result');
- },
- );
- }),
- ExampleItem(
- ignoreCode: true,
- desc: '图标在文字右侧',
- builder: (context) {
- return CodeWrapper(builder: _buildRightIconButton);
- }),
- ],
- ));
+ ],
+ );
+ }),
+ ]),
+ ],
+ test: [
+ ExampleItem(
+ ignoreCode: true,
+ desc: '测试child',
+ builder: (context) {
+ return CodeWrapper(builder: _buildChildTestButton);
+ }),
+ ExampleItem(
+ ignoreCode: true,
+ desc: '通栏按钮测试',
+ builder: (context) {
+ return Container(
+ color: TDTheme.of(context).bgColorContainer,
+ padding: const EdgeInsets.only(top: 16, bottom: 16),
+ child: const Column(
+ mainAxisSize: MainAxisSize.min,
+ // spacing: 16,
+ children: [
+ TDButton(
+ isBlock: true,
+ text: '填充block按钮',
+ theme: TDButtonTheme.primary,
+ ),
+ SizedBox(height: 16),
+ TDButton(
+ isBlock: true,
+ text: '描边block按钮',
+ type: TDButtonType.outline,
+ theme: TDButtonTheme.primary,
+ ),
+ SizedBox(height: 16),
+ TDButton(
+ isBlock: true,
+ text: '文字block按钮',
+ type: TDButtonType.text,
+ theme: TDButtonTheme.primary,
+ ),
+ SizedBox(height: 16),
+ TDButton(
+ isBlock: true,
+ text: '幽灵block按钮',
+ type: TDButtonType.ghost,
+ theme: TDButtonTheme.primary,
+ ),
+ ],
+ ),
+ );
+ }),
+ ExampleItem(
+ ignoreCode: true, desc: '各种按钮状态测试', builder: _buildStatusDisplay),
+ ExampleItem(
+ ignoreCode: true,
+ desc: '按钮中路由跳转',
+ builder: (context) {
+ return TDButton(
+ text: '点击跳转',
+ size: TDButtonSize.large,
+ shape: TDButtonShape.rectangle,
+ onTap: () async {
+ var result = await Navigator.of(context)
+ .pushNamedAndRemoveUntil('divider', (router) {
+ return true;
+ });
+ print('pushNamedAndRemoveUntil result: $result');
+ },
+ );
+ }),
+ ExampleItem(
+ ignoreCode: true,
+ desc: '图标在文字右侧',
+ builder: (context) {
+ return CodeWrapper(builder: _buildRightIconButton);
+ }),
+ ],
+ );
}
@Demo(group: 'button')
@@ -763,43 +621,41 @@ class _TDButtonPageState extends State {
@Demo(group: 'button')
Widget _buildCombinationButtons(BuildContext context) {
- return Row(
- children: const [
- SizedBox(
- width: 16,
- ),
- Expanded(
- child: TDButton(
- text: '填充按钮',
- size: TDButtonSize.large,
- type: TDButtonType.fill,
- shape: TDButtonShape.rectangle,
- theme: TDButtonTheme.light,
- )),
- SizedBox(
- width: 16,
- ),
- Expanded(
- child: TDButton(
- text: '填充按钮',
- size: TDButtonSize.large,
- type: TDButtonType.fill,
- shape: TDButtonShape.rectangle,
- theme: TDButtonTheme.primary,
- )),
- SizedBox(
- width: 16,
- ),
- ],
- );
+ return const Padding(
+ padding: EdgeInsets.symmetric(horizontal: 16),
+ child: Row(
+ // spacing: 16,
+ children: [
+ Expanded(
+ child: TDButton(
+ text: '填充按钮',
+ size: TDButtonSize.large,
+ type: TDButtonType.fill,
+ shape: TDButtonShape.rectangle,
+ theme: TDButtonTheme.light,
+ ),
+ ),
+ SizedBox(width: 16),
+ Expanded(
+ child: TDButton(
+ text: '填充按钮',
+ size: TDButtonSize.large,
+ type: TDButtonType.fill,
+ shape: TDButtonShape.rectangle,
+ theme: TDButtonTheme.primary,
+ ),
+ ),
+ ],
+ ));
}
@Demo(group: 'button')
Widget _buildChildTestButton(BuildContext context) {
return TDButton(
child: Container(
- height: 24,
- width: 24,
+ // 高度被按钮约束了
+ height: 48,
+ width: 48,
color: Colors.red,
),
);
@@ -807,41 +663,39 @@ class _TDButtonPageState extends State {
@Demo(group: 'button')
Widget _buildRightIconButton(BuildContext context) {
- return Container(
- margin: const EdgeInsets.all(16),
- child: Wrap(
- spacing: 8,
- runSpacing: 8,
- children: [
- TDButton(
- text: '填充按钮',
- icon: TDIcons.app,
- size: TDButtonSize.large,
- type: TDButtonType.fill,
- shape: TDButtonShape.rectangle,
- theme: TDButtonTheme.primary,
- iconPosition: TDButtonIconPosition.right,
- ),
- TDButton(
- icon: TDIcons.app,
- size: TDButtonSize.large,
- type: TDButtonType.fill,
- shape: TDButtonShape.rectangle,
- theme: TDButtonTheme.primary,
- iconPosition: TDButtonIconPosition.right,
- ),
- TDButton(
- text: '间距20',
- icon: TDIcons.app,
- size: TDButtonSize.large,
- type: TDButtonType.fill,
- shape: TDButtonShape.rectangle,
- theme: TDButtonTheme.primary,
- iconPosition: TDButtonIconPosition.right,
- iconTextSpacing: 20,
- )
- ],
- ),
+ return const Wrap(
+ spacing: 16,
+ runSpacing: 16,
+ alignment: WrapAlignment.center,
+ children: [
+ TDButton(
+ text: '填充按钮',
+ icon: TDIcons.app,
+ size: TDButtonSize.large,
+ type: TDButtonType.fill,
+ shape: TDButtonShape.rectangle,
+ theme: TDButtonTheme.primary,
+ iconPosition: TDButtonIconPosition.right,
+ ),
+ TDButton(
+ icon: TDIcons.app,
+ size: TDButtonSize.large,
+ type: TDButtonType.fill,
+ shape: TDButtonShape.rectangle,
+ theme: TDButtonTheme.primary,
+ iconPosition: TDButtonIconPosition.right,
+ ),
+ TDButton(
+ text: '间距20',
+ icon: TDIcons.app,
+ size: TDButtonSize.large,
+ type: TDButtonType.fill,
+ shape: TDButtonShape.rectangle,
+ theme: TDButtonTheme.primary,
+ iconPosition: TDButtonIconPosition.right,
+ iconTextSpacing: 20,
+ )
+ ],
);
}
@@ -853,10 +707,11 @@ class _TDButtonPageState extends State {
children: [
/// fill
Container(
- margin: const EdgeInsets.all(16),
+ margin: const EdgeInsets.symmetric(vertical: 8),
child: Wrap(
- spacing: 8,
- runSpacing: 8,
+ spacing: 16,
+ runSpacing: 16,
+ alignment: WrapAlignment.center,
children: [
const TDButton(
icon: TDIcons.app,
@@ -880,10 +735,11 @@ class _TDButtonPageState extends State {
),
),
Container(
- margin: const EdgeInsets.all(16),
+ margin: const EdgeInsets.symmetric(vertical: 8),
child: Wrap(
- spacing: 8,
- runSpacing: 8,
+ spacing: 16,
+ runSpacing: 16,
+ alignment: WrapAlignment.center,
children: [
const TDButton(
icon: TDIcons.app,
@@ -907,10 +763,11 @@ class _TDButtonPageState extends State {
),
),
Container(
- margin: const EdgeInsets.all(16),
+ margin: const EdgeInsets.symmetric(vertical: 8),
child: Wrap(
- spacing: 8,
- runSpacing: 8,
+ spacing: 16,
+ runSpacing: 16,
+ alignment: WrapAlignment.center,
children: [
const TDButton(
icon: TDIcons.app,
@@ -934,10 +791,11 @@ class _TDButtonPageState extends State {
),
),
Container(
- margin: const EdgeInsets.all(16),
+ margin: const EdgeInsets.symmetric(vertical: 8),
child: Wrap(
- spacing: 8,
- runSpacing: 8,
+ spacing: 16,
+ runSpacing: 16,
+ alignment: WrapAlignment.center,
children: [
const TDButton(
icon: TDIcons.app,
@@ -963,10 +821,11 @@ class _TDButtonPageState extends State {
/// outline
Container(
- margin: const EdgeInsets.all(16),
+ margin: const EdgeInsets.symmetric(vertical: 8),
child: Wrap(
- spacing: 8,
- runSpacing: 8,
+ spacing: 16,
+ runSpacing: 16,
+ alignment: WrapAlignment.center,
children: [
const TDButton(
icon: TDIcons.app,
@@ -993,10 +852,11 @@ class _TDButtonPageState extends State {
),
),
Container(
- margin: const EdgeInsets.all(16),
+ margin: const EdgeInsets.symmetric(vertical: 8),
child: Wrap(
- spacing: 8,
- runSpacing: 8,
+ spacing: 16,
+ runSpacing: 16,
+ alignment: WrapAlignment.center,
children: [
const TDButton(
icon: TDIcons.app,
@@ -1023,10 +883,11 @@ class _TDButtonPageState extends State {
),
),
Container(
- margin: const EdgeInsets.all(16),
+ margin: const EdgeInsets.symmetric(vertical: 8),
child: Wrap(
- spacing: 8,
- runSpacing: 8,
+ spacing: 16,
+ runSpacing: 16,
+ alignment: WrapAlignment.center,
children: [
const TDButton(
icon: TDIcons.app,
@@ -1053,10 +914,11 @@ class _TDButtonPageState extends State {
),
),
Container(
- margin: const EdgeInsets.all(16),
+ margin: const EdgeInsets.symmetric(vertical: 8),
child: Wrap(
- spacing: 8,
- runSpacing: 8,
+ spacing: 16,
+ runSpacing: 16,
+ alignment: WrapAlignment.center,
children: [
const TDButton(
icon: TDIcons.app,
@@ -1085,10 +947,11 @@ class _TDButtonPageState extends State {
/// text
Container(
- margin: const EdgeInsets.all(16),
+ margin: const EdgeInsets.symmetric(vertical: 8),
child: Wrap(
- spacing: 8,
- runSpacing: 8,
+ spacing: 16,
+ runSpacing: 16,
+ alignment: WrapAlignment.center,
children: [
const TDButton(
icon: TDIcons.app,
@@ -1115,10 +978,11 @@ class _TDButtonPageState extends State {
),
),
Container(
- margin: const EdgeInsets.all(16),
+ margin: const EdgeInsets.symmetric(vertical: 8),
child: Wrap(
- spacing: 8,
- runSpacing: 8,
+ spacing: 16,
+ runSpacing: 16,
+ alignment: WrapAlignment.center,
children: [
const TDButton(
icon: TDIcons.app,
@@ -1145,10 +1009,11 @@ class _TDButtonPageState extends State {
),
),
Container(
- margin: const EdgeInsets.all(16),
+ margin: const EdgeInsets.symmetric(vertical: 8),
child: Wrap(
- spacing: 8,
- runSpacing: 8,
+ spacing: 16,
+ runSpacing: 16,
+ alignment: WrapAlignment.center,
children: [
const TDButton(
icon: TDIcons.app,
@@ -1175,10 +1040,11 @@ class _TDButtonPageState extends State {
),
),
Container(
- margin: const EdgeInsets.all(16),
+ margin: const EdgeInsets.symmetric(vertical: 8),
child: Wrap(
- spacing: 8,
- runSpacing: 8,
+ spacing: 16,
+ runSpacing: 16,
+ alignment: WrapAlignment.center,
children: [
const TDButton(
icon: TDIcons.app,
@@ -1207,11 +1073,12 @@ class _TDButtonPageState extends State {
/// ghost
Container(
- padding: const EdgeInsets.all(16),
+ padding: const EdgeInsets.symmetric(vertical: 8),
color: Colors.black,
child: Wrap(
- spacing: 8,
- runSpacing: 8,
+ spacing: 16,
+ runSpacing: 16,
+ alignment: WrapAlignment.center,
children: [
const TDButton(
icon: TDIcons.app,
@@ -1238,11 +1105,12 @@ class _TDButtonPageState extends State {
),
),
Container(
- padding: const EdgeInsets.all(16),
+ padding: const EdgeInsets.symmetric(vertical: 8),
color: Colors.black,
child: Wrap(
- spacing: 8,
- runSpacing: 8,
+ spacing: 16,
+ runSpacing: 16,
+ alignment: WrapAlignment.center,
children: [
const TDButton(
icon: TDIcons.app,
@@ -1269,11 +1137,12 @@ class _TDButtonPageState extends State {
),
),
Container(
- padding: const EdgeInsets.all(16),
+ padding: const EdgeInsets.symmetric(vertical: 8),
color: Colors.black,
child: Wrap(
- spacing: 8,
- runSpacing: 8,
+ spacing: 16,
+ runSpacing: 16,
+ alignment: WrapAlignment.center,
children: [
const TDButton(
icon: TDIcons.app,
@@ -1300,11 +1169,12 @@ class _TDButtonPageState extends State {
),
),
Container(
- padding: const EdgeInsets.all(16),
+ padding: const EdgeInsets.symmetric(vertical: 8),
color: Colors.black,
child: Wrap(
- spacing: 8,
- runSpacing: 8,
+ spacing: 16,
+ runSpacing: 16,
+ alignment: WrapAlignment.center,
children: [
const TDButton(
icon: TDIcons.app,
diff --git a/tdesign-component/example/lib/page/td_calendar_page.dart b/tdesign-component/example/lib/page/td_calendar_page.dart
index 3cd81ff6b..54fb5b66e 100644
--- a/tdesign-component/example/lib/page/td_calendar_page.dart
+++ b/tdesign-component/example/lib/page/td_calendar_page.dart
@@ -8,51 +8,48 @@ class TDCalendarPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
- return Container(
- color: TDTheme.of(context).grayColor2,
- child: ExamplePage(
- title: tdTitle(context),
- desc: '按照日历形式展示数据或日期的容器。',
- exampleCodeGroup: 'calendar',
- children: [
- ExampleModule(title: '组件类型', children: [
- ExampleItem(
- ignoreCode: true,
- center: false,
- builder: (BuildContext context) {
- return const CodeWrapper(builder: _buildSimple);
- },
- ),
- ]),
- ExampleModule(title: '组件样式', children: [
- ExampleItem(
- desc: '可以自由定义想要的风格',
- ignoreCode: true,
- center: false,
- builder: (BuildContext context) {
- return const CodeWrapper(builder: _buildStyle);
- },
- ),
- ExampleItem(
- desc: '自定义日期单元格',
- ignoreCode: true,
- center: false,
- builder: (BuildContext context) {
- return const CodeWrapper(builder: _buildCustomCell);
- },
- ),
- ExampleItem(
- desc: '不使用Popup',
- ignoreCode: true,
- center: false,
- builder: (BuildContext context) {
- return const CodeWrapper(builder: _buildBlock);
- },
- ),
- ]),
- ],
- test: const [],
- ),
+ return ExamplePage(
+ title: tdTitle(context),
+ desc: '按照日历形式展示数据或日期的容器。',
+ exampleCodeGroup: 'calendar',
+ children: [
+ ExampleModule(title: '组件类型', children: [
+ ExampleItem(
+ ignoreCode: true,
+ center: false,
+ builder: (BuildContext context) {
+ return const CodeWrapper(builder: _buildSimple);
+ },
+ ),
+ ]),
+ ExampleModule(title: '组件样式', children: [
+ ExampleItem(
+ desc: '可以自由定义想要的风格',
+ ignoreCode: true,
+ center: false,
+ builder: (BuildContext context) {
+ return const CodeWrapper(builder: _buildStyle);
+ },
+ ),
+ ExampleItem(
+ desc: '自定义日期单元格',
+ ignoreCode: true,
+ center: false,
+ builder: (BuildContext context) {
+ return const CodeWrapper(builder: _buildCustomCell);
+ },
+ ),
+ ExampleItem(
+ desc: '不使用Popup',
+ ignoreCode: true,
+ center: false,
+ builder: (BuildContext context) {
+ return const CodeWrapper(builder: _buildBlock);
+ },
+ ),
+ ]),
+ ],
+ test: const [],
);
}
}
@@ -60,7 +57,8 @@ class TDCalendarPage extends StatelessWidget {
@Demo(group: 'calendar')
Widget _buildSimple(BuildContext context) {
final size = MediaQuery.of(context).size;
- final selected = ValueNotifier>([DateTime.now().millisecondsSinceEpoch + 30 * 24 * 60 * 60 * 1000]);
+ final selected = ValueNotifier>(
+ [DateTime.now().millisecondsSinceEpoch + 30 * 24 * 60 * 60 * 1000]);
return ValueListenableBuilder(
valueListenable: selected,
builder: (context, value, child) {
@@ -76,7 +74,7 @@ Widget _buildSimple(BuildContext context) {
context,
visible: true,
onConfirm: (value) {
- print('onConfirm:$value');
+ print('onConfirm:$value');
selected.value = value;
},
onClose: () {
@@ -87,16 +85,16 @@ Widget _buildSimple(BuildContext context) {
value: value,
height: size.height * 0.6 + 176,
onCellClick: (value, type, tdate) {
- print('onCellClick:$value');
+ print('onCellClick: $value');
},
onCellLongPress: (value, type, tdate) {
- print('onCellLongPress:$value');
+ print('onCellLongPress: $value');
},
onHeaderClick: (index, week) {
- print('onHeaderClick:$week');
+ print('onHeaderClick: $week');
},
onChange: (value) {
- print('onChange:$value');
+ print('onChange: $value');
},
),
);
@@ -130,7 +128,9 @@ Widget _buildSimple(BuildContext context) {
type: CalendarType.range,
value: [
DateTime.now().millisecondsSinceEpoch,
- DateTime.now().add(const Duration(days: 6)).millisecondsSinceEpoch,
+ DateTime.now()
+ .add(const Duration(days: 6))
+ .millisecondsSinceEpoch,
],
height: size.height * 0.6 + 176,
),
@@ -140,7 +140,8 @@ Widget _buildSimple(BuildContext context) {
TDCell(
title: '单个选择日历和时间',
arrow: true,
- note: '${date.year}-${date.month}-${date.day} ${date.hour}:${date.minute}',
+ note:
+ '${date.year}-${date.month}-${date.day} ${date.hour}:${date.minute}',
onClick: (cell) {
TDCalendarPopup(
context,
@@ -160,16 +161,16 @@ Widget _buildSimple(BuildContext context) {
// pickerHeight: 100,
// pickerItemCount: 2,
onCellClick: (value, type, tdate) {
- print('onCellClick:$value');
+ print('onCellClick: $value');
},
onCellLongPress: (value, type, tdate) {
- print('onCellLongPress:$value');
+ print('onCellLongPress: $value');
},
onHeaderClick: (index, week) {
- print('onHeaderClick:$week');
+ print('onHeaderClick: $week');
},
onChange: (value) {
- print('onChange:$value');
+ print('onChange: $value');
},
),
);
@@ -183,7 +184,7 @@ Widget _buildSimple(BuildContext context) {
context,
visible: true,
onConfirm: (value) {
- print('onConfirm:$value');
+ print('onConfirm: $value');
},
onClose: () {
print('onClose');
@@ -194,20 +195,22 @@ Widget _buildSimple(BuildContext context) {
type: CalendarType.range,
value: [
DateTime.now().millisecondsSinceEpoch,
- DateTime.now().add(const Duration(days: 3)).millisecondsSinceEpoch,
+ DateTime.now()
+ .add(const Duration(days: 3))
+ .millisecondsSinceEpoch,
],
useTimePicker: true,
onCellClick: (value, type, tdate) {
- print('onCellClick:$value');
+ print('onCellClick: $value');
},
onCellLongPress: (value, type, tdate) {
- print('onCellLongPress:$value');
+ print('onCellLongPress: $value');
},
onHeaderClick: (index, week) {
- print('onHeaderClick:$week');
+ print('onHeaderClick: $week');
},
onChange: (value) {
- print('onChange:$value');
+ print('onChange: $value');
},
),
);
@@ -252,11 +255,13 @@ Widget _buildStyle(BuildContext context) {
day?.style = TextStyle(
fontSize: TDTheme.of(context).fontTitleMedium?.size,
height: TDTheme.of(context).fontTitleMedium?.height,
- fontWeight: TDTheme.of(context).fontTitleMedium?.fontWeight,
+ fontWeight:
+ TDTheme.of(context).fontTitleMedium?.fontWeight,
color: TDTheme.of(context).errorColor6,
);
if (day?.typeNotifier.value == DateSelectType.selected) {
- day?.style = day.style?.copyWith(color: TDTheme.of(context).fontWhColor1);
+ day?.style = day.style
+ ?.copyWith(color: TDTheme.of(context).fontWhColor1);
}
}
}
@@ -275,7 +280,8 @@ Widget _buildStyle(BuildContext context) {
context,
visible: true,
confirmBtn: Padding(
- padding: EdgeInsets.symmetric(vertical: TDTheme.of(context).spacer16),
+ padding:
+ EdgeInsets.symmetric(vertical: TDTheme.of(context).spacer16),
child: TDButton(
theme: TDButtonTheme.danger,
shape: TDButtonShape.round,
@@ -320,31 +326,35 @@ Widget _buildStyle(BuildContext context) {
@Demo(group: 'calendar')
Widget _buildBlock(BuildContext context) {
final size = MediaQuery.of(context).size;
- final selected = ValueNotifier>([DateTime.now().millisecondsSinceEpoch + 30 * 24 * 60 * 60 * 1000]);
+ final selected = ValueNotifier>(
+ [DateTime.now().millisecondsSinceEpoch + 30 * 24 * 60 * 60 * 1000],
+ );
return Column(
+ // spacing: TDTheme.of(context).spacer16,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
+ // spacing: TDTheme.of(context).spacer16,
+ mainAxisAlignment: MainAxisAlignment.center,
children: [
- SizedBox(width: TDTheme.of(context).spacer16),
TDButton(
- text: '加一个月',
- size: TDButtonSize.small,
- theme: TDButtonTheme.primary,
- onTap: () {
- selected.value = [selected.value[0] + 30 * 24 * 60 * 60 * 1000];
- }),
- SizedBox(width: TDTheme.of(context).spacer16),
+ text: '加一个月',
+ theme: TDButtonTheme.primary,
+ onTap: () {
+ selected.value = [selected.value[0] + 30 * 24 * 60 * 60 * 1000];
+ },
+ ),
+ const SizedBox(width: 16),
TDButton(
- text: '减一个月',
- size: TDButtonSize.small,
- theme: TDButtonTheme.primary,
- onTap: () {
- selected.value = [selected.value[0] - 30 * 24 * 60 * 60 * 1000];
- }),
+ text: '减一个月',
+ theme: TDButtonTheme.primary,
+ onTap: () {
+ selected.value = [selected.value[0] - 30 * 24 * 60 * 60 * 1000];
+ },
+ ),
],
),
- SizedBox(height: TDTheme.of(context).spacer16),
+ const SizedBox(height: 16),
ValueListenableBuilder(
valueListenable: selected,
builder: (context, value, child) {
@@ -353,6 +363,8 @@ Widget _buildBlock(BuildContext context) {
value: value,
height: size.height * 0.6 + 176,
animateTo: true,
+ // 不使用popup时,useSafeArea无效
+ useSafeArea: true,
);
},
),
@@ -363,7 +375,8 @@ Widget _buildBlock(BuildContext context) {
@Demo(group: 'calendar')
Widget _buildCustomCell(BuildContext context) {
final size = MediaQuery.of(context).size;
- final selected = ValueNotifier>([DateTime.now().millisecondsSinceEpoch + 30 * 24 * 60 * 60 * 1000]);
+ final selected = ValueNotifier>(
+ [DateTime.now().millisecondsSinceEpoch + 30 * 24 * 60 * 60 * 1000]);
return ValueListenableBuilder(
valueListenable: selected,
builder: (context, value, child) {
@@ -386,42 +399,51 @@ Widget _buildCustomCell(BuildContext context) {
print('onClose');
},
child: TDCalendar(
- title: '请选择日期',
- value: value,
- height: size.height * 0.6 + 176,
- onCellClick: (value, type, tdate) {
- print('onCellClick:$value');
- },
- onCellLongPress: (value, type, tdate) {
- print('onCellLongPress:$value');
- },
- onHeaderClick: (index, week) {
- print('onHeaderClick:$week');
- },
- onChange: (value) {
- print('onChange:$value');
- },
- cellWidget: (context, tdate, selectType) {
- if (selectType == DateSelectType.selected) {
+ title: '请选择日期',
+ value: value,
+ height: size.height * 0.6 + 176,
+ onCellClick: (value, type, tdate) {
+ print('onCellClick: $value');
+ },
+ onCellLongPress: (value, type, tdate) {
+ print('onCellLongPress: $value');
+ },
+ onHeaderClick: (index, week) {
+ print('onHeaderClick: $week');
+ },
+ onChange: (value) {
+ print('onChange: $value');
+ },
+ cellWidget: (context, tdate, selectType) {
+ if (selectType == DateSelectType.selected) {
+ return Column(
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ Text('${tdate.date.day}',
+ style: const TextStyle(
+ fontSize: 18,
+ fontWeight: FontWeight.bold,
+ color: Colors.white)),
+ const Text('文案文案',
+ style: TextStyle(
+ fontSize: 6, color: Colors.white)),
+ const Text('自定义',
+ style: TextStyle(
+ fontSize: 12, color: Colors.white)),
+ ],
+ );
+ }
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
- Text('${tdate.date.day}', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold, color: Colors.white)),
- Text('文案文案', style: TextStyle(fontSize: 6, color: Colors.white)),
- Text('自定义', style: TextStyle(fontSize: 12, color: Colors.white)),
+ Text('${tdate.date.day}',
+ style: const TextStyle(
+ fontSize: 18, fontWeight: FontWeight.bold)),
+ const Text('文案文案', style: TextStyle(fontSize: 8)),
+ const Text('自定义', style: TextStyle(fontSize: 8)),
],
);
- }
- return Column(
- mainAxisAlignment: MainAxisAlignment.center,
- children: [
- Text('${tdate.date.day}', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
- Text('文案文案', style: TextStyle(fontSize: 8)),
- Text('自定义', style: TextStyle(fontSize: 8)),
- ],
- );
- }
- ),
+ }),
);
},
),
diff --git a/tdesign-component/example/lib/page/td_cascader_page.dart b/tdesign-component/example/lib/page/td_cascader_page.dart
index 8c1d6a79f..49db400fd 100644
--- a/tdesign-component/example/lib/page/td_cascader_page.dart
+++ b/tdesign-component/example/lib/page/td_cascader_page.dart
@@ -220,48 +220,67 @@ class _TDCascaderPageState extends State {
'value': '110100',
'label': '部门一',
'children': [
- {'value': '110201', 'label': '后勤部门', 'children':[
- {
- 'value': '110301', 'label': '后勤A组','children':[
- {
- 'value': '110401', 'label': '一组','children':[
- {'value': '110501', 'label': '洪磊',},
- {'value': '110502', 'label': '洪磊2'},
- {'value': '110506', 'label': '郭天1'},
- {'value': '110507', 'label': '郭天2'},
- {'value': '110508', 'label': '郭天3'},
- {'value': '110509', 'label': '冯笑1'},
- {'value': '1105022', 'label': '洪磊3'},
- {'value': '110505', 'label': '洪磊4'},
- ]
+ {
+ 'value': '110201',
+ 'label': '后勤部门',
+ 'children': [
+ {
+ 'value': '110301',
+ 'label': '后勤A组',
+ 'children': [
+ {
+ 'value': '110401',
+ 'label': '一组',
+ 'children': [
+ {
+ 'value': '110501',
+ 'label': '洪磊',
+ },
+ {'value': '110502', 'label': '洪磊2'},
+ {'value': '110506', 'label': '郭天1'},
+ {'value': '110507', 'label': '郭天2'},
+ {'value': '110508', 'label': '郭天3'},
+ {'value': '110509', 'label': '冯笑1'},
+ {'value': '1105022', 'label': '洪磊3'},
+ {'value': '110505', 'label': '洪磊4'},
+ ]
+ }
+ ]
}
- ]
- }
- ]},
+ ]
+ },
],
},
{
'value': '120100',
'label': '部门二',
'children': [
- {'value': '120201', 'label': '后勤部门', 'children':[
- {
- 'value': '120301', 'label': '后勤A组','children':[
+ {
+ 'value': '120201',
+ 'label': '后勤部门',
+ 'children': [
{
- 'value': '120401', 'label': '一组','children':[
- {'value': '120501', 'label': '张雷1'},
- {'value': '120502', 'label': '张雷2'},
- {'value': '1205022', 'label': '张雷3'},
- {'value': '120505', 'label': '张雷4'},
- {'value': '120506', 'label': '张雷5'},
- {'value': '120507', 'label': '张雷6'},
- {'value': '120508', 'label': '张雷7'},
- {'value': '120509', 'label': '张雷8'},
- ]
+ 'value': '120301',
+ 'label': '后勤A组',
+ 'children': [
+ {
+ 'value': '120401',
+ 'label': '一组',
+ 'children': [
+ {'value': '120501', 'label': '张雷1'},
+ {'value': '120502', 'label': '张雷2'},
+ {'value': '1205022', 'label': '张雷3'},
+ {'value': '120505', 'label': '张雷4'},
+ {'value': '120506', 'label': '张雷5'},
+ {'value': '120507', 'label': '张雷6'},
+ {'value': '120508', 'label': '张雷7'},
+ {'value': '120509', 'label': '张雷8'},
+ ]
+ }
+ ]
}
]
- }
- ]},
+ },
],
},
],
@@ -300,285 +319,264 @@ class _TDCascaderPageState extends State {
@Demo(group: 'cascader')
Widget _buildVerticalCascader(BuildContext context) {
- return GestureDetector(
- onTap: () {
- TDCascader.showMultiCascader(context, title: '选择地址', data: _data, initialData: _initData, theme: 'step',
- onChange: (List selectData) {
- setState(() {
- var result = [];
- var len = selectData.length;
- _initData = selectData[len - 1].value!;
- selectData.forEach((element) {
- result.add(element.label);
+ const title = '选择地址';
+ return TDCell(
+ title: title,
+ note: _selected_1,
+ arrow: true,
+ onClick: (click) {
+ TDCascader.showMultiCascader(context,
+ title: title,
+ data: _data,
+ initialData: _initData,
+ theme: 'step', onChange: (List selectData) {
+ setState(() {
+ var result = [];
+ var len = selectData.length;
+ _initData = selectData[len - 1].value!;
+ selectData.forEach((element) {
+ result.add(element.label);
+ });
+ _selected_1 = result.join('/');
});
- _selected_1 = result.join('/');
+ }, onClose: () {
+ Navigator.of(context).pop();
});
- }, onClose: () {
- Navigator.of(context).pop();
});
- },
- child: _buildSelectRow(context, _selected_1, '选择地区'),
- );
}
@Demo(group: 'cascader')
Widget _buildVerticalLetterCascader(BuildContext context) {
- return GestureDetector(
- onTap: () {
- TDCascader.showMultiCascader(context, title: '选择地址', data: _data_2, initialData: _initData_2, theme: 'step',
- onChange: (List selectData) {
- setState(() {
- var result = [];
- var len = selectData.length;
- _initData_2 = selectData[len - 1].value!;
- selectData.forEach((element) {
- result.add(element.label);
+ const title = '选择地址';
+ return TDCell(
+ title: title,
+ note: _selected_2,
+ arrow: true,
+ onClick: (click) {
+ TDCascader.showMultiCascader(context,
+ title: title,
+ data: _data_2,
+ initialData: _initData_2,
+ theme: 'step', onChange: (List selectData) {
+ setState(() {
+ var result = [];
+ var len = selectData.length;
+ _initData_2 = selectData[len - 1].value!;
+ selectData.forEach((element) {
+ result.add(element.label);
+ });
+ _selected_2 = result.join('/');
});
- _selected_2 = result.join('/');
+ }, onClose: () {
+ Navigator.of(context).pop();
});
- }, onClose: () {
- Navigator.of(context).pop();
});
- },
- child: _buildSelectRow(context, _selected_2, '选择地区'),
- );
}
@Demo(group: 'cascader')
Widget _buildHorizontalCascader(BuildContext context) {
- return GestureDetector(
- onTap: () {
- TDCascader.showMultiCascader(context,
- title: '选择地址',
- subTitles: ['请选择省份', '请选择城市', '请选择区/县'],
- data: _data,
- initialData: _initData,
- theme: 'tab', onChange: (List selectData) {
- setState(() {
- var result = [];
- var len = selectData.length;
- _initData = selectData[len - 1].value!;
- selectData.forEach((element) {
- result.add(element.label);
+ const title = '选择地址';
+ return TDCell(
+ title: title,
+ note: _selected_1,
+ arrow: true,
+ onClick: (click) {
+ TDCascader.showMultiCascader(context,
+ title: title,
+ subTitles: ['请选择省份', '请选择城市', '请选择区/县'],
+ data: _data,
+ initialData: _initData,
+ theme: 'tab', onChange: (List selectData) {
+ setState(() {
+ var result = [];
+ var len = selectData.length;
+ _initData = selectData[len - 1].value!;
+ selectData.forEach((element) {
+ result.add(element.label);
+ });
+ _selected_1 = result.join('/');
});
- _selected_1 = result.join('/');
+ }, onClose: () {
+ Navigator.of(context).pop();
});
- }, onClose: () {
- Navigator.of(context).pop();
});
- },
- child: _buildSelectRow(context, _selected_1, '选择地区'),
- );
}
@Demo(group: 'cascader')
Widget _buildHorizontalLetterCascader(BuildContext context) {
- return GestureDetector(
- onTap: () {
- TDCascader.showMultiCascader(context,
- title: '选择地址',
- data: _data_2,
- initialData: _initData_2,
- isLetterSort: true,
- theme: 'tab', onChange: (List selectData) {
- setState(() {
- var result = [];
- var len = selectData.length;
- _initData_2 = selectData[len - 1].value!;
- selectData.forEach((element) {
- result.add(element.label);
+ const title = '选择地址';
+ return TDCell(
+ title: title,
+ note: _selected_2,
+ arrow: true,
+ onClick: (click) {
+ TDCascader.showMultiCascader(context,
+ title: title,
+ data: _data_2,
+ initialData: _initData_2,
+ isLetterSort: true,
+ theme: 'tab', onChange: (List selectData) {
+ setState(() {
+ var result = [];
+ var len = selectData.length;
+ _initData_2 = selectData[len - 1].value!;
+ selectData.forEach((element) {
+ result.add(element.label);
+ });
+ _selected_2 = result.join('/');
});
- _selected_2 = result.join('/');
+ }, onClose: () {
+ Navigator.of(context).pop();
});
- }, onClose: () {
- Navigator.of(context).pop();
});
- },
- child: _buildSelectRow(context, _selected_2, '选择地区'),
- );
}
@Demo(group: 'cascader')
Widget _buildHorizontalCompanyCascader(BuildContext context) {
- return GestureDetector(
- onTap: () {
- TDCascader.showMultiCascader(context, title: '选择部门人员', data: _data_3,isLetterSort: true, initialData: _initData_3, theme: 'tab',
- onChange: (List selectData) {
- setState(() {
- var result = [];
- var len = selectData.length;
- _initData_3 = selectData[len - 1].value!;
- selectData.forEach((element) {
- result.add(element.label);
+ const title = '选择部门人员';
+ return TDCell(
+ title: title,
+ note: _selected_3,
+ arrow: true,
+ onClick: (click) {
+ TDCascader.showMultiCascader(context,
+ title: title,
+ data: _data_3,
+ isLetterSort: true,
+ initialData: _initData_3,
+ theme: 'tab', onChange: (List selectData) {
+ setState(() {
+ var result = [];
+ var len = selectData.length;
+ _initData_3 = selectData[len - 1].value!;
+ selectData.forEach((element) {
+ result.add(element.label);
+ });
+ _selected_3 = result.join('/');
});
- _selected_3 = result.join('/');
+ }, onClose: () {
+ Navigator.of(context).pop();
});
- }, onClose: () {
- Navigator.of(context).pop();
});
- },
- child: _buildSelectRow(context, _selected_3, '选择部门人员'),
- );
}
@Demo(group: 'cascader')
Widget _buildVerticalCompanyCascader(BuildContext context) {
- return GestureDetector(
- onTap: () {
- TDCascader.showMultiCascader(context, title: '选择部门人员', data: _data_3,isLetterSort: true, initialData: _initData_3, theme: 'step',
- onChange: (List selectData) {
- setState(() {
- var result = [];
- var len = selectData.length;
- _initData_3 = selectData[len - 1].value!;
- selectData.forEach((element) {
- result.add(element.label);
+ const title = '选择部门人员';
+ return TDCell(
+ title: title,
+ note: _selected_3,
+ arrow: true,
+ onClick: (click) {
+ TDCascader.showMultiCascader(context,
+ title: title,
+ data: _data_3,
+ isLetterSort: true,
+ initialData: _initData_3,
+ theme: 'step', onChange: (List selectData) {
+ setState(() {
+ var result = [];
+ var len = selectData.length;
+ _initData_3 = selectData[len - 1].value!;
+ selectData.forEach((element) {
+ result.add(element.label);
+ });
+ _selected_3 = result.join('/');
});
- _selected_3 = result.join('/');
+ }, onClose: () {
+ Navigator.of(context).pop();
});
- }, onClose: () {
- Navigator.of(context).pop();
});
- },
- child: _buildSelectRow(context, _selected_3, '选择部门人员'),
- );
}
@Demo(group: 'cascader')
Widget _buildVerticalSubTitleCascader(BuildContext context) {
- return GestureDetector(
- onTap: () {
- TDCascader.showMultiCascader(context,
- title: '选择地址',
- subTitles: ['请选择省份', '请选择城市', '请选择区/县'],
- data: _data,
- initialData: _initData_4,
- theme: 'tab', onChange: (List selectData) {
- setState(() {
- var result = [];
- var len = selectData.length;
- _initData_4 = selectData[len - 1].value!;
- selectData.forEach((element) {
- result.add(element.label);
+ const title = '选择地址';
+ return TDCell(
+ title: title,
+ note: _selected_1,
+ arrow: true,
+ onClick: (click) {
+ TDCascader.showMultiCascader(context,
+ title: title,
+ subTitles: ['请选择省份', '请选择城市', '请选择区/县'],
+ data: _data,
+ initialData: _initData_4,
+ theme: 'tab', onChange: (List selectData) {
+ setState(() {
+ var result = [];
+ var len = selectData.length;
+ _initData_4 = selectData[len - 1].value!;
+ selectData.forEach((element) {
+ result.add(element.label);
+ });
+ _selected_1 = result.join('/');
});
- _selected_1 = result.join('/');
+ }, onClose: () {
+ Navigator.of(context).pop();
});
- }, onClose: () {
- Navigator.of(context).pop();
});
- },
- child: _buildSelectRow(context, _selected_1, '选择地区'),
- );
}
@Demo(group: 'cascader')
Widget _buildTestVerticalCompanyCascader(BuildContext context) {
- return GestureDetector(
- onTap: () {
- TDCascader.showMultiCascader(context,
- title: '选择部门人员',
- data: _data_4,
- initialData: _initData_5,
- theme: 'step', onChange: (List selectData) {
- setState(() {
- var result = [];
- var len = selectData.length;
- _initData_5 = selectData[len - 1].value!;
- selectData.forEach((element) {
- result.add(element.label);
- });
- _selected_4 = result.join('/');
+ const title = '选择部门人员';
+ return TDCell(
+ title: title,
+ note: _selected_4,
+ arrow: true,
+ onClick: (click) {
+ TDCascader.showMultiCascader(context,
+ title: title,
+ data: _data_4,
+ initialData: _initData_5,
+ theme: 'step', onChange: (List selectData) {
+ setState(() {
+ var result = [];
+ var len = selectData.length;
+ _initData_5 = selectData[len - 1].value!;
+ selectData.forEach((element) {
+ result.add(element.label);
});
- }, onClose: () {
- Navigator.of(context).pop();
+ _selected_4 = result.join('/');
});
- },
- child: _buildSelectRow(context, _selected_4, '选择部门人员'),
- );
+ }, onClose: () {
+ Navigator.of(context).pop();
+ });
+ });
}
@Demo(group: 'cascader')
Widget _buildSelectAnyItemCascader(BuildContext context) {
- return GestureDetector(
- onTap: () {
- var action = (List selectData) {
- if(selectData.isEmpty){
- TDToast.showText('请选择数据', context: context);
- return;
- }
- setState(() {
- var result = [];
- var len = selectData.length;
- _initData_6 = selectData[len - 1].value!;
- selectData.forEach((element) {
- result.add(element.label);
+ const title = '请选择数据';
+ return TDCell(
+ title: title,
+ note: _selected_1,
+ arrow: true,
+ onClick: (click) {
+ var action = (List selectData) {
+ if (selectData.isEmpty) {
+ TDToast.showText(title, context: context);
+ return;
+ }
+ setState(() {
+ var result = [];
+ var len = selectData.length;
+ _initData_6 = selectData[len - 1].value!;
+ selectData.forEach((element) {
+ result.add(element.label);
+ });
+ _selected_1 = result.join('/');
});
- _selected_1 = result.join('/');
- });
- };
- TDCascader.showMultiCascader(
- context,
- title: '选择地址',
- data: _data,
- initialData: _initData_6,
- action: TDCascaderAction(onConfirm: action),
- onChange: action,
- );
- },
- child: _buildSelectRow(context, _selected_1, '选择地区'),
- );
- }
-
-
- Widget _buildSelectRow(BuildContext context, String output, String title) {
- return Container(
- color: TDTheme.of(context).whiteColor1,
- height: 56,
- child: Stack(
- alignment: Alignment.bottomCenter,
- children: [
- Row(
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
- children: [
- Padding(
- padding: const EdgeInsets.only(left: 16, top: 16, bottom: 16),
- child: TDText(
- title,
- font: TDTheme.of(context).fontBodyLarge,
- ),
- ),
- Expanded(
- child: Padding(
- padding: const EdgeInsets.only(right: 16, left: 16),
- child: Row(
- children: [
- Expanded(
- child: TDText(
- output,
- font: TDTheme.of(context).fontBodyLarge,
- textColor: TDTheme.of(context).fontGyColor3.withOpacity(0.4),
- maxLines: 1,
- overflow: TextOverflow.ellipsis,
- )),
- Padding(
- padding: const EdgeInsets.only(left: 2),
- child: Icon(
- TDIcons.chevron_right,
- color: TDTheme.of(context).fontGyColor3.withOpacity(0.4),
- ),
- ),
- ],
- ),
- )),
- ],
- ),
- const TDDivider(
- margin: EdgeInsets.only(
- left: 16,
- ),
- )
- ],
- ),
- );
+ };
+ TDCascader.showMultiCascader(
+ context,
+ title: '选择地址',
+ data: _data,
+ initialData: _initData_6,
+ action: TDCascaderAction(onConfirm: action),
+ onChange: action,
+ );
+ });
}
}
diff --git a/tdesign-component/example/lib/page/td_cell_page.dart b/tdesign-component/example/lib/page/td_cell_page.dart
index 5a2d817c4..7bc947d93 100644
--- a/tdesign-component/example/lib/page/td_cell_page.dart
+++ b/tdesign-component/example/lib/page/td_cell_page.dart
@@ -8,53 +8,24 @@ class TDCellPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
- return Container(
- color: TDTheme.of(context).grayColor2,
- child: ExamplePage(
- title: tdTitle(context),
- desc: '一行内容/功能的垂直排列方式。一行项目左侧为主要内容展示区域,右侧可增加更多操作内容。',
- exampleCodeGroup: 'cell',
- children: [
- ExampleModule(title: '组件类型', children: [
- ExampleItem(
- ignoreCode: true,
- desc: '单行单元格',
- center: false,
- builder: (BuildContext context) {
- return const CodeWrapper(builder: _buildSimple);
- },
- ),
- ExampleItem(
- ignoreCode: true,
- desc: '多行单元格',
- center: false,
- builder: (BuildContext context) {
- return const CodeWrapper(builder: _buildDesSimple);
- },
- ),
- ]),
- ExampleModule(title: '组件样式', children: [
- ExampleItem(
- ignoreCode: true,
- desc: '卡片单元格',
- center: false,
- builder: (BuildContext context) {
- return const CodeWrapper(builder: _buildCard);
- },
- ),
- ]),
- ],
- test: [
- ExampleItem(
- ignoreCode: true,
- desc: '自定义内边距-padding',
- center: false,
- builder: (BuildContext context) {
- return const CodeWrapper(builder: _buildPadding);
- },
- ),
- ],
- ));
+ return ExamplePage(
+ title: tdTitle(context),
+ desc: '一行内容/功能的垂直排列方式。一行项目左侧为主要内容展示区域,右侧可增加更多操作内容。',
+ exampleCodeGroup: 'cell',
+ children: const [
+ ExampleModule(title: '组件类型', children: [
+ ExampleItem(desc: '单行单元格', builder: _buildSimple),
+ ExampleItem(desc: '多行单元格', builder: _buildDesSimple),
+ ]),
+ ExampleModule(title: '组件样式', children: [
+ ExampleItem(desc: '卡片单元格', builder: _buildCard),
+ ]),
+ ],
+ test: const [
+ ExampleItem(desc: '自定义内边距-padding', builder: _buildPadding),
+ ExampleItem(desc: '长标题、内容', builder: _buildTestContent),
+ ],
+ );
}
}
@@ -66,14 +37,42 @@ Widget _buildSimple(BuildContext context) {
style: style,
cells: [
// 可单独修改样式
- TDCell(arrow: true, title: '单行标题', style: TDCellStyle.cellStyle(context)),
- TDCell(arrow: true, title: '单行标题', required: true, onClick: (cell) {
- print('单行标题');
- }),
- const TDCell(arrow: true, title: '单行标题', noteWidget: TDBadge(TDBadgeType.message, count: '8')),
- const TDCell(arrow: false, title: '单行标题', rightIconWidget: TDSwitch(isOn: true)),
- const TDCell(arrow: true, title: '单行标题', note: '辅助信息'),
- const TDCell(arrow: true, title: '单行标题', leftIcon: TDIcons.lock_on),
+ TDCell(
+ arrow: true,
+ title: '单行标题',
+ style: TDCellStyle.cellStyle(context),
+ ),
+ TDCell(
+ arrow: true,
+ title: '单行标题',
+ required: true,
+ onClick: (cell) {
+ print('单行标题');
+ },
+ onLongPress: (cell) {
+ print('onLongPress 单行标题');
+ },
+ ),
+ const TDCell(
+ arrow: true,
+ title: '单行标题',
+ noteWidget: TDBadge(TDBadgeType.message, count: '8'),
+ ),
+ const TDCell(
+ arrow: false,
+ title: '单行标题',
+ rightIconWidget: TDSwitch(isOn: true),
+ ),
+ const TDCell(
+ arrow: true,
+ title: '单行标题',
+ note: '辅助信息',
+ ),
+ const TDCell(
+ arrow: true,
+ title: '单行标题',
+ leftIcon: TDIcons.lock_on,
+ ),
const TDCell(arrow: false, title: '单行标题'),
],
);
@@ -117,7 +116,7 @@ Widget _buildDesSimple(BuildContext context) {
TDCell(
arrow: true,
title: '多行带头像',
- description: '一段很长很长的内容文字',
+ description: '一段很长很长的内容文字一段很长很长的内容文字一段很长很长的内容',
image: AssetImage('assets/img/td_avatar_1.png'),
),
// NetworkImage('https://tdesign.gtimg.com/mobile/demos/avatar1.png')),
@@ -163,30 +162,11 @@ Widget _buildPadding(BuildContext context) {
);
}
-// @Demo(group: 'cell')
-// Widget _buildBorder(BuildContext context) {
-// return const TDCellGroup(
-// theme: TDCellGroupTheme.cardTheme,
-// bordered: true,
-// cells: [
-// TDCell(arrow: true, title: '单行标题'),
-// TDCell(arrow: true, title: '单行标题', required: true),
-// TDCell(arrow: true, title: '单行标题'),
-// ],
-// );
-// }
-
-// @Demo(group: 'cell')
-// Widget _buildTitle(BuildContext context) {
-// var style = TDCellStyle.cellStyle(context);
-// style.leftIconColor = TDTheme.of(context).fontGyColor1;
-// return TDCellGroup(
-// title: '标题',
-// style: style,
-// cells: const [
-// TDCell(title: 'item', leftIcon: TDIcons.app),
-// TDCell(title: 'item', leftIcon: TDIcons.app),
-// TDCell(title: 'item', leftIcon: TDIcons.app),
-// ],
-// );
-// }
+@Demo(group: 'cell')
+Widget _buildTestContent(BuildContext context) {
+ return const TDCell(
+ title: '这是标题,非常长的标题',
+ note: '这是一个很长很长的note字段,测试长内容,你说这内容长不长!',
+ arrow: true,
+ );
+}
diff --git a/tdesign-component/example/lib/page/td_checkbox_page.dart b/tdesign-component/example/lib/page/td_checkbox_page.dart
index c88864880..eab3c5245 100644
--- a/tdesign-component/example/lib/page/td_checkbox_page.dart
+++ b/tdesign-component/example/lib/page/td_checkbox_page.dart
@@ -4,9 +4,7 @@ import 'package:tdesign_flutter/tdesign_flutter.dart';
import '../../base/example_widget.dart';
import '../annotation/demo.dart';
-///
/// TDCheckbox演示
-///
class TDCheckboxPage extends StatefulWidget {
const TDCheckboxPage({Key? key}) : super(key: key);
@@ -17,8 +15,11 @@ class TDCheckboxPage extends StatefulWidget {
}
class TDCheckboxPageState extends State {
-
- List? checkIds = ['index:1','index:2','index:3',];
+ List? checkIds = [
+ 'index:1',
+ 'index:2',
+ 'index:3',
+ ];
TDCheckboxGroupController? controller;
@@ -30,35 +31,35 @@ class TDCheckboxPageState extends State {
@override
Widget build(BuildContext context) {
-
return ExamplePage(
- title: tdTitle(),
- desc: '用于预设的一组选项中执行多项选择,并呈现选择结果。',
- exampleCodeGroup: 'checkbox',
- children: [
- ExampleModule(title: '组件类型', children: [
- ExampleItem(desc: '纵向多选框', builder: _verticalCheckbox),
- ExampleItem(desc: '横向多选框', builder: _horizontalCheckbox),
- ExampleItem(desc: '带全选多选框', builder: _checkAllSelected)
- ]),
- ExampleModule(title: '组件状态', children: [
- ExampleItem(desc: '多选框状态', builder: _checkboxStatus),
- ]),
- ExampleModule(title: '组件样式', children: [
- ExampleItem(desc: '勾选样式', builder: _checkStyle),
- ExampleItem(desc: '勾选显示位置', builder: _checkPosition),
- ExampleItem(desc: '非通栏多选样式', builder: _passThroughStyle),
- ]),
- ExampleModule(title: '特殊样式', children: [
- ExampleItem(desc: '纵向卡片单选框', builder: _verticalCardStyle),
- ExampleItem(desc: '横向卡片单选框', builder: _horizontalCardStyle),
- ]),
- ],
- test: [
- ExampleItem(desc: '自定义Icon', builder: _customIconBuildStyle),
- ExampleItem(desc: '自定义颜色', builder: _customColor),
- ExampleItem(desc: '自定义字体尺寸', builder: _customFont),
- ],);
+ title: tdTitle(),
+ desc: '用于预设的一组选项中执行多项选择,并呈现选择结果。',
+ exampleCodeGroup: 'checkbox',
+ children: [
+ ExampleModule(title: '组件类型', children: [
+ ExampleItem(desc: '纵向多选框', builder: _verticalCheckbox),
+ ExampleItem(desc: '横向多选框', builder: _horizontalCheckbox),
+ ExampleItem(desc: '带全选多选框', builder: _checkAllSelected)
+ ]),
+ ExampleModule(title: '组件状态', children: [
+ ExampleItem(desc: '多选框状态', builder: _checkboxStatus),
+ ]),
+ ExampleModule(title: '组件样式', children: [
+ ExampleItem(desc: '勾选样式', builder: _checkStyle),
+ ExampleItem(desc: '勾选显示位置', builder: _checkPosition),
+ ExampleItem(desc: '非通栏多选样式', builder: _passThroughStyle),
+ ]),
+ ExampleModule(title: '特殊样式', children: [
+ ExampleItem(desc: '纵向卡片单选框', builder: _verticalCardStyle),
+ ExampleItem(desc: '横向卡片单选框', builder: _horizontalCardStyle),
+ ]),
+ ],
+ test: [
+ ExampleItem(desc: '自定义Icon', builder: _customIconBuildStyle),
+ ExampleItem(desc: '自定义颜色', builder: _customColor),
+ ExampleItem(desc: '自定义字体尺寸', builder: _customFont),
+ ],
+ );
}
@Demo(group: 'checkbox')
@@ -135,7 +136,7 @@ class TDCheckboxPageState extends State {
physics: const NeverScrollableScrollPhysics(),
itemBuilder: (context, index) {
var title = '多选';
- if(index == 0){
+ if (index == 0) {
title = '全选';
return SizedBox(
height: 56,
@@ -143,15 +144,14 @@ class TDCheckboxPageState extends State {
id: 'index:$index',
title: title,
customIconBuilder: (context, checked) {
- var length = controller!.allChecked().length - (controller!.checked('index:0') ? 1 : 0);
+ var length = controller!.allChecked().length -
+ (controller!.checked('index:0') ? 1 : 0);
var allCheck = itemCount - 1 == length;
var halfSelected =
- controller != null
- && !allCheck
- && length > 0;
+ controller != null && !allCheck && length > 0;
return getAllIcon(allCheck, halfSelected);
},
- onCheckBoxChanged: (checked){
+ onCheckBoxChanged: (checked) {
if (checked) {
controller?.toggleAll(true);
} else {
@@ -160,21 +160,22 @@ class TDCheckboxPageState extends State {
},
),
);
- }else{
+ } else {
return SizedBox(
height: index == itemCount - 1 ? null : 56,
child: TDCheckbox(
id: 'index:$index',
title: title,
- subTitle: index == itemCount - 1 ? '描述信息描述信息描述信息描述信息描述信息描述信息描述信息描述信息描述信息' : null,
+ subTitle: index == itemCount - 1
+ ? '描述信息描述信息描述信息描述信息描述信息描述信息描述信息描述信息描述信息'
+ : null,
subTitleMaxLine: 2,
- onCheckBoxChanged: (checked){
- var length = controller!.allChecked().length - (controller!.checked('index:0') ? 1 : 0);
+ onCheckBoxChanged: (checked) {
+ var length = controller!.allChecked().length -
+ (controller!.checked('index:0') ? 1 : 0);
var allCheck = itemCount - 1 == length;
var halfSelected =
- controller != null
- && !allCheck
- && length > 0;
+ controller != null && !allCheck && length > 0;
controller!.toggle('index:0', allCheck);
getAllIcon(allCheck, halfSelected);
},
@@ -192,8 +193,8 @@ class TDCheckboxPageState extends State {
return TDCheckboxGroupContainer(
contentDirection: TDContentDirection.right,
selectIds: const ['0'],
- child: Column(
- children: const [
+ child: const Column(
+ children: [
TDCheckbox(
id: '0',
title: '选项禁用-已选',
@@ -359,7 +360,7 @@ class TDCheckboxPageState extends State {
selectIds: const ['index:1'],
cardMode: true,
direction: Axis.vertical,
- directionalTdCheckboxes: [
+ directionalTdCheckboxes: [
TDCheckbox(
id: 'index:0',
title: '多选',
@@ -367,20 +368,24 @@ class TDCheckboxPageState extends State {
titleMaxLine: 2,
subTitleMaxLine: 2,
cardMode: true,
- customIconBuilder: (context, checked){
- return const Icon(TDIcons.app, size: 12,);
+ customIconBuilder: (context, checked) {
+ return const Icon(
+ TDIcons.app,
+ size: 12,
+ );
},
),
],
);
}
+
@Demo(group: 'checkbox')
Widget _customColor(BuildContext context) {
return TDCheckboxGroupContainer(
contentDirection: TDContentDirection.right,
selectIds: const ['0'],
child: Column(
- children: [
+ children: [
TDCheckbox(
selectColor: TDTheme.of(context).errorColor3,
disableColor: TDTheme.of(context).errorColor1,
@@ -396,7 +401,6 @@ class TDCheckboxPageState extends State {
title: '选项禁用-默认',
style: TDCheckboxStyle.circle,
),
-
TDCheckbox(
selectColor: TDTheme.of(context).errorColor3,
disableColor: TDTheme.of(context).errorColor1,
@@ -407,7 +411,6 @@ class TDCheckboxPageState extends State {
subTitleMaxLine: 2,
cardMode: true,
),
-
TDCheckbox(
selectColor: TDTheme.of(context).errorColor3,
id: 'index:1',
@@ -430,7 +433,7 @@ class TDCheckboxPageState extends State {
contentDirection: TDContentDirection.right,
selectIds: const ['0'],
child: Column(
- children: [
+ children: [
TDCheckbox(
id: '0',
title: '选项禁用-已选',
@@ -448,7 +451,6 @@ class TDCheckboxPageState extends State {
titleFont: TDTheme.of(context).fontBodySmall,
subTitleFont: TDTheme.of(context).fontBodyExtraSmall,
),
-
TDCheckbox(
id: 'index:0',
title: '多选',
@@ -466,9 +468,14 @@ class TDCheckboxPageState extends State {
Widget getAllIcon(bool checked, bool halfSelected) {
return Icon(
- checked ? TDIcons.check_circle_filled : halfSelected ? TDIcons.minus_circle_filled : TDIcons.circle,
+ checked
+ ? TDIcons.check_circle_filled
+ : halfSelected
+ ? TDIcons.minus_circle_filled
+ : TDIcons.circle,
size: 24,
- color: (checked || halfSelected) ? TDTheme.of(context).brandNormalColor : TDTheme.of(context).grayColor4
- );
+ color: (checked || halfSelected)
+ ? TDTheme.of(context).brandNormalColor
+ : TDTheme.of(context).grayColor4);
}
}
diff --git a/tdesign-component/example/lib/page/td_collapse_page.dart b/tdesign-component/example/lib/page/td_collapse_page.dart
index 7e7b5ed69..094b7b6ba 100644
--- a/tdesign-component/example/lib/page/td_collapse_page.dart
+++ b/tdesign-component/example/lib/page/td_collapse_page.dart
@@ -3,6 +3,7 @@ import 'package:tdesign_flutter/tdesign_flutter.dart';
import '../annotation/demo.dart';
import '../base/example_widget.dart';
+
class TDCollapsePage extends StatefulWidget {
const TDCollapsePage({Key? key}) : super(key: key);
diff --git a/tdesign-component/example/lib/page/td_date_picker_page.dart b/tdesign-component/example/lib/page/td_date_picker_page.dart
index e17d582f5..ecb23420f 100644
--- a/tdesign-component/example/lib/page/td_date_picker_page.dart
+++ b/tdesign-component/example/lib/page/td_date_picker_page.dart
@@ -22,7 +22,7 @@ class _TDDatePickerPageState extends State {
String selected_8 = '';
String selected_9 = '';
- var weekDayList = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'];
+ final weekDayList = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'];
@override
void initState() {
@@ -52,6 +52,7 @@ class _TDDatePickerPageState extends State {
children: [
ExampleItem(desc: '是否带标题', builder: buildWithTitle),
ExampleItem(desc: '不带标题', builder: buildWithoutTitle),
+ ExampleItem(desc: '不使用弹窗、不带顶部内容', builder: buildWithoutHeader),
],
)
],
@@ -67,286 +68,323 @@ class _TDDatePickerPageState extends State {
@Demo(group: 'datetimePicker')
Widget buildYearMonthDay(BuildContext context) {
- return GestureDetector(
- onTap: () {
- TDPicker.showDatePicker(context, title: '选择时间', onConfirm: (selected) {
- setState(() {
- selected_1 =
- '${selected['year'].toString().padLeft(4, '0')}-${selected['month'].toString().padLeft(2, '0')}-${selected['day'].toString().padLeft(2, '0')}';
- });
- Navigator.of(context).pop();
- },
- dateStart: [1999, 01, 01],
- dateEnd: [2023, 12, 31],
- initialDate: [2012, 1, 1]);
+ return TDCell(
+ title: '选择时间',
+ note: selected_1.isEmpty ? '请选择' : selected_1,
+ arrow: true,
+ onClick: (click) {
+ TDPicker.showDatePicker(
+ context,
+ title: '选择时间',
+ onConfirm: (selected) {
+ setState(() {
+ selected_1 = '${selected['year'].toString().padLeft(4, '0')}'
+ '-${selected['month'].toString().padLeft(2, '0')}'
+ '-${selected['day'].toString().padLeft(2, '0')}';
+ });
+ Navigator.of(context).pop();
+ },
+ dateStart: [1999, 01, 01],
+ dateEnd: [2023, 12, 31],
+ initialDate: [2012, 1, 1],
+ );
},
- child: buildSelectRow(context, selected_1, '选择时间'),
);
}
@Demo(group: 'datetimePicker')
Widget buildYearMonth(BuildContext context) {
- return GestureDetector(
- onTap: () {
- TDPicker.showDatePicker(context, title: '选择时间', onConfirm: (selected) {
- setState(() {
- selected_2 = '${selected['year'].toString().padLeft(4, '0')}-'
- '${selected['month'].toString().padLeft(2, '0')}';
- });
- Navigator.of(context).pop();
- },
- useDay: false,
- dateStart: [1999, 01, 01],
- dateEnd: [2023, 12, 31],
- initialDate: [2012, 1, 1]);
+ return TDCell(
+ title: '选择时间',
+ note: selected_2.isEmpty ? '请选择' : selected_2,
+ arrow: true,
+ onClick: (click) {
+ TDPicker.showDatePicker(
+ context,
+ title: '选择时间',
+ onConfirm: (selected) {
+ setState(() {
+ selected_2 = '${selected['year'].toString().padLeft(4, '0')}-'
+ '${selected['month'].toString().padLeft(2, '0')}';
+ });
+ Navigator.of(context).pop();
+ },
+ useDay: false,
+ dateStart: [1999, 01, 01],
+ dateEnd: [2023, 12, 31],
+ initialDate: [2012, 1, 1],
+ );
},
- child: buildSelectRow(context, selected_2, '选择时间'),
);
}
@Demo(group: 'datetimePicker')
Widget buildMonthDay(BuildContext context) {
- return GestureDetector(
- onTap: () {
- TDPicker.showDatePicker(context, title: '选择时间', onConfirm: (selected) {
- setState(() {
- selected_3 = '${selected['month'].toString().padLeft(2, '0')}-'
- '${selected['day'].toString().padLeft(2, '0')}';
- });
- Navigator.of(context).pop();
- },
- useYear: false,
- dateStart: [1999, 01, 01],
- dateEnd: [2023, 12, 31],
- initialDate: [2012, 1, 1]);
+ return TDCell(
+ title: '选择时间',
+ note: selected_3.isEmpty ? '请选择' : selected_3,
+ arrow: true,
+ onClick: (click) {
+ TDPicker.showDatePicker(
+ context,
+ title: '选择时间',
+ onConfirm: (selected) {
+ setState(() {
+ selected_3 = '${selected['month'].toString().padLeft(2, '0')}-'
+ '${selected['day'].toString().padLeft(2, '0')}';
+ });
+ Navigator.of(context).pop();
+ },
+ useYear: false,
+ dateStart: [1999, 01, 01],
+ dateEnd: [2023, 12, 31],
+ initialDate: [2012, 1, 1],
+ );
},
- child: buildSelectRow(context, selected_3, '选择时间'),
);
}
@Demo(group: 'datetimePicker')
Widget buildHourMinuteSecond(BuildContext context) {
- return GestureDetector(
- onTap: () {
- TDPicker.showDatePicker(context, title: '选择时间', onConfirm: (selected) {
- setState(() {
- selected_4 = '${selected['hour'].toString().padLeft(2, '0')}:'
- '${selected['minute'].toString().padLeft(2, '0')}:'
- '${selected['second'].toString().padLeft(2, '0')}';
- });
- Navigator.of(context).pop();
- },
- useYear: false,
- useMonth: false,
- useDay: false,
- useHour: true,
- useMinute: true,
- useSecond: true,
- dateStart: [1999, 01, 01],
- dateEnd: [2023, 12, 31, 4, 12, 20],
- initialDate: [2023, 12, 31]);
+ return TDCell(
+ title: '选择时间',
+ note: selected_4.isEmpty ? '请选择' : selected_4,
+ arrow: true,
+ onClick: (click) {
+ TDPicker.showDatePicker(
+ context,
+ title: '选择时间',
+ onConfirm: (selected) {
+ setState(() {
+ selected_4 = '${selected['hour'].toString().padLeft(2, '0')}:'
+ '${selected['minute'].toString().padLeft(2, '0')}:'
+ '${selected['second'].toString().padLeft(2, '0')}';
+ });
+ Navigator.of(context).pop();
+ },
+ useYear: false,
+ useMonth: false,
+ useDay: false,
+ useHour: true,
+ useMinute: true,
+ useSecond: true,
+ dateStart: [1999, 01, 01],
+ dateEnd: [2023, 12, 31, 4, 12, 20],
+ initialDate: [2023, 12, 31],
+ );
},
- child: buildSelectRow(context, selected_4, '选择时间'),
);
}
@Demo(group: 'datetimePicker')
Widget buildAll(BuildContext context) {
- return GestureDetector(
- onTap: () {
- TDPicker.showDatePicker(context, title: '选择时间', onConfirm: (selected) {
- setState(() {
- selected_5 = '${selected['year'].toString().padLeft(4, '0')}-'
- '${selected['month'].toString().padLeft(2, '0')}-'
- '${selected['day'].toString().padLeft(2, '0')} '
- '${selected['hour'].toString().padLeft(2, '0')}:'
- '${selected['minute'].toString().padLeft(2, '0')}:'
- '${selected['second'].toString().padLeft(2, '0')}';
- });
- Navigator.of(context).pop();
- },
- useHour: true,
- useMinute: true,
- useSecond: true,
- dateStart: [1999, 01, 01],
- dateEnd: [2023, 12, 31],
- initialDate: [2012, 1, 1]);
+ return TDCell(
+ title: '选择时间',
+ note: selected_5.isEmpty ? '请选择' : selected_5,
+ arrow: true,
+ onClick: (click) {
+ TDPicker.showDatePicker(
+ context,
+ title: '选择时间',
+ onConfirm: (selected) {
+ setState(() {
+ selected_5 = '${selected['year'].toString().padLeft(4, '0')}-'
+ '${selected['month'].toString().padLeft(2, '0')}-'
+ '${selected['day'].toString().padLeft(2, '0')} '
+ '${selected['hour'].toString().padLeft(2, '0')}:'
+ '${selected['minute'].toString().padLeft(2, '0')}:'
+ '${selected['second'].toString().padLeft(2, '0')}';
+ });
+ Navigator.of(context).pop();
+ },
+ useHour: true,
+ useMinute: true,
+ useSecond: true,
+ dateStart: [1999, 01, 01],
+ dateEnd: [2023, 12, 31],
+ initialDate: [2012, 1, 1],
+ );
},
- child: buildSelectRow(context, selected_5, '选择时间'),
);
}
@Demo(group: 'datetimePicker')
Widget buildWeekDay(BuildContext context) {
- return GestureDetector(
- onTap: () {
- TDPicker.showDatePicker(context, title: '选择时间', onConfirm: (selected) {
- setState(() {
- selected_6 = '${selected['year'].toString().padLeft(4, '0')}-'
- '${selected['month'].toString().padLeft(2, '0')}-'
- '${selected['day'].toString().padLeft(2, '0')} '
- '${weekDayList[selected['weekDay']! - 1]}';
- });
- Navigator.of(context).pop();
- },
- useWeekDay: true,
- dateStart: [1999, 01, 01],
- dateEnd: [2023, 12, 31],
- initialDate: [2012, 1, 1]);
+ return TDCell(
+ title: '选择时间',
+ note: selected_6.isEmpty ? '请选择' : selected_6,
+ arrow: true,
+ onClick: (click) {
+ TDPicker.showDatePicker(
+ context,
+ title: '选择时间',
+ onConfirm: (selected) {
+ setState(() {
+ selected_6 = '${selected['year'].toString().padLeft(4, '0')}-'
+ '${selected['month'].toString().padLeft(2, '0')}-'
+ '${selected['day'].toString().padLeft(2, '0')} '
+ '${weekDayList[selected['weekDay']! - 1]}';
+ });
+ Navigator.of(context).pop();
+ },
+ useWeekDay: true,
+ dateStart: [1999, 01, 01],
+ dateEnd: [2023, 12, 31],
+ initialDate: [2012, 1, 1],
+ );
},
- child: buildSelectRow(context, selected_6, '选择时间'),
);
}
@Demo(group: 'datetimePicker')
Widget buildWithTitle(BuildContext context) {
- return GestureDetector(
- onTap: () {
- TDPicker.showDatePicker(context, title: '选择时间', onConfirm: (selected) {
- setState(() {
- selected_7 = '${selected['year'].toString().padLeft(4, '0')}-'
- '${selected['month'].toString().padLeft(2, '0')}-'
- '${selected['day'].toString().padLeft(2, '0')}';
- });
- Navigator.of(context).pop();
- },
- dateStart: [1999, 01, 01],
- dateEnd: [2023, 12, 31],
- initialDate: [2012, 1, 1]);
+ return TDCell(
+ title: '选择时间',
+ note: selected_7.isEmpty ? '请选择' : selected_7,
+ arrow: true,
+ onClick: (click) {
+ TDPicker.showDatePicker(
+ context,
+ title: '选择时间',
+ onConfirm: (selected) {
+ setState(() {
+ selected_7 = '${selected['year'].toString().padLeft(4, '0')}-'
+ '${selected['month'].toString().padLeft(2, '0')}-'
+ '${selected['day'].toString().padLeft(2, '0')}';
+ });
+ Navigator.of(context).pop();
+ },
+ dateStart: [1999, 01, 01],
+ dateEnd: [2023, 12, 31],
+ initialDate: [2012, 1, 1],
+ );
},
- child: buildSelectRow(context, selected_7, '带标题时间选择器'),
);
}
@Demo(group: 'datetimePicker')
Widget buildWithoutTitle(BuildContext context) {
- return GestureDetector(
- onTap: () {
- TDPicker.showDatePicker(context, title: '', onConfirm: (selected) {
- setState(() {
- selected_8 = '${selected['year'].toString().padLeft(4, '0')}-'
- '${selected['month'].toString().padLeft(2, '0')}-'
- '${selected['day'].toString().padLeft(2, '0')}';
- });
- Navigator.of(context).pop();
- },
- dateStart: [1999, 01, 01],
- dateEnd: [2023, 12, 31],
- initialDate: [2012, 1, 1]);
+ return TDCell(
+ title: '选择时间',
+ note: selected_8.isEmpty ? '请选择' : selected_8,
+ arrow: true,
+ onClick: (click) {
+ TDPicker.showDatePicker(
+ context,
+ // 不传或传空字符串、null,则不显示标题
+ // title: '',
+ onConfirm: (selected) {
+ setState(() {
+ selected_8 = '${selected['year'].toString().padLeft(4, '0')}-'
+ '${selected['month'].toString().padLeft(2, '0')}-'
+ '${selected['day'].toString().padLeft(2, '0')}';
+ });
+ Navigator.of(context).pop();
+ },
+ dateStart: [1999, 01, 01],
+ dateEnd: [2023, 12, 31],
+ initialDate: [2012, 1, 1],
+ );
},
- child: buildSelectRow(context, selected_8, '无标题时间选择器'),
);
}
- Widget buildSelectRow(BuildContext context, String output, String title) {
- return Container(
- color: TDTheme.of(context).whiteColor1,
- height: 56,
- child: Stack(
- alignment: Alignment.bottomCenter,
- children: [
- Row(
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
- children: [
- Padding(
- padding: const EdgeInsets.only(left: 16, top: 16, bottom: 16),
- child: TDText(
- title,
- font: TDTheme.of(context).fontBodyLarge,
- ),
- ),
- Padding(
- padding: const EdgeInsets.only(right: 16),
- child: Row(
- children: [
- TDText(
- output,
- font: TDTheme.of(context).fontBodyLarge,
- textColor:
- TDTheme.of(context).fontGyColor3.withOpacity(0.4),
- ),
- Padding(
- padding: const EdgeInsets.only(left: 2),
- child: Icon(
- TDIcons.chevron_right,
- color:
- TDTheme.of(context).fontGyColor3.withOpacity(0.4),
- ),
- ),
- ],
- ),
- ),
- ],
- ),
- const TDDivider(
- margin: EdgeInsets.only(
- left: 16,
- ),
- )
- ],
+ @Demo(group: 'datetimePicker')
+ Widget buildWithoutHeader(BuildContext context) {
+ return TDDatePicker(
+ header: false,
+ model: DatePickerModel(
+ useYear: true,
+ useMonth: true,
+ useDay: true,
+ useHour: true,
+ useMinute: true,
+ useSecond: true,
+ useWeekDay: false,
+ dateStart: [1999, 01, 01],
+ dateEnd: [2023, 12, 31],
+ dateInitial: [2012, 1, 1],
),
+ onChange: (selected) {
+ print('onChange ${selected}');
+ },
);
}
@Demo(group: 'datetimePicker')
Widget _customStartTime(BuildContext context) {
- return GestureDetector(
- onTap: () {
- TDPicker.showDatePicker(context, title: '选择时间', onConfirm: (selected) {
- setState(() {
- selected_5 = '${selected['year'].toString().padLeft(4, '0')}-'
- '${selected['month'].toString().padLeft(2, '0')}-'
- '${selected['day'].toString().padLeft(2, '0')} '
- '${selected['hour'].toString().padLeft(2, '0')}:'
- '${selected['minute'].toString().padLeft(2, '0')}:'
- '${selected['second'].toString().padLeft(2, '0')}';
- });
- Navigator.of(context).pop();
- },
- useYear: true,
- useMonth: true,
- useDay: true,
- useHour: true,
- useMinute: true,
- useSecond: true,
- dateStart: [2012, 1, 15, 12, 28, 11],
- dateEnd: [2012, 6, 15, 12, 48, 32],
- initialDate: [2012, 1, 15, 13, 20]);
+ return TDCell(
+ title: '选择时间',
+ note: selected_5.isEmpty ? '请选择' : selected_5,
+ arrow: true,
+ onClick: (click) {
+ TDPicker.showDatePicker(
+ context,
+ title: '选择时间',
+ onConfirm: (selected) {
+ setState(() {
+ selected_5 = '${selected['year'].toString().padLeft(4, '0')}-'
+ '${selected['month'].toString().padLeft(2, '0')}-'
+ '${selected['day'].toString().padLeft(2, '0')} '
+ '${selected['hour'].toString().padLeft(2, '0')}:'
+ '${selected['minute'].toString().padLeft(2, '0')}:'
+ '${selected['second'].toString().padLeft(2, '0')}';
+ });
+ Navigator.of(context).pop();
+ },
+ useYear: true,
+ useMonth: true,
+ useDay: true,
+ useHour: true,
+ useMinute: true,
+ useSecond: true,
+ dateStart: [2012, 1, 15, 12, 28, 11],
+ dateEnd: [2012, 6, 15, 12, 48, 32],
+ initialDate: [2012, 1, 15, 13, 20],
+ );
},
- child: buildSelectRow(context, selected_5, '选择时间'),
);
}
@Demo(group: 'datetimePicker')
Widget _customLimitTime(BuildContext context) {
- return GestureDetector(
- onTap: () {
- TDPicker.showDatePicker(context, title: '选择时间', onConfirm: (selected) {
- setState(() {
- selected_4 = '${selected['hour'].toString().padLeft(2, '0')}:'
- '${selected['minute'].toString().padLeft(2, '0')}:'
- '${selected['second'].toString().padLeft(2, '0')}';
- });
- Navigator.of(context).pop();
- },
- useYear: false,
- useMonth: false,
- useDay: false,
- useHour: true,
- useMinute: true,
- useSecond: true,
- dateStart: [2023, 12, 31],
- dateEnd: [2023, 12, 31, 4, 12, 20],
- initialDate: [2023, 12, 31, 3, 02, 03]);
+ return TDCell(
+ title: '选择时间',
+ note: selected_4.isEmpty ? '请选择' : selected_4,
+ arrow: true,
+ onClick: (click) {
+ TDPicker.showDatePicker(
+ context,
+ title: '选择时间',
+ onConfirm: (selected) {
+ setState(() {
+ selected_4 = '${selected['hour'].toString().padLeft(2, '0')}:'
+ '${selected['minute'].toString().padLeft(2, '0')}:'
+ '${selected['second'].toString().padLeft(2, '0')}';
+ });
+ Navigator.of(context).pop();
+ },
+ useYear: false,
+ useMonth: false,
+ useDay: false,
+ useHour: true,
+ useMinute: true,
+ useSecond: true,
+ dateStart: [2023, 12, 31],
+ dateEnd: [2023, 12, 31, 4, 12, 20],
+ initialDate: [2023, 12, 31, 3, 02, 03],
+ );
},
- child: buildSelectRow(context, selected_4, '选择时间'),
);
}
@Demo(group: 'datetimePicker')
Widget _customItems(BuildContext context) {
- return GestureDetector(
- onTap: () {
+ return TDCell(
+ title: '选择时间',
+ note: selected_9.isEmpty ? '请选择' : selected_9,
+ arrow: true,
+ onClick: (click) {
TDPicker.showDatePicker(
context,
title: '选择时间',
@@ -385,7 +423,7 @@ class _TDDatePickerPageState extends State {
context, distance),
fontSize: index % 2 == 0 ? 20 : 10,
color: index % 2 == 1
- ? TDTheme.of(context).fontGyColor1
+ ? TDTheme.of(context).textColorPrimary
: TDTheme.of(context).successColor6,
),
)
@@ -393,14 +431,16 @@ class _TDDatePickerPageState extends State {
},
);
},
- child: buildSelectRow(context, selected_9, '选择时间'),
);
}
@Demo(group: 'datetimePicker')
Widget _customItemsOnlyHour(BuildContext context) {
- return GestureDetector(
- onTap: () {
+ return TDCell(
+ title: '选择时间',
+ note: selected_9.isEmpty ? '请选择' : selected_9,
+ arrow: true,
+ onClick: (click) {
TDPicker.showDatePicker(
context,
title: '只有时分',
@@ -418,39 +458,45 @@ class _TDDatePickerPageState extends State {
initialDate: [2025, 1, 1, 22, 46, 0],
);
},
- child: buildSelectRow(context, selected_9, '选择时间'),
);
}
@Demo(group: 'datetimePicker')
Widget _customSelectWidget(BuildContext context) {
- return GestureDetector(
- onTap: () {
- TDPicker.showDatePicker(context, title: '选择时间', onConfirm: (selected) {
- setState(() {
- selected_9 = '${selected['year'].toString().padLeft(4, '0')}-'
- '${selected['month'].toString().padLeft(2, '0')}-'
- '${selected['day'].toString().padLeft(2, '0')} '
- '${selected['hour'].toString().padLeft(2, '0')}:'
- '${selected['minute'].toString().padLeft(2, '0')}:'
- '${selected['second'].toString().padLeft(2, '0')}';
- });
- Navigator.of(context).pop();
- },
- useHour: true,
- useMinute: true,
- useSecond: true,
- dateStart: [1999, 01, 01],
- dateEnd: [2023, 12, 31],
- initialDate: [2012, 1, 1],
- customSelectWidget: Container(
- height: 40,
- decoration: const BoxDecoration(
- color: Colors.red,
- borderRadius: BorderRadius.all(Radius.circular(6))),
- ));
+ return TDCell(
+ title: '选择时间',
+ note: selected_9,
+ arrow: true,
+ onClick: (click) {
+ TDPicker.showDatePicker(
+ context,
+ title: '选择时间',
+ onConfirm: (selected) {
+ setState(() {
+ selected_9 = '${selected['year'].toString().padLeft(4, '0')}-'
+ '${selected['month'].toString().padLeft(2, '0')}-'
+ '${selected['day'].toString().padLeft(2, '0')} '
+ '${selected['hour'].toString().padLeft(2, '0')}:'
+ '${selected['minute'].toString().padLeft(2, '0')}:'
+ '${selected['second'].toString().padLeft(2, '0')}';
+ });
+ Navigator.of(context).pop();
+ },
+ useHour: true,
+ useMinute: true,
+ useSecond: true,
+ dateStart: [1999, 01, 01],
+ dateEnd: [2023, 12, 31],
+ initialDate: [2012, 1, 1],
+ customSelectWidget: Container(
+ height: 40,
+ decoration: const BoxDecoration(
+ color: Colors.red,
+ borderRadius: BorderRadius.all(Radius.circular(6)),
+ ),
+ ),
+ );
},
- child: buildSelectRow(context, selected_9, '选择时间'),
);
}
}
diff --git a/tdesign-component/example/lib/page/td_dialog_page.dart b/tdesign-component/example/lib/page/td_dialog_page.dart
index 1de5a620b..fb91cb732 100644
--- a/tdesign-component/example/lib/page/td_dialog_page.dart
+++ b/tdesign-component/example/lib/page/td_dialog_page.dart
@@ -85,7 +85,8 @@ class _TDDialogPageState extends State {
onTap: () {
showGeneralDialog(
context: context,
- pageBuilder: (BuildContext buildContext, Animation animation, Animation secondaryAnimation) {
+ pageBuilder: (BuildContext buildContext, Animation animation,
+ Animation secondaryAnimation) {
return TDConfirmDialog(
title: _dialogTitle,
content: _commonContent,
@@ -106,7 +107,8 @@ class _TDDialogPageState extends State {
onTap: () {
showGeneralDialog(
context: context,
- pageBuilder: (BuildContext buildContext, Animation animation, Animation secondaryAnimation) {
+ pageBuilder: (BuildContext buildContext, Animation animation,
+ Animation secondaryAnimation) {
return TDConfirmDialog(
content: _commonContent,
);
@@ -126,7 +128,8 @@ class _TDDialogPageState extends State {
onTap: () {
showGeneralDialog(
context: context,
- pageBuilder: (BuildContext buildContext, Animation animation, Animation secondaryAnimation) {
+ pageBuilder: (BuildContext buildContext, Animation animation,
+ Animation secondaryAnimation) {
return TDConfirmDialog(
title: _dialogTitle,
);
@@ -146,7 +149,8 @@ class _TDDialogPageState extends State {
onTap: () {
showGeneralDialog(
context: context,
- pageBuilder: (BuildContext buildContext, Animation animation, Animation secondaryAnimation) {
+ pageBuilder: (BuildContext buildContext, Animation animation,
+ Animation secondaryAnimation) {
return TDConfirmDialog(
title: _dialogTitle,
content: _longContent,
@@ -169,7 +173,8 @@ class _TDDialogPageState extends State {
onTap: () {
showGeneralDialog(
context: context,
- pageBuilder: (BuildContext buildContext, Animation animation, Animation secondaryAnimation) {
+ pageBuilder: (BuildContext buildContext, Animation animation,
+ Animation secondaryAnimation) {
return TDAlertDialog(
title: _dialogTitle,
content: _commonContent,
@@ -190,7 +195,8 @@ class _TDDialogPageState extends State {
onTap: () {
showGeneralDialog(
context: context,
- pageBuilder: (BuildContext buildContext, Animation animation, Animation secondaryAnimation) {
+ pageBuilder: (BuildContext buildContext, Animation animation,
+ Animation secondaryAnimation) {
return TDAlertDialog(
content: _commonContent,
);
@@ -210,7 +216,8 @@ class _TDDialogPageState extends State {
onTap: () {
showGeneralDialog(
context: context,
- pageBuilder: (BuildContext buildContext, Animation animation, Animation secondaryAnimation) {
+ pageBuilder: (BuildContext buildContext, Animation animation,
+ Animation secondaryAnimation) {
return TDAlertDialog(
title: _dialogTitle,
);
@@ -231,7 +238,8 @@ class _TDDialogPageState extends State {
onTap: () {
showGeneralDialog(
context: context,
- pageBuilder: (BuildContext buildContext, Animation animation, Animation secondaryAnimation) {
+ pageBuilder: (BuildContext buildContext, Animation animation,
+ Animation secondaryAnimation) {
return TDInputDialog(
textEditingController: TextEditingController(),
title: _dialogTitle,
@@ -254,7 +262,8 @@ class _TDDialogPageState extends State {
onTap: () {
showGeneralDialog(
context: context,
- pageBuilder: (BuildContext buildContext, Animation animation, Animation secondaryAnimation) {
+ pageBuilder: (BuildContext buildContext, Animation animation,
+ Animation secondaryAnimation) {
return TDInputDialog(
textEditingController: TextEditingController(),
title: _dialogTitle,
@@ -277,7 +286,8 @@ class _TDDialogPageState extends State {
onTap: () {
showGeneralDialog(
context: context,
- pageBuilder: (BuildContext buildContext, Animation animation, Animation secondaryAnimation) {
+ pageBuilder: (BuildContext buildContext, Animation animation,
+ Animation secondaryAnimation) {
return TDImageDialog(
image: _demoImage,
title: _dialogTitle,
@@ -299,7 +309,8 @@ class _TDDialogPageState extends State {
onTap: () {
showGeneralDialog(
context: context,
- pageBuilder: (BuildContext buildContext, Animation animation, Animation secondaryAnimation) {
+ pageBuilder: (BuildContext buildContext, Animation animation,
+ Animation secondaryAnimation) {
return TDImageDialog(
image: _demoImage,
content: _commonContent,
@@ -320,7 +331,8 @@ class _TDDialogPageState extends State {
onTap: () {
showGeneralDialog(
context: context,
- pageBuilder: (BuildContext buildContext, Animation animation, Animation secondaryAnimation) {
+ pageBuilder: (BuildContext buildContext, Animation animation,
+ Animation secondaryAnimation) {
return TDImageDialog(
image: _demoImage,
title: _dialogTitle,
@@ -341,7 +353,8 @@ class _TDDialogPageState extends State {
onTap: () {
showGeneralDialog(
context: context,
- pageBuilder: (BuildContext buildContext, Animation animation, Animation secondaryAnimation) {
+ pageBuilder: (BuildContext buildContext, Animation animation,
+ Animation secondaryAnimation) {
return TDImageDialog(
image: _demoImage,
title: _dialogTitle,
@@ -364,7 +377,8 @@ class _TDDialogPageState extends State {
onTap: () {
showGeneralDialog(
context: context,
- pageBuilder: (BuildContext buildContext, Animation animation, Animation secondaryAnimation) {
+ pageBuilder: (BuildContext buildContext, Animation animation,
+ Animation